VMM: Implementation of Maximum IOPs

Tony Gedge 241 Reputation points
2020-08-19T02:46:50.977+00:00

in VMM 2016, disks can be configured with a Maximum IOPs option:
18594-g1.png

However, I don't know how this IOPs figure is calculated or enforced on the VM. My own tests show that it doesn't appear to match the IOPs reported by my SAN. What I can't tell is whether this is an artifact of the underlying storage layers or something else. The storage for the VM is a VHDX located on a Cluster Shared Volume on an iSCSI-connected LUN. The VM is definitely being rate-limited, but the SAN reports nothing like the IOPs figure configured for the VM.

I want to understand how this works, so that I can appropriately configure IOPs limits to avoid swamping the SAN storage backend and better share the available throughput between the competing VMs.

So, what's the relationship between:

  • the Maximum IOPs figure in VMM,
  • the IOPs reported by the guest, and
  • the IOPs reported by the underlying storage
System Center Virtual Machine Manager
0 comments No comments
{count} votes

Accepted answer
  1. Tony Gedge 241 Reputation points
    2020-08-31T08:17:33.56+00:00

    Thanks for the detailed response Andy, I now understand the context of your answer.

    However, I still don't understand how VMM limits the IOPs used by the client as my observed figures are orders of magnitude different from the configured value.

    I'm assuming it's actually implemented as some Hyper-V function under the covers. My storage subsystem is:

    iSCSI LUN <-> Failover cluster CSV <-> VHD <-> VM

    I have figures for observed IOPs values at the iSCSI LUN level, but of course those are several layers under the actual VHD. I'm assuming, but have no documentation to confirm it, that VMM/Hyper-V is monitoring IOPs at the VM <-> VHD layer, which would be using 4K blocks. Now the LUN is at 512 byte sector size, the NTFS volume underlying the CSV is at 64K clusters and the CSV will also have it's own caching, so what would I monitor at the Hypervisor level to see the actual IOPs presented by the VM?


1 additional answer

Sort by: Most helpful
  1. AndyLiu-MSFT 576 Reputation points
    2020-08-20T04:41:26.777+00:00

    It's not reported by either the guest or underlying storage. You can get the IOPs value by using the PowerShell cmdlet on the Hyper-V host, on which the VM was created.

    You can run the following cmdlets by opening the PowerShell console with Administrator privileges on the host.

    Get-VM -Name aws02 | Enable-VMResourceMetering  
    Measure-VM -Name aws02 | Select-Object -Property AggregatedAverageNormalizedIOPS  
    

    Please replace the 'aws02' with the VM name in your environment. Plus, you can generate read/write disk activities so that you can view the changing of values.

    The following article introduces the info about IOPs.

    Storage Quality of Service for Hyper-V