CPU freq and num of cores: Difference between revisions
No edit summary |
|||
Line 31: | Line 31: | ||
There are several frequency governors which determine the frequency policy.<br> | There are several frequency governors which determine the frequency policy.<br> | ||
The default frequency governor is "ondemand", which sets the CPU frequency depending on the current system load.<br> | The default frequency governor is "ondemand", which sets the CPU frequency depending on the current system load.<br> | ||
(Note: this default governor is selected in the kernel defconfig. You can change it using menuconfig before building the kernel - to reach this setting, go to: CPU Power Management -> CPU Frequency scaling -> Default CPUFreq governor)<br> | |||
<br> | |||
To list all available governors: | To list all available governors: | ||
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors | # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors |
Revision as of 16:56, 18 October 2021
note that there are a few other differences between some of the i.MX SOC models, like RAM bus width (32bit on the Solo, 64bit on the Quad) and some graphics acceleration features.
See all the differences in the following comparison tables:
https://www.nxp.com/docs/en/supporting-information/FLYRIMXPRDCMPR.pdf
https://www.nxp.com/docs/en/supporting-information/IMX8LAYERCMPR.pdf
CPU cores
There are two ways to disable/enable CPU cores:
1. Add 'maxcpus=n' (n being the number of cores you wish to activate), to the kernel command line (the bootargs from U-Boot).
E.g. Assuming you are using our latest U-Boot, stop at the U-Boot command line and enter:
=> setenv kernelargs maxcpus=2
2. To disable/enable cores at kernel runtime:
Disable core X:
# echo 0 > /sys/devices/system/cpu/cpuX/online
Enable core X:
# echo 1 > /sys/devices/system/cpu/cpuX/online
X being the core number you want to enable/disable, and can range from '1' to '(number of actual CPU cores)-1' (cpu0 is always enabled).
To see the active cores, run:
# cat /proc/cpuinfo
CPU frequencies
Governors:
There are several frequency governors which determine the frequency policy.
The default frequency governor is "ondemand", which sets the CPU frequency depending on the current system load.
(Note: this default governor is selected in the kernel defconfig. You can change it using menuconfig before building the kernel - to reach this setting, go to: CPU Power Management -> CPU Frequency scaling -> Default CPUFreq governor)
To list all available governors:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
To read about the different governors, see the following page from the Linux documentation:
https://github.com/varigit/linux-imx/blob/5.4-2.1.x-imx_var01/Documentation/admin-guide/pm/cpufreq.rst
To set the current governor:
# echo GOVERNOR > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
(GOVERNOR being one of the available governors)
Useful commands:
To see the available CPU frequencies:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
To see the current CPU frequency:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Common scenarios:
1. Use the default "ondemand" governor and limit the maximum allowed CPU freq. using the following commands:
To see the current maximum allowed CPU frequency:
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
To set the maximum allowed CPU frequency:
# echo FREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
(FREQ being one of the available CPU frequencies)
2. Use the "userspace" governor and set the CPU to a specific frequency using the following command:
# echo FREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
(FREQ being one of the available CPU frequencies)