Performance tuning guidelines for Hyper-V 2008

microsoft logo

In June 2008 Microsoft published an important document for all the customers that are evaluating and adopting its hypervisor: the Performance Tuning Guidelines for Windows Server 2008.

The document contains a section dedicated to Hyper-V and while most of the suggestions included in this whitepaper are just common sense or recap of the product features, there are some hidden treasures:

Correct Memory Sizing

A good standard for the memory overhead of each VM is 32 MB for the first 1 GB of virtual RAM plus another 8 MB for each additional GB of virtual RAM. This should be factored in the calculations of how many VMs to host on a physical server. The memory overhead varies depending on the actual load and amount of memory that is assigned to each VM.

Disabling File Last Access Time Check

Windows Server 2003 and earlier Windows operating systems update the last-accessed time of a file when applications open, read, or write to the file. This increases the number of disk I/Os, which further increases the CPU overhead of virtualization. If applications do not use the last-accessed time on a server, system administrators should consider setting this registry key to disable these updates.

NTFSDisableLastAccessUpdate

HKLM\System\CurrentControlSet\Control\FileSystem\      (REG_DWORD)

By default, both Windows Vista and Windows Server 2008 disable the last-access time updates.

I/O Balancers Control

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\ = (REG_DWORD)

HKLM\System\CurrentControlSet\Services\VmSwitch\ = (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.

Interrupt Affinity

Under certain workloads, binding the device interrupts for a single network adapter to a single logical processor can improve performance for Hyper‑V. We recommend this advanced tuning only to address specific problems in fully using network bandwidth. System administrators can use the IntPolicy tool to bind device interrupts to specific processors.