Skip to main content

CPU Frequency and DVFS (Linux)

Introduction

The Linux Kernel supports dynamic voltage and frequency switching (DVFS) in order to minimize power usage. Generally, the feature should remain enabled, however, if power consumption and heat dissipation aren't an issue and low latency is required, it might make sense to disable frequency scaling.

Maximum Frequency by SoMs

The maximum frequency to be used depends on the SoC present in the module, see the table below:

ModuleMaximum frequency (Hz)
Colibri iMX6S/DL996000
Colibri iMX6 IT792000
Colibri IMX6ULL792000
Colibri iMX7S792000
Colibri iMX7DL996000
Colibri iMX8QXP1200000
Colibri T20/T20 IT996000
Colibri T301400000
Colibri T30 IT1000000
Apalis iMX6996000
Apalis iMX6 IT792000
Apalis iMX8QM/QP1596000 (A72)
1200000 (A53)
Apalis iMX8QXP1200000
Apalis T301400000
Apalis TK12070000
Verdin iMX8M Mini (IT)1600000
Verdin iMX8M Mini1800000
Verdin iMX8M Plus (IT)1600000
Verdin iMX8M Plus1800000
info

Tegra modules can either have one or all cores enabled. This is controlled by the Linux kernel based on the CPU load. For instance, when the first CPU load goes to 100%, the other cores are enabled.

info

For the Apalis T30 and Colibri T30 (non-IT), the maximum CPU frequency depends on the number of cores enabled: 1 core 1.4GHz; 4 cores 1.3GHz. For the Colibri T30 IT, the maximum frequency is 1 GHz independent of the number of cores enabled.

info

For the Verdin iMX8M Mini/Plus (non-IT), the maximum CPU frequency is 1.8GHz, for IT SoC revisions the maximum CPU frequency is 1.6GHz.

CPU Governor

CPU governors can be viewed as preconfigured power settings for the CPU, for detailed information about governors consult this article.

Available governors can be seen through "scaling_available_governors" file:

root@apalis-t30:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative userspace powersave ondemand performance

Change CPU frequency behavior by using an appropriate governor:

root@apalis-t30:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

CPU Frequency

Available frequencies values can be seen through "scaling_available_frequencies" file:

root@apalis-t30:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
51000 102000 204000 370000 475000 620000 760000 860000 1000000 1100000 1200000 1300000 1400000

Change CPU frequency value by setting the CPU frequency explicitly:

root@apalis-t30:~# echo 860000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
caution

The userspace governor must be set to change the frequency value.

The system will adjust to an appropriate voltage according to frequency. Please note that depending on the board/die temperature, thermal throttling might limit the current frequency in use.

CPUFreq Userspace Tools

The cpufreq userspace tools can be used to achieve the same results as above.

Check the current frequency information:

root@colibri-imx6:~# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: imx6-cpufreq
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0 1
maximum transition latency: 72.0 us.
hardware limits: 396 MHz - 792 MHz
available frequency steps: 396 MHz, 792 MHz
available cpufreq governors: interactive, conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 396 MHz and 792 MHz.
The governor "interactive" may decide which speed to use
within this range.
current CPU frequency is 396 MHz (asserted by call to hardware).
cpufreq stats: 396 MHz:46.32%, 792 MHz:53.68% (61)
analyzing CPU 1:
driver: imx6-cpufreq
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0 1
maximum transition latency: 72.0 us.
hardware limits: 396 MHz - 792 MHz
available frequency steps: 396 MHz, 792 MHz
available cpufreq governors: interactive, conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 396 MHz and 792 MHz.
The governor "interactive" may decide which speed to use
within this range.
current CPU frequency is 396 MHz (asserted by call to hardware).
cpufreq stats: 396 MHz:46.32%, 792 MHz:53.68% (61)

Change CPU frequency behavior to userspace:

root@colibri-imx6:~# cpufreq-set -g userspace

Change CPU frequency value by setting the CPU frequency explicitly:

root@colibri-imx6:~# cpufreq-set -f 396000000


Send Feedback!