Linux cpufreq 简介

Spoony 27.55m2020-06-2737 次点击

一、为什么要 CPU 变频
CPU变频即改变CPU运行时的频率,CPU在不同的频率下运行时所需的电压不同,频率越高,所需的电压也随之升高,因此在移动设备领域,为了节省功耗,在系统suspend或者load较小时,让CPU运行在较低的频点,可以减少CPU的功耗,从而延长设备的续航时间。

二、与CPU变频相关的模块
1) OPP
用来描述cpu支持的频率和电压组合,cpu变频时,governor会从支持的频率中选择一个最优的频率,因此opp提供的是cpu可运行的频率范围。

2) governor
动态调整CPU频率的一种机制,常用的governor有Performance,Powersave,Userspace, Ondemand等,后续文章会详细介绍

3) clk
改变CPU的工作频率,就是通过改变cpu 的clk来实现的。

CPU freq framework
CPU freq framwork是整个cpu变频的核心,其主要包含三部分的功能:
1)cpufreq driver可通过其提供的API 注册到framework中
2)cpufreq governor可通过其提供的API实现CPU变频及注册governor到framework中
3)提供一系统的sysfs文件节点,供用户空间限制系统频率及debug使用

三、如何控制CPU的频率?
1)通过sysfs节点
在/sys/devices/system/cpu/cpu0/cpufreq目录下有如下节点:
cpuinfo_min_freq:处理器可以运行的最低频点(KHz)
cpuinfo_max_freq:处理器可以运行的最高频点(KHz)
scaling_available_governors:系统支持的governors
scaling_governor: 如通过echo userspace > scaling_governor命令可以将governor切换为userspace governor
cpuinfo_cur_freq: 从硬件上获得的CPU 频率(KHz)即CPU真正运行的频率
scaling_available_frequencies:CPU 可运行的频点列表
scaling_min_freq and scaling_max_freq:通过这两个节点,可以限制CPU运行的频率范围
scaling_cur_freq:cpufreq governor 和 cpufreq core决定的cpu 频率,可能和cpuinfo_cur_freq读到的频率不一样
scaling_setspeed:在governor 为userspace时有效,可将cpu频率设置为scaling_min_freq and scaling_max_freq之间的某个特定频率

收藏 ♥ 感谢
暂无回复

登录注册 后可回复。