Take control - Park when you need to, don't park when you don't! Use Process Lasso to automate this and more!
Parked CPUs are in Grey, core utilization is in Green
CPU Parking dynamically disables unused CPU cores to conserve energy and reduce heat dissipation. It is a sleep state (C6) that is supported by most newer x86 processors, and newer editions of Windows. CPU Parking temporary disables unused logical cores and/or entire CPU packages (for SMP systems), turning them back on as the load on the CPU(s) increases. CPU parking is similar to frequency scaling, a technology that reduces the speed of cores, except that it scales it to OFF.
Unfortunately, Windows is often far too aggressive in its parking. You can easily have a 75% total CPU load and *still* have parked cores! Further, while unparked is extremely rapid, it isn't instantaneous, and therefore does induce a miniscule delay.
It is unfortunate that there is no documented way to tune down core parking in Windows. If core parking were less aggressive. We can, however, disable it as a Power Profile option. You can choose to disallow parking for some power profiles, but keep it enabled for others.
CPU Parking is a feature of multi-core/SMP systems that disables cores when the system load is low. This decreases energy consumption and reduces heat dissipation. By default, Windows provides no direct way to adjust this via the user interface, as they likely thought everyone would want to keep this enabled. With some tweaks, you can make it reappear in the Power Profile settings. Alternatively, you can use this little stand-alone utility - ParkControl.
According to public documentation on the feature, unpark time is near instantaneous, but there *is* some overhead. Additionally, parking CPUs can potentially reduce core thrashing - when a thread is swapped between cores unnecessarily, causing a performance hit. This is one of its primary roles, in fact, states a document from DELL on configuring its servers.
For systems where power consumption and heat are not an issue, but maximum performance is, it may be desirable to disable CPU Parking. The fact is that even if unparking is near instantaneous, CPU utilization usually occurs in very brief bursts, something I mention frequently. If you look at your CPU utilization and see 15%, that is actually the percentage of time the CPU was active within a relatively large interval (usually 1 second). Actual CPU utilization most often occurs in micro-bursts where the CPU is fully consumed for a few nanoseconds or microseconds. You want those bursts to execute as fast as possible, and this is why all power saving technologies, including frequency scaling, incur *some* performance hit. This is also why a faster CPU does matter, even if you typically don't utilize 100% of available CPU time over a larger interval.
I often watch in the Resource Monitor as it parks cores while system load is nearing 50% of total CPU time. This may be why they provided the newer, and even less documented, option "Processor performance core parking over utilization history decrease factor". This option has *something* to do with how aggressively the Windows scheduler will park CPUs based on over-utilization of parking in the past. In other words, if it has been parking them too often, it will 'ease up'. This *additional* value related to core parking has the description: "Specify the threshold above which a core is considered to have had significant affinitized work scheduled to it while parked". Sadly, since there is no documentation on this power option, I am not yet going to comment more on it - yet. I will say it defaults to 2 and has a maximum of 1000. There are also additional new values such as "Processor performance core parking increase time". I'll leave it to the reader to explore these undocumented advanced values at their own risk!
Additionally, I've found Windows CPU Parking to be excessively aggressive by default. In one test bed, an AMD Bulldozer platform (8150), the scheduling problems were *very* apparent. Turning off CPU Parking causes an immediate boost in responsiveness, particularly for the virtual machines and multimedia applications.
Whether or not Core Parking is actually used on your PC depends on a few factors. First, your PC must be have at least 2 physical or logical cores/CPUs. It can also vary between vendors, as many create sets of custom power profiles supposed to offer better performance or improved battery life (rarely do they). It also can vary between Windows editions. The Server Editions *may* tend to make even more aggressive use of it by default.
Want to see if it is active or not? Fire up the Windows Resource Monitor and go to the CPU tab. Parked cores will be clearly shown as 'Parked' in the caption of their graph. CPU Parking is actually done quite aggressively. On a dual-core HyperThreaded Core i5 (4 logical cores), I have seen cores parked even as total CPU utilization approaches 50%. Windows seems fairly smart, parking the HyperThreaded/fake cores first.
I decided to create a little GUI that will allow the user to enable or disable CPU core parking for any given power profile, and *immediately* apply those changes. There is NO REBOOT required. This can let you easily test your system with or without CPU core parking. You might consider turning it OFF in High Performance (or similar power profile) and leaving it ON for Balanced or Power Saver. It is up to you.
QUESTION: What is that NUMBER that is shown on the GUI? That is the % of cores that *must* remain *unparked*.
As I stated, I personally saw HUGE improvements with the AMD Bulldozer platform, but that may be an anomaly due to its mixed history and hotfixes to deal with the Windows Scheduler (thanks to its paired cores that share computational units between each other).
Whether or not the performance gain for you is large, I don't know. You'll have increased thermal emissions and power consumption, I can tell you that much. I can also say that it is most likely this matters on systems that are heavily taxed *or* that require real-time performance. Audio or video editing, gaming, and other multimedia systems will likely do better with this disabled. Hosts to virtual machines will also probably do better with parking disabled.
Give it a try yourself. The download is a single EXE that auto-extracts and runs itself. Then you're done. If you need it again, run it again ;).
Many places on the internet tell you to edit the registry directly when adjusting CPU Parking. DO NOT DO THIS. What you are doing is manually changing this power profile variable for each power profile on your system. A better way is to use the console mode powercfg.exe. Using it you can also tune the CPU Parking so that a certain percentage of your cores must remain unparked at any given time.
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.
ParkControl is now integrated into Process Lasso v6. It's free. It's awesome. Give it a try ;). However, here are the ParkControl-only, bundle-free, freeware links:
Optimize and automate your running processes with Process Lasso!
You are probably out of luck :o. There is nothing else you can do, short of attempt to upgrade the BIOS [UEFI], check its settings, or upgrade your OS (if the cause). In this situation, the OS, BIOS/UEFI, *or* processor don't support core parking, or that setting of core parking (e.g. DC setting rejected on desktops by the OS). Processors as late as the AMD Phenom II X6 may have problems with CPU core parking being something that can be turned on even in Windows 7. You can manually edit the registry and fool ParkControl into displaying the wrong values, *but* your PC's actual core parking behavior will not change. Originally developed for Server Farms, CPU Core Parking didn't really infiltrate the consumer market until recently - and did so slowly, with adoption for laptops first, where conservation of power is important. Later, someone at Microsoft, AMD, and Intel all respectively decided, why not conserve power on desktop PCs too?
Do remember, it requires *at least* NT 6.1 (2008/R2) and 2 logical processors, else there is no chance of it working. Beyond that, Intel processors are generally more compatible, where-as AMD processors prior to Bulldozer designs and beyond are less compatible. In some cases, it is indeed the BIOS [UEFI] that is preventing the parking, and sometimes even a setting you simply need to change. So, do check for that ;). Perhaps that is your one, best, chance at having CPU core parking.
How do you know if it works? In Windows 7 (NT 6.1) or above, fire up the Resource Monitor and switch to the CPU tab. Just sit there a few seconds and wait. Look at the CPU column on the right. Some CPUs should start saying 'parked', even if your total CPU load is as high as 50% (depending on the system and settings). If you *never* see this, then parking is *not* enabled, so not saving you energy or thermal emissions, but also not hurting your performance.
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 a stand-alone freeware utility to control CPU core parking settings for specific power profiles.
ParkControl is now INCLUDED WITHIN Process Lasso, and with the integration comes more automation features!