CPU FREQ使用参考


1. 概述

正如 Windows 系统下用户可以根据使用场景自行更换 Windows 系统的电源管理策略,Linux 系统同样也有提供电源管理策略供用户设置和修改。本文主要阐述如何在用户空间使用 CPU Frequency Framework 调整 CPU 频率,不涉及驱动的编写及代码分析。


2. 使用CPU FREQ


2.1. 用户层接口

Linux 系统 CPU Frequency Framework 用户层接口操作的文件主要在:

cd sys/devices/system/cpu/

该文件夹下会根据系统 CPU 数量生成对应的文件夹,如当前使用的系统包含两颗 CPU,该目录下的文件结构为:

/sys/devices/system/cpu # ls
cpu0 cpufreq kernel_max online present
cpu1 isolated offline possible uevent

在 SMP SoC 系统,不同 CPU 的 Frequency 的设置是同步的,所以操作 CPU0 文件夹下的文件 CPU1 文件夹下的文件会相应被更改,本文以操作 CPU0 文件夹文件为例进行讲解:

cd cpu0/cpufreq

该文件夹下的文件结构为:

1. /sys/devices/system/cpu/cpufreq/policy0 # ls

2. affected_cpus scaling_cur_freq

3. cpuinfo_cur_freq scaling_driver

4. cpuinfo_max_freq scaling_governor

5. cpuinfo_min_freq scaling_max_freq

6. cpuinfo_transition_latency scaling_min_freq

7. related_cpus scaling_setspeed

8. scaling_available_frequencies stats

9. scaling_available_governors

各个文件的操作权限及含义如下表:

文件名 权限 文件含义
affected_cpus RO 需要软件协调频率的 CPU 列表
cpuinfo_cur_freq RO CPU 当前频率与scaling_cur_freq 相同
cpuinfo_max_freq RO CPU 支持的最高频率
cpuinfo_min_freq RO CPU 支持的最低频率
cpuinfo_transition_latency RO CPU 转换频率所需要的时间(单位:ns)
related_cpus RO 需要软件或硬件协调频率的 CPU 列表
scaling_available_frequencies RO 获取支持的频率
scaling_available_governors RO 获取支持的电源管理策略
scaling_cur_freq RO CPU 当前频率与cpuinfo_cur_freq相同
scaling_driver RO 获取驱动名称
scaling_governor RW 获取或设置电源管理策略
scaling_max_freq RW 获取或设置允许调节的最大频率(单位:kHz)
scaling_min_freq RW 获取或设置允许调节的最小频率(单位:kHz)
scaling_setspeed RW 获取或设置当前频率(单位:kHz)

注:设置 scaling_max_freq 和 scaling_min_freq 时,如果设置的scaling_max_freq 小于 scaling_min_freq 会造成设置失败,建议优先设置 scaling_max_freq。

电源管理策略 策略内容
userspace 由用户空间程序通过scaling_setspeed文件修改频率
powersave 功耗优先策略,直接将频率设置为允许的最小值
ondemand 根据CPU的当前使用率,动态的调节CPU频率
performance 性能优先策略,直接将频率设置为允许的最大值

2.2. 应用举例

将 CPU 频率设置为 1GHz:

1. cd sys/devices/system/cpu/cpu0/cpufreq/

2. echo userspace > scaling_governor

3. echo 1200000 > scaling_max_freq

4. echo 400000 > scaling_min_freq

5. echo 1000000 > scaling_setspeed

6. cat scaling_cur_freq

在设置后建议再次 cat 确认设置是否生效。