SkylarkOS 动态调频使用指南
优质
小牛编辑
130浏览
2023-12-01
简介
DVFS全称Dynamic Voltage and Frequency Scaling,即动态电压频率调整。这项技术可以根据芯片运行的应用程序的计算需求,动态调整电压和频率,从而达到节能的目的。
DVFS技术是一项需要软硬件结合的技术,硬件方面比如Intel的SpeedStep技术以及由此衍生的EIST技术,ARM的IEM和AVS技术等。软件方面对于Linux而言主要就是CPUfreq。
CMOS电路中分为动态功耗和静态功耗,公式为 power=Σ(CV²αf + VI)。 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I代表静态电流。公式中加号前面部分代表动态功耗,后半部分代表静态功耗。要想降低动态功耗的话,需要从C/α/V/f几个参数入手,而对于软件而言,通常可以调节的只有V和f。
Linux对频率的管理策略
目前Linux上通用的策略有五种
策略名 | 策略说明 | |
---|---|---|
performace | CPU固定工作在其支持的最高运行频率上 | |
powersave | CPU固定工作在其支持的最低运行频率上 | |
ondemand | ondemand策略是一个动态策略,它允许CPU在系统负载较高时使用最大时钟频率,并且在系统闲置时使用最小时钟频率。虽然这允许系统相对于系统负载相应地调整功耗,但是这是以牺牲频率切换之间的延迟为代价的。因此,如果系统经常在空闲和繁重的工作负载之间切换,延迟可以抵消任何性能与按需调速器提供的节能优势。 | |
userspace | 用户空间管理器允许用户空间程序(或任何以root身份运行的进程)设置频率。这个调控器通常与cpuspeed守护进程一起使用。在所有的策略中,用户空间是最具可定制性的;并且取决于它如何配置,它可以为系统提供性能和消耗之间的最佳平衡。 | |
conservative | 与ondemand策略一样,conservative策略也根据使用情况调整时钟频率(ondemand策略)。然而,ondemand策略以更激进的方式(即从最大值到最小值和后退)来执行此操作,但conservative策略会逐渐在频率之间切换。 |
内核配置
make menuconfig
CPU Power Management ---> CPU Frequency scaling ---> [*] CPU Frequency scaling CPU frequency translation statistics [ ] CPU frequency translation statistics details Default CPUFreq governor (performance) ---> -*- 'performance' governor < > 'powersave' governor < > 'userspace' governor for userspace frequency scaling < > 'ondemand' cpufreq policy governor < > 'conservative' cpufreq governor *** CPU frequency scaling drivers *** < > Generic DT based cpufreq driver [*] LEO CPUFreq support < > CPU frequency scaling driver for Freescale QorIQ SoCs可以根据需要选择要开启的策略。 ## 应用层接口 与Linux动态频率调整相关的接口在以下目录
/sys/devices/system/cpu/cpufreq/policy0/里面的文件如下:
root@OpenWrt:/sys/devices/system/cpu/cpufreq/policy0# ls -lah drwxr-xr-x 3 root root 0 Feb 5 06:08 . drwxr-xr-x 3 root root 0 Feb 5 06:08 .. -r--r--r-- 1 root root 4.0K Feb 5 07:04 affected_cpus -r-------- 1 root root 4.0K Feb 5 07:04 cpuinfo_cur_freq -r--r--r-- 1 root root 4.0K Feb 5 07:04 cpuinfo_max_freq -r--r--r-- 1 root root 4.0K Feb 5 07:04 cpuinfo_min_freq -r--r--r-- 1 root root 4.0K Feb 5 07:04 cpuinfo_transition_latency -r--r--r-- 1 root root 4.0K Feb 5 07:04 related_cpus -r--r--r-- 1 root root 4.0K Feb 5 07:04 scaling_available_frequencies -r--r--r-- 1 root root 4.0K Feb 5 07:04 scaling_available_governors -r--r--r-- 1 root root 4.0K Feb 5 07:04 scaling_cur_freq -r--r--r-- 1 root root 4.0K Feb 5 07:04 scaling_driver -rw-r--r-- 1 root root 4.0K Feb 5 07:04 scaling_governor -rw-r--r-- 1 root root 4.0K Feb 5 06:08 scaling_max_freq -rw-r--r-- 1 root root 4.0K Feb 5 07:04 scaling_min_freq -rw-r--r-- 1 root root 4.0K Feb 5 07:04 scaling_setspeed drwxr-xr-x 2 root root 0 Feb 5 07:04 stats
每个文件的作用在"内核文档":https://www.kernel.org/doc/Documentation/cpu-freq/user-guide.txt 中有描述:
文件 | 作用 | |
---|---|---|
affected_cpus | 受影响的cpu核,对于单核cpu来说值为0,多核cpu值为受影响的核 | |
cpuinfo_cur_freq | 从硬件获得的当前CPU频率,以KHz为单位。这是CPU实际运行的频率。 | |
cpuinfo_max_freq | 此文件显示处理器可以运行的最低工作频率(以kHz为单位) | |
cpuinfo_min_freq | 此文件显示处理器可以运行的最高工作频率(以kHz为单位) | |
cpuinfo_transition_latency | CPU在两频率之间切换延时 | |
related_cpus | 相关连的CPU核 | |
scaling_available_frequencies | 可用的频率 | |
scaling_available_governors | CPU在两频率之间切换延时 | |
cpuinfo_transition_latency | 可用的策略 | |
scaling_cur_freq | CPU当前频率,由策略和cpufreq内核决定,以KHz为单位,这是内核认为CPU运行的频率 | |
scaling_driver | 这个文件显示了什么cpufreq驱动程序用于设置该CPU的频 | |
scaling_governor | 当前运行的策略,可用通过echo修改 | |
scaling_max_freq | 显示当前的“策略限制”(以千赫兹为单位)。 通过在这些文件中写入新值,可以更改这些限制。 注意:设置策略时,需要先设置scaling_max_freq,然后设置scaling_min_freq。 | |
scaling_setspeed | 读取该文件可已获取当前的编程值,修改该文件来改变由策略表示的一组CPU的当前频率。目前仅支持用户空间管理员。 | |
使用方法
. 调整策略
调整策略前可以先查看内核当前支持哪些策略:
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors
往scaling_governor文件写入内核支持的策略
echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
. 调整频率
- 当处于performance模式时,可用通过修改scaling_max_freq文件来调整频率
调整频率前可以先查看内核当前支持哪些频率:
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
往scaling_max_freq文件写入内核支持的频率
echo 864000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq