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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM