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 Specification 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 rdmsr instruction must be executed at privilege level 0, a kernel-mode driver must be used.

Performance Inspector

One method for reading the MSR values is to use the msr from the (abandoned) Performance Inspector project:

  1. Download and unzip pi_win64-20100715.zip (or pi_win32-20100715.zip for 32-bit Windows).
  2. Run tinstall.cmd (as Administrator) to install the driver.
  3. Run 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.

Debugging Tools

It might also be possible to use the rdmsr command in the Debugging Tools for Windows to read the IA32_APIC_BASE MSR.

Boot Policy

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 bcdedit /enum and adjusting the configuration with bcdedit /set x2apicpolicy enable or bcdedit /set x2apicpolicy disable as appropriate.