Hyper-V: Performance decrease in VMs on Intel Xeon 5500 (Nehalem) and 7500 (Nehalem-EX) systems
This issue occurs because of an error in the firmware implementation of the ACPI C-states (processor idle states). This firmware incorrectly maps the "core C3" processor state into the ACPI C2 state. Therefore, when the system enters C2, the platform goes to C3. This behavior causes the local APIC timer (LAPIC timer) of the processor to stop counting and to stop delivering interrupts. However, the Hyper-V hypervisor uses the LAPIC timer as the hypervisor’s internal time source. This behavior causes the problem that is described in the "Symptoms" section.
- A natively-running Windows operating system does not use the LAPIC timer for the internal time source. Therefore, if you run Windows Server 2008 without the Hyper-V role enabled, you will not experience this problem.
- The Nehalem platform introduced deep C-states to server processor SKUs.
Customers who are affected by this issue should contact their system vendor to request an updated BIOS that correctly maps the C-states.
Important This section, method, or task contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base:
322756.KB.[LN] How to back up and restore the registry in Windows
To temporarily work around this problem, disable the ACPI C-states in the BIOS.
Note The firmware may not provide this option. If the firmware does not allow for this option, you can still disable the use of the C2 state. To do this, change the Windows Registry to disable the C2 state through the Windows processor driver as follows.
Windows Server 2008:
reg add HKLM\System\CurrentControlSet\Control\Processor /v Capabilities /t REG_DWORD /d 0x0007e666
Note By default, the C3 state is disabled on Windows Server 2008 Service Pack 1 (SP1) or Service Pack 2 (SP2) with the Hyper-V. When you add this registry entry, all C-states are disabled except for the C1 C-state.
Windows Server 2008 R2 or later:
reg add HKLM\System\CurrentControlSet\Control\Processor /v Capabilities /t REG_DWORD /d 0x0007e066
Article ID: 2000977 - Last Review: 12/02/2014 02:41:00 - Revision: 7.0
- kbhyperv KB2000977