概述
CPUFreq Governor/管理器
什么是CPUFreq Governor?
大多数cpufreq驱动(事实上,除了longrun, 所有的都是),甚至大多数的处理器频率调整算法
都仅只支持处理器被设置成一个特定的频率。为了提供动态频率调整,cpufreq 核心必须能够
告知驱动程序一个目标频率。如此,驱动程序才能够提供一个 "->target" 函数调用,而不是一个
已经存在的 ”->setpolicy“ 函数调用。
对于 ”longrun“ 模式, 所有的主频率都保持一致。
然而,对于一个给定的 CPUFreq policy 中,如何去决定使用其中的哪一个频率呢?
这就是 ”CPUFreq governor“扮演的功能。
通常,内核中至少具有 powersave 和 performance 两种模式。
前者是最低频率/低功耗模式,后者是最高频率/高性能模式。
Linux 内核中的Governors
performance 静态设置处理器频率到scaling_min_freq/scaling_max_freq频限定义的最高频率
powersave 静态设置处理器频率到scaling_min_freq/scaling_max_freq频限定义的最低频率
userspace 允许用户或任何用户态程序以 UID=root模式设置处理器频率为一个特定频率
通过创建CPU-device目录中的 scaling_setspeed文件来实现
ondemand 根据当前用途来决定处理器频率。
为了实现此模式,处理器必须具有非常快速切换频率的能力。
conservative 非常类似OnDemand模式,根据当前使用情况来设置处理器频率。
其区别在于,此模式能较平滑的增加或减小处理器速度;而不是一有负载发生
就立即切换到最高频率。此模式更适用于电池供电环境。
通过sysfs, 此模式具有如下变量设置:
freq_step: 其定义了处理器应该平滑增加/减少的频率间隔步长。
缺省 为处理器最高频率的5%。
此值可在0~100间变动。0 表示锁定处理器频率而无论负载情况如何。
100则表示conservative模式退化成为 OnDemand模式(理论上,不考虑overhead)
down_threshold: 类似于 OnDemand 的up_threshold变量,但是表示相反意义。
其值为20表示,如果负载低于20%, 则处理器将降低频率。
interactive 此模式被设计成对交互性负载延迟敏感。此模式依据负载使用情况设置处理器频率,
也类似于 OnDemand 和 Conservative 模式。然而,相比而言,本模式对于如何调整处理器频率更积极。
每 X 毫秒采样一次处理器负载, 将导致CPU在 X 毫秒内性能降低。这可能导致丢frame或者UI停顿。
与采样CPU的方法相比,本模式采取在离开 cpu idle 后,立即检查是否需要提高处理器频率的方式。
当处理器离开 cpu idle 模式,就设置一个在1~2 tick 就会 timeout 的定时器。 如果CPU 在退出
空闲模式时和定时器触发之间非常繁忙,就假定处理器处于未全速运行模式并立即切换至最高频率。
如果处理器不是足够繁忙因此不需要立即切换到最高频率,Governor 将评估自上一次频率调整以来的处理器负载,
选择新的处理器频率并且切换之。
CPUFreq核心的Governor接口
新的governor必须通过 cpufreq_register_governor() 函数向 CPUFreq核心注册自己。
该函数接收如下参数:
governor->name governor唯一名称
governor->governor governor回调函数
governor->owner governor的THIS_MODULE宏
governor->governor 回调函数参数为当前CPU的 cpufreq_policy struct和一个 无符号整型 event 。
有如下几个 events:
CPUFREQ_GOV_START: Governor 将开始 policy_cpu 任务。
CPUFREQ_GOV_STOP Governor 将停止policy_cpu 任务。
CPUFREQ_GOV_LIMITS: 已被 policy->min 和 policy->max 代替。
最后
以上就是年轻咖啡豆为你收集整理的linux调cpu电压,Linux内核中CPU主频和电压调整 (四)的全部内容,希望文章能够帮你解决linux调cpu电压,Linux内核中CPU主频和电压调整 (四)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复