本文基于Linux4.4
内核介绍CPUFreq
。
在Linux
内核中,CPUFreq
支持动态调整CPU
频率和电压,从而兼顾系统的性能和功耗。例:需要CPU
高性能时,提升CPU
频率和电压;反之,降低CPU
频率和电压。
一、CPUFreq调频策略
CPUFreq
的调频策略主要包括:
1、conservative
保守模式,根据CPU
负载动态调频,按一定的比例平滑的升高或降低频率。
2、interactive
交互模式,直接上最高频率,然后根据CPU
负载慢慢降低。
3、ondemand
按需响应模式,定期检查负载,根据负载来调节频率。
4、performance
高性能模式,性能优先。不考虑耗电,以CPU
最高频率运行。
5、powersave
省电模式,功耗优先。以CPU
最低频率运行,一般不用。
6、userspace
用户隔离模式,用户空间手动调节频率,系统不会调整。
二、CPUFreq调试方法
以RockPI 4A
单板为例,该单板使用RK3399
处理器(双核A72
+四核A53
)和Linux 4.4
内核,CPUFreq
相关参数如下:
1、小核
## 1、CPU0 CPUFreq相关配置参数
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# ls -l
total 0
-r--r--r-- 1 root root 4096 Aug 16 14:49 affected_cpus
-r-------- 1 root root 4096 Aug 16 14:49 cpuinfo_cur_freq
-r--r--r-- 1 root root 4096 Aug 16 14:49 cpuinfo_max_freq
-r--r--r-- 1 root root 4096 Aug 16 14:49 cpuinfo_min_freq
-r--r--r-- 1 root root 4096 Aug 16 14:49 cpuinfo_transition_latency
drwxr-xr-x 2 root root 0 Aug 16 14:49 ondemand
-r--r--r-- 1 root root 4096 Aug 16 14:49 related_cpus
-r--r--r-- 1 root root 4096 Aug 16 14:49 scaling_available_frequencies
-r--r--r-- 1 root root 4096 Aug 16 14:49 scaling_available_governors
-r--r--r-- 1 root root 4096 Aug 16 14:49 scaling_cur_freq
-r--r--r-- 1 root root 4096 Aug 16 14:49 scaling_driver
-rw-r--r-- 1 root root 4096 Aug 16 14:49 scaling_governor
-rw-r--r-- 1 root root 4096 Aug 16 14:49 scaling_max_freq
-rw-r--r-- 1 root root 4096 Aug 16 14:49 scaling_min_freq
-rw-r--r-- 1 root root 4096 Aug 16 14:49 scaling_setspeed
drwxr-xr-x 2 root root 0 Aug 16 14:49 stats
## 2、CPUFreq影响的CPU Core,不显示offline状态
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat affected_cpus
0 1 2 3
## 3、CPU0当前频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat cpuinfo_cur_freq
408000
## 3、CPU0支持的最大频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat cpuinfo_max_freq
1416000
## 3、CPU0支持的最小频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat cpuinfo_min_freq
408000
## 4、频率转换延迟
root@linaro-alip:/sys/devices/system/cpu/cpu1/cpufreq# cat cpuinfo_transition_lattency
40000
## 5、包括online和offline所有CPU Core
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat related_cpus
0 1 2 3
## 6、可用频率列表
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_available_frequencies
408000 600000 816000 1008000 1200000 1416000
## 7、可用的governors
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_available_governors
conservative ondemand userspace powersave interactive performance
## 8、当前频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_cur_freq
408000
## 9、当前governor
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_governor
ondemand
## 10、当前调频策略的最大频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_max_freq
1416000
## 11、当前调频策略的最小频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_min_freq
408000
## 12、在governor为userspace时,可通过设置scaling_setspeed,修改当前频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_setspeed
<unsupported>
## 13、设置governor为userspace,后续可以调整频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# echo userspace > scaling_governor
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_governor
userspace
## 14、设置当前频率
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat scaling_setspeed
408000
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# echo 600000 > scaling_setspeed
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cat cpuinfo_cur_freq
600000
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq#
## 1、CPU1 ~ CPU3 与CPU0 CPUFreq相关配置相同
root@linaro-alip:/sys/devices/system/cpu/cpu0/cpufreq# cd ../../cpu1/cpufreq
root@linaro-alip:/sys/devices/system/cpu/cpu1/cpufreq# cat cpuinfo_cur_freq
600000
root@linaro-alip:/sys/devices/system/cpu/cpu1/cpufreq# cat scaling_governor
userspace
2、大核
root@linaro-alip:/sys/devices/system/cpu/cpu4/cpufreq# ls -l
total 0
-r--r--r-- 1 root root 4096 Aug 16 15:19 affected_cpus
-r-------- 1 root root 4096 Aug 16 15:19 cpuinfo_cur_freq
-r--r--r-- 1 root root 4096 Aug 16 15:19 cpuinfo_max_freq
-r--r--r-- 1 root root 4096 Aug 16 15:19 cpuinfo_min_freq
-r--r--r-- 1 root root 4096 Aug 16 15:19 cpuinfo_transition_latency
drwxr-xr-x 2 root root 0 Aug 16 15:19 ondemand
-r--r--r-- 1 root root 4096 Aug 16 15:19 related_cpus
-r--r--r-- 1 root root 4096 Aug 16 15:19 scaling_available_frequencies
-r--r--r-- 1 root root 4096 Aug 16 15:19 scaling_available_governors
-r--r--r-- 1 root root 4096 Aug 16 15:19 scaling_cur_freq
-r--r--r-- 1 root root 4096 Aug 16 15:19 scaling_driver
-rw-r--r-- 1 root root 4096 Aug 16 14:43 scaling_governor
-rw-r--r-- 1 root root 4096 Aug 16 15:19 scaling_max_freq
-rw-r--r-- 1 root root 4096 Aug 16 15:19 scaling_min_freq
-rw-r--r-- 1 root root 4096 Aug 16 15:19 scaling_setspeed
drwxr-xr-x 2 root root 0 Aug 16 15:19 stats
root@linaro-alip:/sys/devices/system/cpu/cpu4/cpufreq# cat affected_cpus
4 5
大核与小核配置相同,不再单独介绍。
注:转载请注明出处。
网友评论