How to undervolt Intel i-series CPU in Linux

Thumbnail
source: youtube

A guide to undervolt Intel CPU in Linux.

Disclaimer: This process worked for me perfectly, please follow the instructions properly otherwise it might no work for you and may leave an impact to your hardware.

Try it on your own risk!

Overheating is a serious issue in gaming laptops which leads to low performance or may cause laptop to shutdown especially during gaming sessions which consumes CPU and GPU in huge amount.

In my case: When I purchased my laptop it was working fine but when I started playing games on it, it was facing thermal throttling (reducing CPU or GPU freq. to reduce the amount of heat which is producing). So I reached about this issue and find a solution which is Under-volt the CPU.

  • Model — Dell Inspiron 5577
  • CPU — Core i7 7700HQ @ 2.8GHz (Turbo boost @ 3.8 GHz)
  • RAM — 8 GB @ 2400 MHz
  • GPU — Nvidia GTX 1050 4 GB
  • Storage — Western Digital Blue 500 GB NVMe PCIe M.2 SSD

Step — 1: Install pip package

pip is a package manager for python from where we can download packages.

  • Open terminal by pressing CTRL + ALT + T.
  • Type the following command:
sudo apt install python3-pip

To check whether the pip is installed or not just paste the following command in the terminal:

pip3 --version

Expected Output:

pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

Now, we have successfully installed pip our system.

Step — 2 Install undervolt package

undervolt is a program for undervolting Intel CPUs under Linux. It works in a similar manner to the Windows program ThrottleStop (i.e, MSR 0x150).

You can also checkout their GitHub repository: link

Install the undervolt package

sudo pip3 install undervolt

To check whether the undervolt package is installed or not just paste the following command in the terminal:

pip3 show undervolt

Expected Output:

Name: undervolt
Version: 0.3.0
Summary: Undervolt Intel CPUs under Linux
Home-page: http://github.com/georgewhewell/undervolt
Author: George Whewell
Author-email: georgerw@gmail.com
License: GPL
Location: /home/saransh/.local/lib/python3.8/site-packages
Requires:
Required-by:

Now, we have successfully installed undervolt package.

Step — 3: Add Python installed package path to PATH environment variable

The PATH variable is an environment variable which contains a list of paths that UNIX will search of executable command when we run a command.

To add path in PATH variable, follow the given steps:

  • Open terminal and type sudo nano /etc/environment
  • Now append :home/<user>/.local/bin in the PATH variable.
  • Type source /etc/environment
  • Reopen the terminal.

Now type echo $PATH and you should get something like this:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/saransh/.local/bin"

To check whether the undervolt command is working or not just paste the following command in the terminal:

sudo undervolt --read

This should show something similar to this:

temperature target: -5 (95C)
core: -128.91 mV
gpu: 0.0 mV
cache: -128.91 mV
uncore: 0.0 mV
analogio: 0.0 mV
powerlimit: 60.0W (short: 0.00244140625s - disabled) / 45.0W (long: 28.0s - enabled)

Now, we have successfully added the path where all the python packages are installed.

Step — 4: Create a service which will automatically run on boot

First we have to create a unit file. Please follow the given steps:

  • Go to /etc/systemd/system/
  • Type sudo nano undervolt.service
  • Now, paste the following code:
[Unit]
Description=undervolt
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/undervolt -v --core -150 --cache -150 --gpu -100

[Install]
WantedBy=multi-user.target
WantedBy=suspend.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target

Note: Please change these --core and --cache arguments according to your CPU. Please research about your CPU stable offset voltage. Otherwise your system will shutdown and reset to default offset voltage i.e. 0.0 mv or may cause damage to your system.

To check that your script works or not, Type the following command:

systemctl start undervolt.service

and then type systemctl enable undervolt.service

Now, we have successfully setup the startup service.

Please stress test your CPU and find the stable offset voltage.

sudo apt install stress

Run stress test by stress -c <CPU cores> like stress -c 8

Step — 5: Stress test and check CPU temperature

Now, we have to check whether the CPU temperatures are low or not.

sudo apt install i7z

Now open a super user session in new terminal window by sudo su

Now type i7z to run i7z CPU monitor.

i7z CPU monitor
i7z CPU monitor

Now again run Stress test and note the CPU temperature. If the temperature goes above 80 degrees then follow the further steps otherwise you are good to go.

Step — 6: Disable Turbo boost

Disabling turbo boost can lower the temperature by significant amount but it affects the CPU performance. If you are OK with this you can proceed further.

We have create a script to automate the process of disabling the turbo boost because every time you start ubuntu, turbo boost will get ON.

sudo nano /usr/local/sbin/no-turbo.sh

Paste the following code from the very first line:

#!/bin/sh -cd /sys/devices/system/cpu/intel_pstate
echo 1 > no_turbo

sudo nano /etc/systemd/system/no-turbo.service

Paste the following code:

[Unit]
Description="Disable Turbo boost"
[Service]
Type=simple
ExecStart=/usr/local/sbin/no-turbo.sh
[Install]
WantedBy=multi-user.target

To check that your script works or not, Type the following command:

systemctl start no-turbo.service

and then type systemctl enable no-turbo.service

Now, we have successfully disabled the turbo boost.

Woah hoo! Now your system got chill.

Do clap 👏🏻👏🏻 50 times and share the article with your friend if he is facing the issue. Thank you for giving your valuable time.

Student | Java Programmer