Optimize and automate your running processes with Process Lasso!
Core Parking is a sleep state (C6) supported by most newer x86 processors, and newer editions of Windows. Core Parking dynamically disables unused logical cores, turning them back on as the load on the CPU(s) increases. This technology is very similar to frequency scaling, in that it seeks to throttle the CPU's power consumption when idle.
Unfortunately, Window's default power profiles are far too aggressive when it comes to parking, especially on workstations. A large number of complex parameters control when a core is parked, so it is not hard to imagine these being less than ideal in many situations. And, Yes, core parking is enabled by default even in the High Performance power profile.
The core parking settings in Windows are exposed as parameters of power profiles. That means you can, for example, disable core parking for the High Performance profile, but leave it enabled for other profiles.
ParkControl will let you easily edit the core parking settings of your Windows PC’s power profiles.
It is difficult to precisely quantify the performance impact of core parking. However, my experience has been that disabling core parking on some CPUs, with some types of CPU loads, makes a real and substantial improvement in the fluidity of the OS. Fewer lags, stalls, freezes, etc...
Many other users have written to express that disabling core parking made a real and obvious difference.
I will also comment that disabling core parking for newer AMD processors seems to result in the largest performance improvement. I theorize that the recent changes to AMD processor architectures in Bulldozer+, where cores were paired together as 'modules' that share some computational resources, caused a situation where the Windows CPU scheduler is inefficiently managing these CPUs.
Simply run ParkControl, select the target power profile, change the setting, and click apply!
What is that NUMBER that is shown on the GUI? That is the % of cores that must remain *unparked*. So, if it's 25%, then 75% of the CPU's cores can be parked at once (3 of 4).
You can change these settings yourself via Window's Powercfg.exe. You must run this utility with elevated rights, so be sure to open an elevated console window by right-clicking 'cmd.exe' and selecting 'Run as Administrator'.
Also note that these commands adjust the current power profile. I felt it simplest to use these variables as opposed to giving you GUIDs that may or may not apply to your PC's power profile setup.
FIRST, Backup ALL your Power Settings by creating a dump of everything to a TXT file. You can later use this to revert to your default settings.
powercfg /qh > powerconfig.txt
To mandate 50% of available cores always remain unparked, run:
powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 50
To adjust it so that only 25% of available cores remain active at all times, allowing 75% of available cores to be parked, you'd run:
powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 25
Yes, you can use '0' - Windows is not stupid enough to park all cores at once, it will always leave at least one core active. In fact, this is usually the default setting when it is enabled. For example, to enable maximum use of CPU Parking for the power profile you are *currently* using:
powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 0
To disable CPU Parking completely for the power profile you are *currently* using, you'd want to run:
powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 100
After changing the power scheme settings for CPU Parking as desired, you then want to make the changes active by running the command:
powercfg -setactive scheme_current
When I first wrote this I included allowing specification of AC or DC (battery) values for the power scheme. Setting the DC power value isn't documented, so I am going to skip that. Still, to do so you'd simply replace '-setacvalueindex' with '-setdcvalueindex'. It also is not entirely clear if this is supported for every power scheme, though it certainly appears to be. Sadly, Microsoft's documentation is quite scarce.
You should not have to reboot for these changes to take effect. They are immediate! Go ahead and check the Resource Monitor and verify that CPU Parking is indeed as you set it.
I hope this helps some people. Why would you go around making manual edits to the registry when powercfg can do the job for you? You shouldn't. Registry edits are prone to mistakes and are generally more tedious and less clear.
Too bad this option is NOT shown by default in the Windows Power Options, eh? Well, it can be! You can make your Advanced Power Options in Windows show this value!
The actual REG file contents are below.
Windows Registry Editor Version 5.00
This setting seems haphazardly inserted into the power profile subsystem, and may persist across multiple power profiles. It may also have no DC setting that works. If you never saw CPU Parking before, your system probably doesn't support it, else it would have been enabled. These caveats are still being explored.
UPDATE: If you read this page, we observed shortly after AMD's Bulldozer platform was released that performance was substantially increased after CPU Parking was disabled. Microsoft has later issued a hotfix to do just that for Windows 7 and Windows 2008/R2. More information, and the hotfix, can be found here: KB-2646060. User reports seem to indicate a similar issue exists on Intel i7 CPUs, and likely other modern multi-core processors. Windows CPU Parking seems just too aggressive, by default. The good thing is that you can use this tool to enable it in High Performance mode, but keep it in use in other power profiles. You can also compare and contrast the effects of disabling it in real time.
The resource monitor can show you which cores are parked when it does its sample (poll), but that is only once per second. Cores can be parked and unparked hundreds of times a second, so keep that in mind.
DO NOT MANUALLY EDIT THE REGISTRY. THIS WILL TRICK PARKCONTROL INTO THINKING CORE PARKING IS ON, BUT IT HAS NO EFFECT ON THE OPERATING SYSTEM!
ParkControl is freeware that enables easy adjustment of Windows core parking. It is also now included within Process Lasso.
Automatically optimize running processes with Process Lasso - Keep CPU hogs at bay!
Also see our graphical demo of Lasso's ProBalance automated priority adjustment technology ...