Power management on Windows is a very complex intermingled set of systems. Most people probably know of the minimum and maximum processor state settings but there are so many more things going on when you dig deep into all the subsystems and hidden Windows settings.

First, I should talk about some of the tools you will need if you want to follow along with me for this article. You’re going to need Rightmark PPM Panel Utility and Throttlestop. Both of these things are third-party utilities that work in tandem to start exploring how Windows manages the power of your computer. Let’s install the Rightmark PPM Utility. Download it from this link and just install it. Once its installed I want you to not reboot just yet and go to the c:\program files\rightmark\ppmpanel\ folder. In there you will find the ppmpanel.INI file that has some settings in it we need to change to prevent a crash that seems to happen. Use Notepad+ + or Notepad with administrator to edit this file. Under the [addenda] heading I want you to remove monitor from ppmplgin. Now we start the program and go to the settings tab and click elevate at the bottom. We can now change the values for the functions. Next, we will install Throttlestop and run that while we make these changes in the PPM.

Here’s a little background on what we are actually modifying. The Rightmark PPM directly modifies internal Windows power options that are usually hidden. These are registry entries native to Windows. Throttlestop is a little bit more complex. I’m not 100% sure of how it works but I’m going to take a wild guess that it has to do with MSR bits of the processor. It does use the winring0 DLL files, so it is definitely doing something deep in the system. Now that we have both things running let’s take note of what the PPM panel is telling us. PPM tells us what our current power plan is that Windows has loaded, and this will change if you switch power plans while PPM is running. Below that is all of the details of the current power plan. The first section is about core parking and everything in that section has only to do with core parking and ONLY take effect if the minimum cores are set to anything under 100%. You should keep the minimum and maximum at 100%. Core parking is an outdated method of power saving and has way too many cons to recommend that anyone use on a modern system.

What it does is puts the cores of your processor to a parked state when it deems that the system might not need it. Being parked takes time to wake back up and work on things again. The time isn’t long to us but for a processor it’s an eternity. On hyperthreaded multicore systems there is also a nasty issue where it parks cores in a reverse sequential order. That is its normal way of operation but for some processors that could be detrimental for performance.

The next section is the processor performance policy setting which has to do with power states. This is where the usual setting for minimum and maximum processor state is at. There are also other supporting functions that you can modify here. One thing to take note for prebuilt computer users or people on laptops is the Energy Preference % line. This setting will limit how fast your processor can go and I’ve seen it set on laptops even for the plugged-in state which is very odd. Usually you shouldn’t set this to anything other than 0. I suspect some laptop manufacturers set this as a means of saving on thermals. It usually won’t do that and doesn’t do it well, mainly because that isn’t what this function is for.

There is also the line for Autonomous Mode which has to do with processors that are Speed Shift compatible. This should be set to on to take advantage of this processor feature. Along with Throttlestop you can use the Speed Shift functionality to great effect. If you have a Skylake or newer processor let’s switch over to Throttlestop to check this out. First thing is to make sure Throttlestop is on by clicking turn on at the bottom of the window. Next is to click the box for Speed Shift EPP and then click on TPL so we can modify the turbo power limit settings. In this window we have access to the different intel power limit stages and the speed shift range. For my laptop which has an 8250u in it I have this set at 19 for package power long, 75 for power short and 4 for the minimum speed shift and 34 for the maximum. The rest of the modifiable fields are unchecked for the PP0 power limit and 0 in the box, uncheck all the lock and clamp settings, uncheck TDP level control and put 2 in the box, uncheck intel power balance and put 0 in both the boxes. If you want your processor to always run at maximum speed until it hits a power limit, then set the speed shift to the maximum for the minimum. For the most part the processor will stay at the max multiplier until it hits the package power long. After that the processor cores will clock themselves down to meet that specified power level. Using a combination of these settings it is possible to override power limits and force a processor to run at maximum frequency under conditions that aren’t all that favorable for longevity. Sometimes a company might do some strange firmware level things that override these settings under certain conditions.

There are hidden and unmodifiable functionalities for intel processors that allow for accelerometer sensors and other sensors to act upon the processor. This can result in times where just moving your laptop, having your laptop on an uneven surface, closing the lid a certain amount and tons of other things result in your processor cores clocking down for a specified time or until the sensor goes back above its threshold level. This in particular has driven me to the brink of insanity because there is no way to disable it and I haven’t heard of a company admitting that they use any of these available functionalities. But, I’ve looked them up and I know the ability to do this exists in the UEFI the OS and the processor, so it’s a known thing that requires little to no third-party software to implement. It could be as deep as the UEFI of your system or even as deep as the processor or chipset has the lines connected to it, so it’s just always enabled and just waiting for the sensors to send the signals.

Anyway, let’s move on to the next section in the PPM. Next, we have the processor idle policy settings. I’m going to be blunt here, don’t fuck with this. This will disable the idle of the processor cores. Once it is disabled your processor cores will go straight to 100% usage and pretty much max its power limit. This is required for a modern processor.

The next section will be the cooling policy. This is the same thing you normally find in the Windows power config. Active will speed up the fan before slowing your processor and passive won’t. Lastly, we have the platform specific controls. I am not entirely sure what this actually controls. I’ve read the official Microsoft documentation and I’ve toyed around with the settings here. It seems like an extension of the power states and boost states.

If you couldn’t tell, the power subsystem controls a lot of things in Windows. In fact, this is also what controls thread scheduling in Windows. This whole subsystem keeps track of what processes run on what thread and core. How long it ran and on what cores it preferred, the estimated power usage of the program, how many times it switched cores and had to move data around cache and so much more. This is what sucked when Ryzen first came out and then if you updated your system, you noticed things ran better. They updated this subsystem to be better aware of things in relation to Ryzen. This also helps programs that aren’t programmed so well to avoid stepping on themselves with locality issues due to SMT. This is a very deep system with a lot of automation going on.

Speed Shift is interesting because enabling it actually forces Windows to hand off a bit of this decision-making process to the processor itself leading to quicker power state and clock switching and finer granularity in what frequencies it can go to. It might not look faster when you are monitoring the frequency, that is because we are already getting an average sample from a point in time. Without Speed Shift the processor cores are already dynamically switching around faster than we are observing with software sensors. Add Speed Shift into the mix and the measurements become even less accurate. This is a good thing because the processor cores can burst up to a higher frequency when the work requires it and then clock back down almost instantly. If the processor can get work done quicker and power down quicker than that means less heat over time and less power over time because the work is done sooner. Especially with little background tasks that are always going on a Windows PC. Your processor cores could be showing that it’s at 1800mhz right now, but in 30 milliseconds that could go right on up to 3000mhz and zip right through a process that just popped up and then go right back down to 1000mhz in another 30 milliseconds. But I’m getting ahead of myself, let’s get back on the main topic of Windows power management. Usually without all of these tools you only have what Windows and the manufacturer of your computer let you access from the Windows deployment.

Some laptops give access to something called the cTDP which limits the top end power limit. This setting is usually found in the normal Windows power settings menu as “Intel Dynamic Platform and Thermal Framework Settings”. cTDP is a separate power state only for the processor cores and not the entire package of the processor. This allows for a higher IA core only power limit.