Linux系统中的dvfs功能

前言

最近硬件的同事需要我们提供的版本能动态调频,何为动态调频呢?对于CPU来讲,功耗和性能是一对不可调和的矛盾,通过调整CPU的电压和频率,可以在功耗和性能之间找一个平衡点。由于调整是在系统运行的过程中,因此这种功能也称作动态电压/频率调整(Dynamic Voltage/Frequency Scaling,DVFS)。说白了,就是在不需要高性能时,降低电压和频率,以降低功耗;在需要高性能时,提高电压和频率,以提高性能。

正文

在开机过程中,我们可以用下面的命令来读取目前CPU运行的频率:

# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
1488000

可以看到,我板子的运行频率为1488000 KHz。如果将命令封装在脚本中并开机自动,那么就能读取到开机过程中的运行频率变化了,如果开启了DVFS功能的话,读取到的值肯定是否变化的。
一开始,我手上的板子运行频率并没有变化,后来查阅了一些资料后,原来是脚本中设置了关闭,在我板子的inittab脚本中有这么几个命令:

null::sysinit:echo 1488000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
null::sysinit:echo 96000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
null::sysinit:echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

前两条命令的含义是,动态频率的变化范围在96000 KHz~1488000 KHz,但是performance的含义是将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。如果想设置为动态调频,则应该设置如下:

echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

其实在/sys/devices/system/cpu/cpu0/cpufreq目录下还有很多的节点,比如:

1、scaling_available_frequencies

# cat scaling_available_frequencies
96000 192000 312000 408000 504000 600000 696000 816000 912000 1008000 1104000 1200000 1296000 1416000 1488000

支持的所有频率,动态调频就是在这几个值中变化

2、scaling_available_governors

# cat scaling_available_governors
hotplug interactive conservative ondemand performance

除了一开始我们看到的几个调频策略,还有其他的策略可以通过这个节点获取

3、affected_cpus

# cat affected_cpus
0 1 2 3

我们只是设置了CPU0的策略,但是在一些平台,其他的CPU会跟随主CPU的变化而变化,这个节点就可以看出来哪些online的CPU使用相同的策略

参考链接:https://blog.csdn.net/melody157398/article/details/7948101

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章