Extreme dynamic underclocking (Core i7 laptop)

Status
Not open for further replies.
Aug 5, 2012
3
0
10,510
Hi, all. First post.

I bought a Dell Inspiron N7110 17.1" laptop with the Intel Core i7 2670QM CPU (2.2 GHZ, Turbo Boost to 3.1 GHz). It's running Win7 Home Premium 64-bit, and it's got 6GB of RAM.

I got the All CPU Meter v3.9 sidebar application to monitor the CPU (it shows 8 cores because of hyperthreading). With the CPU fully loaded, the sidebar app only shows it going to 2.2GHz, but the Intel TurboBoost Monitor confirmed that it was indeed boosting to 3.1GHz. I noticed that it never went below 792 MHz when idle, and I was curious as to how low I could make it go.

So, I started digging into the registry.

I found the following key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00

Under that key are all the settings for the CPU. You won't see them in Control Panel >> Power Options until you go to each subkey of the above key. Under most of the subkeys, you'll find a DWORD named 'Attributes'. If you rename it to '_Attributes' (add an underscore to the front of the name), it'll show up in Control Panel >> Power Options.

Actually, the same holds true for all the subkeys of that key I posted above, changing 'Attributes' to '_Attributes' makes them show up in Control Panel >> Power Options. So you can tweak a lot more than just your CPU from Control Panel >> Power Options with this trick.

Anyway, once you've changed the name of the subkey DWORDs to '_Attributes', you can go to Control Panel >> Power Options >> Change Plan Settings >> Change Advanced Power Settings >> Processor Power Management, and tweak to your heart's content.

My settings (I'll only put the settings for 'Plugged In', but you get the idea):
Processor performance increase threshold: 90%
Processor performance core parking min cores: 5%
Processor performance core parking over utilization history decrease factor: 2
Processor performance decrease threshold: 75%
Processor performance core parking increase time: 10 Time check intervals
Allow Throttle States: On
Processor performance decrease policy: Single
Processor performance core parking parked performance state: No Preference
Processor performance boost policy: 100%
Processor performance increase policy: Ideal
Processor idle demote threshold: 33%
Processor performance time check interval: 30 Milliseconds
Processor performance core parking affinity history threshold: 150
Processor idle disable: Enable idle
Processor performance core parking decrease threshold: 33%
Processor idle threshold scaling: Enable scaling
Processor performance core parking decrease policy: Ideal number of cores
Processor idle promote threshold: 50%
Processor performance history count: 10 Time check intervals
Processor performance core parking over utilization weighting: 100
Minimum processor state: 5% <===== NOTE THIS!
Processor performance core parking affinity history decrease factor: 2
Processor performance core parking overutilization threshold: 40%
System cooling policy: Active
Processor performance increase time: 5 Time check intervals
Processor performance core parking over utilization history threshold: 40
Processor performance core parking core override: Enabled
Maximum processor state: 100%
Processor idle time check: 30000 Microseconds
Processor performance core parking increase policy: Ideal number of cores
Processor performance decrease time: 15 Time check intervals
Processor performance core parking increase threshold: 50%
Processor performance core parking decrease time: 100 Time check intervals
Processor performance core parking affinity weighting: 100
Processor performance core parking max cores: 100%

By doing the above, I was able to get the CPU to clock all the way down to 88 MHz. However, you'll note that I put Minimum Processor State at 5%. Twice, when down at 88 MHz, the laptop locked up, so by setting the Minimum Processor State to 5%, it prevents it from getting down to the 88 MHz speed, and instead the new minimum is 198 MHz (which is still pretty darn slow). I haven't had any lockups at 198 MHz, but if I do, I'll bump up the Minimum Processor State again to avoid that speed, as well.

At these speeds, the fan never comes on, and the battery lasts a long time. And the good thing is, when I need the speed, it jumps right up to it's rated 2.2 GHz (and when I'm really pushing it, it TurboBoosts to 3.1 GHz).

I'm still messing with it, trying to optimize it, but the above are the settings I'm using right now.

So, for you tweakers out there, there it is. If anyone knows why at 88 MHz the laptop sometimes locks up (but runs fine most of the time), and how to work around that, please post.
 
Solution

What might be happening is that PLLs/DLLs (Phase-Locked Loop, Delay-Locked Loop) are having a hard time maintaining stable lock because the operating frequency falls too far below their intended operating range which causes some timings/signal to glitch under certain conditions that would not occur at normal clock speeds. For example, one circuit in clock domain "A" might be designed with the assumption that clock domain "B" will always be slower but...
You have to be very careful when underclocking like that. CPUs are not designed to run that slow. You've already seen that at 88Mhz it's not stable. Certain circuits within the CPU are simply not designed to switch below a certain frequency. SDRAM has this problem for sure. I couldn't tell you which one it is, just that there's not much that you can do about it besides leaving it as it was designed. Even if it is 'stable' at a low frequency, there are other logical effects which you may not notice until later on.

Most architectures are designed to scale at most 1 order of magnitude in execution capacity and power dissipation.

When Intel processors step from one speed level to another they change both the voltage and the frequency. The sudden voltage change can overwhelm some power delivery circuits and cause a voltage spike and sudden current inrush which can damage components.
 
Aug 5, 2012
3
0
10,510
You seem to be correct. At 88 MHz, it locked up twice, so I bumped up the minimum speed. At 198 MHz, it locked up once, so I bumped it up again. At 296 it locked up once, so I bumped it up again. It locked up once at 368 MHz, so I bumped it up again.

So now, the minimum speed is 484 MHz (as reported in the All CPU Meter v3.9 sidebar). It appears to be stable at this speed, so far. According to Open Hardware Manager, the lowest CPU power consumption at this speed is 3.8 watts. While listening to iHeart radio, composing this reply, running TeamViewer VNC to control my computer at home, and checking email, the CPU power consumption is averaging about 6.5 watts.

What's weird is that it'll run just fine for a long time at those now-banned low speeds, then for some unknown reason it'll lock up. Perhaps the voltage regulator can't regulate well at those low power consumption rates, perhaps the clock isn't stable at those low speeds, whatever. Or it may be that I've got a setting wrong and it's polling CPU status too often and can't keep up at those low speeds, or it's parking all the cores? I don't know.

Imagine how it'll be when Intel, Microsoft and Dell actually get all the power management glitches worked out, allowing a CPU to throttle back so far that it's taking nearly no power, then jump up to the ideal speed when needed.
 

InvalidError

Titan
Moderator

What might be happening is that PLLs/DLLs (Phase-Locked Loop, Delay-Locked Loop) are having a hard time maintaining stable lock because the operating frequency falls too far below their intended operating range which causes some timings/signal to glitch under certain conditions that would not occur at normal clock speeds. For example, one circuit in clock domain "A" might be designed with the assumption that clock domain "B" will always be slower but your underclocking might be turning things around and causing glitches when certain problematic timing conditions between the two clock domains occur. When crossing clock domains, it is quite common to use double-register sampling but if the source domain is faster than the destination domain, this becomes impossible. Another method of crossing clock domains is to use FIFOs, in which case it is quite possible that the depletion rate under normal circumstances is guaranteed to be high enough to prevent overflows but not in the underclocked case where overflows might be possible under some circumstances.

Trying to operate a complex ASIC like a CPU or GPU with multiple finely tuned clock domains out of its spec opens up a large can of worms.
 
Solution
Status
Not open for further replies.