• Linux性能之DVFS/cpufreq【转】


    转自:https://www.jianshu.com/p/982ab0e98f45

    简介

    DVFS全称Dynamic Voltage and Frequency Scaling,即动态电压频率调整。这项技术可以根据芯片运行的应用程序的计算需求,动态调整电压和频率,从而达到节能的目的。

    DVFS技术是一项需要软硬件结合的技术,硬件方面比如Intel的SpeedStep技术以及由此衍生的EIST技术,ARM的IEM和AVS技术等。软件方面对于Linux而言主要就是CPUfreq技术,下面我们着重分析一下这项技术。在开始之前,稍微讲一点硬件知识。

    CMOS电路中分为动态功耗和静态功耗,公式为 power=Σ(CV²αf + VI)。 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I代表静态电流。公式中加号前面部分代表动态功耗,后半部分代表静态功耗。要想降低动态功耗的话,需要从C/α/V/f几个参数入手,而对于软件而言,通常可以调节的只有V和f。

    cpufrq

    好,基于上面的背景,对于Cpufreq技术其实也就是软件根据系统的负载,动态的去调整电压和频率来平衡性能和功耗。

    总体而言,Cpufreq包含两部分内容,一是策略部分,该部分与具体CPU无关;而是driver部分,与具体平台实现策略有关系。这种设计的优点是实现了策略和实现机制的分离。首先看策略部分,目前Linux上通用的策略有五种,如下表所示:

    策略名策略说明
    ondemand 平时以低俗运行,系统负载提高时按需提高频率
    performance CPU以最高频率运行
    conservative 跟ondemand方式类似, 不同之处在于提高频率时渐进提高
    powersave cpu以最低频率运行
    userspace 使用用户在/sys 节点scaling_setspeed设置的频率运行

    对于安卓系统而言,还增加了一种interactive策略针对延时敏感的UI任务,当有UI任务时,改策略会采取更加激进的方式调节CPU频率。

    对于用户空间而言,一般可通过/sys/devices/system/cpu/cpu[x]/cpufreq/xxx来查看CPU的调度策略或者进行设置。
    主要有以下接口暴露给用户:

    接口名字解释
    cpuinfo_max_freq CPU硬件配置的最高频率
    cpuinfo_min_freq CPU硬件配置的最低频率
    cpuinfo_cur_freq CPU当前运行频率,硬件读取
    scaling_cur_freq CPU当前运行频率,CPUfreq模块缓存的频率
    scaling_driver CPU驱动模块
    scaling_governor 当前的调度策略
    scaling_available_governors 可用的调度策略
    scaling_setspeed 当策略为user时,设置CPU频率

    当切换不同调度策略时,还会出现一些新的接口。但通用接口如上表所示。

    对于dirver而言,如果需要监控CPUfrq系统的变化,那么存在两种类型的通知,一种是CPUfreq的策略变化,另一种是CPU频率的变化。
    策略变化总共有三种类型的通知:
    CPUFREQ_ADJUST-只要有需要,所有的被通知者可以在此时修改policy的限制信息,比如温控系统可能会修改在大允许运行的频率。
    CPUFREQ_INCOMPATIBLE-只是为了避免硬件错误的情况下,可以在该通知中修改policy的限制信息。
    CPUFREQ_NOTIFY-真正切换policy前,该通知会发往所有的被通知者。
    CPU频率变化会发出两种类型的通知:
    CPUFREQ_PRECHANGE-调整前的通知
    CPUFREQ_POSTCHANGE-完成调整后的通知
    另外,系统休眠/唤醒如果CPU频率发生变化,还会发出CPUFREQ_SUSPENDCHANGE和CPUFREQ_RESUMECHANGE这两个通知。

    需要注意的是,除了CPU之外,其他设备也可能存在DVFS的调整需求,可以关注devfreq,对应到driver/devfreq驱动目录。

    内核配置

    内核在编译阶段就可以选择支持的governor以及默认governor。在menuconfig中可配置CONFIG_CPU_FREQ,CONFIG_CPU_FREQ_GOV_PERFORMANCE, CONFIG_CPU_FREQ_GOV_POWERSAVE, CONFIG_CPU_FREQ_GOV_USERSPACE, CONFIG_CPU_FREQ_GOV_ONDEMAND, CONFIG_CPU_FREQ_GOV_CONSERVATIVE
    等来选择是否开启CPUfreq,以及选择哪种governor。

    调优

    Linux 3.1之后内核将cpupower-utils集成进内核tools/power/cpupower目录,改工具集的cpufreq-bench工具可以用来分析不同策略对CPU性能的影响。该工具的原理是模拟系统运行的状态来对比其他策略相比于performance高频模式完成任务的时间比例。以ondemand策略为例,命令使用方式如下:
    cpufreq-bench -l 50000 -s 100000 -x 50000 -y 100000 -g ondemand -r 5 -n 5 -v
    一般达到目标90%左右的比例视为理想比例。



    作者:piefeng
    链接:https://www.jianshu.com/p/982ab0e98f45
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(模拟+线段树)
    [转]Red Hat Linux相关产品iso镜像下载【百度云】
    VMware Workstation Pro 14 虚拟机安装教程
    POJ
    HDU
    HDU
    HDU
    HDU
    1087 有多少不同的值 (20 分)
    1088 三人行 (20 分)
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13597470.html
Copyright © 2020-2023  润新知