Optimize and automate your running processes with Process Lasso!
Core parking is an energy conserving mechanism present in most PCs manufactured the last few years. It allows for processor cores to be selectively disabled (parked) during idle loads. Operating systems such as Windows manage the core parking, which is itself implemented in the CPU hardware as sleep state (C6).
So, core parking can save you energy, increasing battery life on devices that have a battery. What's the problem? Unfortunately, Windows excessively aggressive at parking cores. While unparking of cores is rapid, it is not instantaneous, and therefore introduces a slight lag as it ‘ramps up’. This causes performance degradation, particularly when high CPU loads occur in bursts, as they often do.
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.
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 ...