logical processors trying to wake at the same time and getting into contention
with each other. The solution for me was simply to disable the C3 sleep state on
my processors on the Hyper-V host by using the following command:
reg.exe add HKLM\System\CurrentControlSet\Control\Processor /v
Capabilities /t REG_DWORD /d 0x0007e066
Then I would reboot the server, and my problem was solved.
Windows Server Hyper-V has another processor-related setting that is set per virtual
machine. This setting is “Migrate to a physical computer with a different processor
version.” It is not possible to migrate a virtual machine between Intel and AMD
processors by using migration technologies, because of the completely different
architecture and instruction sets of the processor. However, by default you also can’t
migrate between servers with different versions of the same processor family.
Although both servers may have Intel processors, the different processors may have
different capabilities, features, and instructions, which is a problem because some
applications perform tests when they start to check the capabilities of the processor. If
an application checks the processor and decides that it has a certain set of instructions
and is then moved using migration technologies to a server with a different processor
that does not support a particular instruction, when the application makes the call, the
application may crash. To resolve this problem, Hyper-V adds the ability to hide many
higher-level functions of processors in the guest operating systems. You can move
guest operating systems between nodes in a cluster even if the processor versions are
different, because the virtual operating systems are exposed only to the generic
instructions that are present in all versions of the processor family. The functionality
does not scan the processors and expose the lowest common set of functionality of all
of the processors in the cluster; it just limits to a generic basic set lower than all of the
processors in the cluster. Do not enable this setting unless you know that you will
need the ability to move between hosts with different versions, because hiding the
instructions of the processor may cause a performance impact to applications and
services that would otherwise use those instructions to improve performance. This
can also be set using PowerShell with the following command:
Set-VMProcessor -CompatibilityForMigrationEnabled $true
The exact instructions that are hidden when this setting is enabled are shown in Table
2.3.
Table 2.3: Process Features Hidden with Processor Compatibility Enabled
INTEL PROCESSORS AMD PROCESSORS
SSSE3, SSE4.1, SSE4.2,
POPCNT, Misaligned SSE,
XSAVE, AVX
SSSE3, SSE4.1, SSE4.A, SSE5, POPCNT, LZCNT,
Misaligned SSE, AMD 3DNow!, Extended AMD
3DNow!