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 确认设置是否生效。