Tweaking CPU Core Parking

I’ve done a lot of Windows Server 2008 R2 and Hyper-V related presentations over the last two years and this topic always seems to generate a few questions.  It's a great feature, but a little obscure and reliable information can be hard to find.  One of the new features of Windows Server 2008 R2 is the ability to “park” CPU cores. For Hyper-V, the very deep processor idle sleep states that offer the most benefit with core parking are only supported with CPU features that were introduced with the Nehalem/Opteron CPU’s.  So, to be clear – core parking will work with all multi-core CPU types but when using Hyper-V you are going to see the most benefit when using the latest Xeon/Opteron processors.

The following excerpt is from the R2 Performance Tuning Guide which can be found HERE:

(Starting on page 27 of THIS whitepaper details ALL of the available options to tweak CPU core parking)

Processor Performance Core Parking Maximum and Minimum Cores

Core parking is a new feature in Windows Server 2008 R2. The processor power management (PPM) engine and the scheduler work together to dynamically adjust the number of cores that are running threads. The PPM engine chooses a minimum number of cores on which threads will be scheduled. Cores that are chosen to be “parked” do not have any threads scheduled on them and they can drop into a lower power state. The remaining set of “unparked” cores are responsible for the entirety of the workload (with the exception of affinitized work or directed interrupts). Core parking can increase power efficiency during lower usage periods on the server because parked cores can drop into a low-power state.

For most servers, the default core-parking behavior provides the optimum balance of throughput and power efficiency. If your server has specific core-parking requirements, you can control the number of cores available to park by using either the Processor Performance Core Parking Maximum Cores parameter or the Processor Performance Core Parking Minimum Cores parameter in Windows Server 2008 R2.

The values for these parameters are percentages in the range 0–100. The Maximum Cores parameter controls the maximum percentage of cores that can be unparked at any time, while the Minimum Cores parameter controls the minimum percentage of cores that can be unparked. To turn off core parking, set the minimum cores parked to 100 percent by using the following commands:

Powercfg -setacvalueindex scheme_current sub_processor bc5038f7-23e0-4960-96da-33abaf5935ec 100

Powercfg -setactive scheme_current

To reduce the number of schedulable cores to 50 percent of the maximum count, set the Maximum Cores parameter to 50 as follows:

Powercfg -setacvalueindex scheme_current sub_processor bc5038f7-23e0-4960-96da-33abaf5935ec 50

Powercfg -setactive scheme_current

Now check to see if it’s working – use Resource Monitor to see if any cores are parked: