内核所提供cpufreq技术的机制

在cpufreq中内置了5种策略:performance、powersave、userspace、ondemand、conservation。
默认采用ondemand策略,在该策略里每80个毫秒就采集一次cpu的使用率,同时假设前后两次cpu使用率是相同的。通过前一次的cpu使用率推出后一个cpu使用率,完了进行频率设置。所以就总的思想来说还不是很难理解。

目的:

变频技术是指CPU硬件本身支持在不同的频率下运行,系统在运行过程中可以根据随时可能发生变化的系统负载情况动态在这些不同的运行频率之间进行切换,从而达到对性能和功耗做到二者兼顾的目的。

来源:

虽然多个处理器生产厂家都提供了对变频技术的支持,但是其硬件实现和使用方法必然存在着细微甚至巨大的差别。这就使得每个处理器生产厂家都需要按照其特殊的硬件实现和使用方法向内核中添加代码,从而让自己产品中的变频技术在 Linux 中得到支持和使用。然而,这种内核开发模式所导致的后果是各个厂家的实现代码散落在 Linux 内核代码树的各个角落里,各种不同的实现之间没有任何代码是共享的,这给内核的维护以及将来添加对新的产品的支持都带来了巨大的开销,并直接导致了 cpufreq 内核子系统的诞生。

管理策略:

Linux内部共有五种对频率的管理策略userspace,conservative,ondemand,powersave 和 performance

Ø         1.performance :CPU会固定工作在其支持的最高运行频率上;

Ø         2.powersave :CPU会固定工作在其支持的最低运行频率上。因此这两种 governors 都属于静态 governor ,即在使用它们时 CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种 governors 对应的是两种极端的应用场景,使用 performance governor 体现的是对系统高性能的最大追求,而使用 powersave governor 则是对系统低功耗的最大追求。

Ø        3.Userspace:最早的 cpufreq 子系统通过 userspace governor 为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节 CPU 运行频率使用。 (可以使用Dominik 等人开发了 cpufrequtils 工具包 )

Ø        4.ondemand :userspace是内核态的检测,效率低。而ondemand正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的 governor。当CPU有负载的时候选用最大的主频,当CPU空闲的时候一步步降低.

Ø        5.conservative : ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率。即根据CPU使用情况进行升或降频,这种降频策略的主导思想是尽量减小对系统性能的负面影响,从而不会使得系统性能在短时间内迅速降低以影响用户体验。但是在 ondemand governor 的这种最初实现版本在社区发布后,大量用户的使用结果表明这种担心实际上是多余的, ondemand governor 在降频时对于目标频率的选择完全可以更加激进。因此最新的 ondemand governor 在降频时会在所有可选频率中一次性选择出可以保证 CPU 工作在 80% 以上负荷的频率,当然如果没有任何一个可选频率满足要求的话则会选择 CPU 支持的最低运行频率。大量用户的测试结果表明这种新的算法可以在不影响系统性能的前提下做到更高效的节能。在算法改进后, ondemand governor 的名字并没有改变,而 ondemand governor 最初的实现也保存了下来,并且由于其算法的保守性而得名 conservative 。

Ondemand降频更加激进,conservative降频比较缓慢保守,事实使用ondemand的效果也是比较好的。

和ondemand管理器不同的是,在CPU负载高的时候conservative
并不直接跳上最高的主频,而是采用步进的方式来升高主频。

n      Cpufreq在用户态所呈现的接口:

Ø        cpuinfo_max_freq  cpuinfo_min_freq: 分别给出了 CPU 硬件所支持的最高运行频率及最低运行频率,

Ø        cpuinfo_cur_freq 则会从 CPU 硬件寄存器中读取 CPU 当前所处的运行频率。

Ø        Governor在选择合适的运行频率时只会在 scaling_max_freq 和 scaling_min_freq 所确定的频率范围内进行选择

Ø        scaling_cur_freq 返回的是 cpufreq 模块缓存的 CPU 当前运行频率,而不会对 CPU 硬件寄存器进行检查。

Ø        scaling_available_governors 会告诉用户当前有哪些 governors 可供用户使用

Ø         scaling_driver 则会显示该 CPU 所使用的变频驱动程序

Ø        Scaling_governor 则会显示当前的管理策略,往这个上echo其他类型会有相应的转变。

Ø        scaling_setspeed:需将governor类型切换为userspace,才会出现,往这个文件echo数值,会切换主频

1.运行命令:echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
让系统进入userspace模式,然后就可以通过如下命令手动修改CPU的频率:
echo freq_val > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
其中,freq_val为要设置的CPU频率值,以KHz为单位,如336000代表336MHz。freq_val的取值范围是 36000~400000。如果freq_val的值不是12000的整数倍,运行此命令后,CPU频率会被设置到跟freq_val最接近,但又是 12MHz的整数倍的频率。
 
2.运行命令:echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
让系统进入conservative模式,CPU频率将会逐步降低,直到最小值36MHz。
 
3.运行命令:echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
让系统进入powersave模式,CPU频率将直接降低到最小值36MHz。
 
4.运行命令:echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
让系统进入performance模式,CPU频率将直接升高到最大值396MHz。

CPU及串口的变频,当CPU变频前,发PRECHANGE通知给驱动,串口接到该通知后,将FIFO中的内容先发完,然后禁止FIFO;然后CPU做变频的相关改变,改完之后发POSTCHANGE通知;串口收到该通知,以新的时钟重新计数波特率,使能FIFO。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhenwenxian/archive/2010/11/12/6006069.aspx

CPUFREQ驱动使用方法说明(转载)相关推荐

  1. Linux下RTL8723BE无线网卡驱动问题解决方法(转载)

    安装Linux,如果遇到RTL8723BE的网卡真的是个灾难.本人已经被这块石头坑了三次,后来找到一篇文章,完美的解决了这个问题,现分享出来,希望能帮到大家. 一.安装问题: sudo apt-get ...

  2. CentOS 7无线网卡驱动解决方法

    centOS7 BCM43142无线网卡驱动: 解决方法:http://elrepo.org/tiki/wl-kmod Please note: The current Broadcom closed ...

  3. Spark SQL连接数据库找不到Mysql驱动解决方法

    这里说明一点:本文提到的解决Spark insertIntoJDBC找不到Mysql驱动的方法是针对单机模式(也就是local模式).在集群环境下,下面的方法是不行的.这是因为在分布式环境下,加载my ...

  4. 小米15.6笔记本安装UBUNTU18.04 无WIFI驱动解决方法

    小米15.6笔记本安装UBUNTU18.04 无WIFI驱动解决方法 感谢原文博主 原文链接 1.首先查看一下网卡的型号 lshw -C network*-network description: W ...

  5. 第19章 Linux电源管理的系统架构和驱动之CPUFreq驱动

    19.2 CPUFreq驱动 CPUFreq子系统位于drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DVFS(Dynamic Voltage Frequency ...

  6. 安装教程rtx2080ti_Ubuntu18.04.2下安装 RTX2080 Nvidia显卡驱动的方法

    不久前入手了蓝天P870TM1G准系统,配置如下: 1. Z370主板 2. i9-9900k桌面处理器 3. RTX2080移动版 由于显卡太新的缘故,安装Ubuntu16.04时,试了好多版本,只 ...

  7. 计算机网络怎么查看连接打印机驱动,如何查找打印机驱动的方法-电脑自学网...

    正常情况下,打印机在使用之前需要先安装驱动,才能满足人们的日常使用,不然无法正常打印.许多用户购买了打印机后却不知道在哪里下载打印机驱动,其实查找打印机驱动的方法很简单,喷墨打印机TS3180下载驱动 ...

  8. 笔记本安装Win2012R2 心得(包含无线网卡+有线网卡驱动解决方法)

    笔记本:联想昭阳E47G 无线网卡安装方法: 系统安装完毕后将自动识别无线网卡驱动,但需要手动允许WLAN服务开启.(建议,如果是拿来办公或者家用,可以安装上桌面体验)不然,QQ发的截图双击都看不起. ...

  9. Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答

    本教程最早是 一善鱼 YQ-YSY  于2008年编写并发布在Ubuntu中文论坛forum.ubuntu.org.cn配置美化区3D桌面特效版块的: --<图解Ubuntu8.10和8.04最 ...

  10. 在win7中安装AHCI驱动的方法

    在win7中安装AHCI驱动的方法 在win7中安装AHCI驱动的方法 在全新安装WIN7的情况下要开启AHCI,是比较方便的.直接在BIOS中设置硬盘的工作模式为AHCI,然后安装WIN7,在安装的 ...

最新文章

  1. 高通8xxx平台双MIC设置
  2. Boost:parallel grep测试程序
  3. sift算法_单应性Homograph估计:从传统算法到深度学习
  4. 快速入门 Pinia 状态管理库
  5. C#系列四《C#运算符与表达式》
  6. if 语句 写了return 报错
  7. 使用CefSharp在.NET中嵌入Google kernel
  8. 矢量字体合并《注意事项》
  9. webpack+plugin插件机制+weboack dev server工具
  10. ISIS协议基础知识
  11. 使用阿里云邮件推送服务群发邮件
  12. System.arraycopy()方法详解-jdk1.8
  13. ubuntu 安装microsoft office
  14. 在线视频观看系列一:视频分享网站分类
  15. 最近很火的盲盒交友源码v1.1.5 带教程
  16. java制表键_java-制表符的使用说明
  17. 特殊符号 与 unicode 转换
  18. css margin缩写简写
  19. 主流android手机分辨率的调研情况
  20. Android软件开发教学视频(转载)

热门文章

  1. 21虚幻4【UE4】鼠标碰撞检测(实现鼠标监听,从而实现点击场景模型(碰撞体)高亮函数)
  2. CityEngine支持多少种栅格数据?
  3. 东莞天骄计算机职业学校,东莞天骄职校模具设计专业是你成才的选
  4. 用c语言循环链表实现约瑟夫杀人环
  5. python编程:从入门到实践(第二版) 练习8-4
  6. 在DLEPHI中读取unicode文件
  7. 区块链版《头号玩家》:310个BTC引发破解狂潮
  8. 计算机控制系统介绍,介绍加热炉计算机控制系统的使用方
  9. 为什么说,未来的安全就是云安全?
  10. 限制输入框只能输入数字,并且保留两位小数