While troubleshooting a graphics-related freeze on Linux I was asked whether Windows uses x2APIC. It was not immediately clear to me how to check, and my initial searching did not come up with a convenient command or WMI property to query. This post describes the method I used to read the configuration from the model-specific registers (MSRs) in hopes that it may save others the time effort of figuring it out.
The Intel(R) 64 Architecture x2APIC
says that “System software can place the local APIC in the x2APIC mode by
setting the x2APIC mode enable bit (bit 10) in the
IA32_APIC_BASE MSR at MSR
address 01BH.” Conversely, reading the
IA32_APIC_BASE MSR and checking
bit 10 will indicate whether the system is in x2APIC mode. Since the
instruction must be executed at privilege level 0, a kernel-mode driver must
- Download and unzip pi_win64-20100715.zip (or pi_win32-20100715.zip for 32-bit Windows).
tinstall.cmd(as Administrator) to install the driver.
msr -r APIC_BASE
The output should look something like the following:
***** msr v2.0.7 for x64 ***** CPU0 msr 0x1B = 0x00000000:FEE00900 (4276095232) CPU1 msr 0x1B = 0x00000000:FEE00800 (4276094976) CPU2 msr 0x1B = 0x00000000:FEE00800 (4276094976) CPU3 msr 0x1B = 0x00000000:FEE00800 (4276094976)
Since bit 10 (0x400) is not set for any processor, it is clear that my system is not running in x2APIC mode.
Whether x2APIC is enabled or disabled is both a matter of hardware/BIOS/driver
support and a matter of policy. If the x2APIC state does not match
expectations, consider checking the Windows boot configuration using
adjusting the configuration with
bcdedit /set x2apicpolicy
bcdedit /set x2apicpolicy disable as appropriate.