我是靠谱客的博主 年轻咖啡豆,最近开发中收集的这篇文章主要介绍linux调cpu电压,Linux内核中CPU主频和电压调整 (四),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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主频和电压调整 (四)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部