Hyper-V How To: Balance VM I/O

Wondering how all the I/O requests by virtual machines are handled in Hyper-V? Hyper-V has a storage IO balancer which prevents one busy VM from starving another VM. The Performance Tuning Guidelines for Windows Server 2008 at https://www.microsoft.com/whdc/system/sysperf/Perf_tun_srv.mspx provides the following detail:

I/O Balancer Controls

The virtualization stack balances storage I/O streams from different VMs so that each VM has similar I/O response times when the system’s I/O bandwidth is saturated. The following registry keys can be used to adjust the balancing algorithm, but the virtualization stack tries to fully use the I/O device’s throughput while providing reasonable balance. The first path should be used for storage scenarios, and the second path should be used for networking scenarios:

HKLM\System\CurrentControlSet\Services\StorVsp\<Key> = (REG_DWORD)

HKLM\System\CurrentControlSet\Services\VmSwitch\<Key> = (REG_DWORD)

Both storage and networking have three registry keys at the preceding StorVsp and VmSwitch paths, respectively. Each value is a DWORD and operates as follows. We do not recommend this advanced tuning option unless you have a specific reason to use it.

Note that these registry keys might be removed in future releases:

IOBalance_Enabled

The balancer is enabled when set to a nonzero value and disabled when set to 0. The default is enabled for storage and disabled for networking. Enabling the balancing for networking can add significant CPU overhead in some scenarios.

IOBalance_KeepHwBusyLatencyTarget_Microseconds

This controls how much work, represented by a latency value, the balancer allows to be issued to the hardware before throttling to provide better balance. The default is 83 ms for storage and 2 ms for networking. Lowering this value can improve balance but will reduce some throughput. Lowering it too much significantly affects overall throughput. Storage systems with high throughput and high latencies can show added overall throughput with a higher value for this parameter.

IOBalance_AllowedPercentOverheadDueToFlowSwitching

This controls how much work the balancer issues from a VM before switching to another VM. This setting is primarily for storage where finely interleaving I/Os from different VMs can increase the number of disk seeks. The default is 8 percent for both storage and networking.