CPU Frequency Scaling On Linux With cpupower
by XiongJJ
CPU frequency scaling enable OS to scale the frequency of the CPU for several purpose, including power saving and for bench-marking purpose. This tutorial shows how to scale the frequency of CPU manually using cpupower
.
Several notes:
- This is tutorial is written using Ubuntu, but also tested in Arch, should works well with other linux distro too.
- Most of the commands used below requires root permission.
Installing cpupower
Enter the command below to install the needed tools
$ sudo apt install linux-tools-common linux-tools-generic linux-tools-`uname -r`
Steps before configuring the frequency
Changing your CPU driver
Run the command to attain CPU information:
$ cpupower frequency-info | grep driver
It will show up something like this:
driver: intel_pstate
which indicates that the current driver is called intel_pstate
. For more information regarding the driver, please refer to the document at kernel.org. This driver provides 2 choices of CPU governor which are performance
and powersave
. However, it doesn’t have the governor for us user to make customization to the frequency.
Hence, we have to replace the driver with other alternatives.
First, open the file /etc/default/grub
and add the phrase intel_pstate=disable
to the line GRUB_CMDLINE_LINUX_DEFAULT
. After adding the phrase it should looks like
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_pstate=disable"
Then, execute the command:
$ update-grub
Upon the next boot, check again the driver in use. If it shows acpi-cpufreq
as result then we have successfully replaced the driver. To switch it back simply remove the phrase intel_pstate=disable
from the line and run update-grub
again.
Changing CPU governor
Run the command:
$ cpupower -c 0 frequency-info
The result are shown as below:
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us
hardware limits: 400 MHz - 1.80 GHz
available frequency steps: 1.80 GHz, 1.80 GHz, 1.70 GHz, 1.60 GHz, 1.50 GHz, 1.40 GHz, 1.30 GHz, 1.20 GHz, 1.10 GHz, 1000 MHz, 900 MHz, 800 MHz, 700 MHz, 600 MHz, 500 MHz, 400 MHz
available cpufreq governors: userspace performance schedutil
current policy: frequency should be within 400 MHz and 1.80 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.40 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
Within the options at available cpufreq governors
, we are going to use the governor userspace
which allows us to do modification. If you don’t have userspace
in your list then run the command
modprobe cpufreq_userspace
To choose userspace
as the CPU governor and scale the frequency, run the following commands:
$ sudo cpupower frequency-set -g userspace
$ sudo cpupower frequency-set -f 1400MHz
The input unit for the frequency can be Hz, MHz and GHz.
Your CPU should now running at your desired speed.
$ grep MHz /proc/cpuinfo
cpu MHz : 1400.082
cpu MHz : 1400.100
cpu MHz : 1400.009
cpu MHz : 1400.000
cpu MHz : 1400.026
cpu MHz : 1400.123
cpu MHz : 1400.026
cpu MHz : 1400.002
Subscribe via RSS