GNU+Linux command memo

Undervolt Intel mobile CPU (Kabylake)

Baisser la tension d’alimentation de son microprocesseur Intel (génération Kabylake ou plus) pour qu’il chauffe moins et s’autorise à fonctionner plus vite.

What is “undervolting”? Undervolting means to reduce the voltage a component receives.

Why does this matter? Lowering the voltage, even by relatively small amounts, reduces the power draw of the components (in this case, the CPU) and thus decreases the heat generated while increasing battery life.

What’s the catch? Actually, there is little to no risk involved. The worst thing that can happen is that if you reduce the voltage too much, the computer may crash, and you will have to decrease your undervolt (that is, give a little more voltage back).

— Douglas Black 2019-09-12
sudo pacman -S intel-undervolt

Once installed (here in Arch / Artix Linux environment), you can display the current situation, or apply new settings. The settings are decided in a /etc/intel-undervolt.conf file. The file is well documented via comments and here are the useful lines :

enable yes
# CPU Undervolting
# Usage: undervolt ${index} ${display_name} ${undervolt_value}
# Example: undervolt 2 'CPU Cache' -25.84
undervolt 0 'CPU' -100 (1)
undervolt 1 'GPU' -375 (2)
undervolt 2 'CPU Cache' -50 (3)
    […] (4)
interval 5000
daemon undervolt
1 This line is telling intel-undervolt to decrease by 100 millivolts the main CPU.
2 This looks unprecedented for what I read on forums, too low… and in fact the machine still can run a glxgears at -600. I chose a safer value by lack of time to explore this parameter more.
3 Here also, it’s surprising, because I read on forums that CPU Cache and CPU values was coupled for other reported experiences. Still, my machine crash if I even try -60.
4 I don’t bothered making more settings, partly based on this statement from LinusTechTips : 6. Analog I/O are things like onboard sensors (Vccio refers to the voltage of this in desktops). System Agent are stuff like the memory controller and PCIe bus controller (as Vccsa in desktops). Both consume little power so there’s no point in undervolting them and cause problems like crashing or sensor reporting false data.

To reach the demonstrated values I first set the enable line to no and then edit and applied several values, by steps of 25 mV, until the machine froze. Then I reboot and set the value to the previous 25 mV step, and repeated for each values.

When I checked that the laptop was working well, I enabled the daemon (to get the wanted undervolting values re-applied at boot time).

# vi /etc/intel-undervolt.conf
# intel-undervolt read
CPU (0): -0.00 mV
GPU (1): -0.00 mV
CPU Cache (2): -0.00 mV
# intel-undervolt apply
CPU (0): -25.00 mV
GPU (1): -0.00 mV
CPU Cache (2): -0.00 mV
    [repeat with lower values]

If you get lucky, your hardware will support a big undervoltage.

Beware to test your laptop plugged in and on batteries (I had to set less extreme settings to avoid laptop freezing on battery.

This tweak makes sense because its easy to notice that Intel overvolted their Kabylake CPU, compared to previous generations, with no obvious reasons.

intel-undervolt can also change power package limits and critical temperature offset, but I would not recommend messing with those values, as I found no incentive about possible Intel over-cautious settings here. Critical temperature is a parameter that constantly increased and is now stable in new processors, year after year.

Still, the readings that intel-undervolt can produce about those parameters are interesting :

Short term package power: 15 W, 0.002 s, enabled (1)
Long term package power: 7 W, 28.000 s, enabled (2)
tjoffset -10 (3)
1 Seems hard to notice that the CPU can run very fast for 2 milliseconds
2 Not obvious to notice that the CPU will slow down after nearly 1/2 a minute of intensive computation
3 Here the /etc/intel-undervolting.conf file recommends a safer value than the default one.

To finish, does it change something ? I noticed it obviously, but I measured it also. I launched 4 parallel yes commands and my CPU [1] was running at 1.36 GHz before undervolting and 1.60 GHz after. It was with a -125 mV setting, rather than the -100 mV I currently use, since running the laptop on battery required less extreme settings and since I had a computer freeze (crash) after 3 months of usage of a -112 mV setting.

1. Intel® Core™ m7-6Y75 CPU @ 1.20GHz