新聞中心
從 2.6.0 Linux 內(nèi)核開始,您可以通過 CPUfreq 子系統(tǒng)動態(tài)調(diào)整處理器頻率。當(dāng)處理器以較低的時鐘速度運行時,它們消耗的電能和產(chǎn)生的熱量也相對較少。時鐘速度的這種縮放可以控制系統(tǒng)在未全力運行時消耗較少電能。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),祁東企業(yè)網(wǎng)站建設(shè),祁東品牌網(wǎng)站建設(shè),網(wǎng)站定制,祁東網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,祁東網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
cpufreq概述
cpufreq的核心功能,是通過調(diào)整CPU的電壓和頻率,來兼顧系統(tǒng)的性能和功耗。在不需要高性能時,降低電壓和頻率,以降低功耗;在需要高性能時,提高電壓和頻率,以提高性能。
cpufreq軟件框架
對下,cpufreq基于clock、regulator、pmu等模塊實現(xiàn)頻率和電壓的控制。對上,cpufreq通過cpufreq core、cpufreq governor、cpufreq stats等模塊以sysfs的形式向用戶空間提供頻率的查詢、控制等接口。內(nèi)部,cpufreq內(nèi)部分為core、governor、drivers等模塊。
cpufreq調(diào)頻策略
Performance
性能優(yōu)先,CPU固定工作在其支持的最高頻率。
Powersave
功耗優(yōu)先,CPU固定工作在其支持的最低頻率。
Userspace
系統(tǒng)將變頻策略的決策權(quán)交給用戶態(tài)應(yīng)用程序,并提供了相應(yīng)的接口供用戶態(tài)程序設(shè)置CPU 頻率。
Ondemand
按需動態(tài)調(diào)整CPU頻率, 只要CPU負(fù)載超過閾值up_threshold就會立即設(shè)置為最大頻率,其他時候根據(jù)負(fù)載計算出合適的頻率。
Conservative
與ondemand不同,Conservative不是一味追求最高頻率,而是平滑地調(diào)整CPU頻率,頻率的升降是漸變式的。
interactive
基于內(nèi)核任務(wù)調(diào)度觸發(fā)調(diào)頻callback。在callback函數(shù)中統(tǒng)計兩次調(diào)度之間CPU處于idle和busy的時間,計算出CPU負(fù)載調(diào)頻然后調(diào)頻。
schedutil
schedutil也是基于內(nèi)核任務(wù)調(diào)度觸發(fā)調(diào)頻callback,與interactive不同的是,schedutil使用的負(fù)載來自于內(nèi)核使用任務(wù)負(fù)載跟蹤技術(shù)(PELT/WALT)估計出來的負(fù)載。
cpufreq調(diào)測命令
查詢
以下文件節(jié)點均可通過cat命令顯示
# ls /sys/devices/system/cpu/cpu0/cpufreq/
affected_cpus //當(dāng)前策略作用于哪些online corecpuinfo_cur_freq //當(dāng)前CPU硬件頻率cpuinfo_max_freq //CPU硬件支持的最低頻率cpuinfo_min_freq //CPU硬件支持的最高頻率cpuinfo_transition_latency //硬件支持的切換頻率最小間隔related_cpus //online和offline corescaling_available_frequencies //軟件支持的頻率列表scaling_available_governors //支持的策略列表scaling_cur_freq //軟件設(shè)置的當(dāng)前頻率,通常與cpuinfo_cpus相同,如果出現(xiàn)硬件問題可能導(dǎo)致不一致scaling_driver //當(dāng)前使用的driverscaling_governor //當(dāng)前使用的governorscaling_max_freq //軟件governor設(shè)置的最高頻率scaling_min_freq //軟件governor設(shè)置的最低頻率scaling_setspeed //需將governor類型切換為userspace,才會出現(xiàn),通過echo修改數(shù)值,會切換主頻
設(shè)置
可以通過 echo配置scaling_governor,scaling_max_freq,scaling_min_freq 例如:echo 1400 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
cpufreq編譯配置
#CPU Frequency scalingCONFIG_CPU_FREQ=y #主開關(guān)#CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y #default gov任選某個宏打開即可,決定了cpufreq初始化使用的governor,后續(xù)可在init.rc修改文件結(jié)點#CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y#CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=yCONFIG_CPU_FREQ_STAT=y #維測開關(guān),查看cpufreq統(tǒng)計信息:/sys/devices/system/cpu/cpu0/cpufreq/stats
cpufreq模塊初始化
cpufreq的初始化分為3大階段,依次是core層、governor層和drivers層。
core層
初始化調(diào)頻通知鏈表,pure_initcall(init_cpufreq_transition_notifier_list)創(chuàng)建cpufreq文件結(jié)點,core_initcall(cpufreq_core_init)
governor層
使用cpufreq_register_governor接口注冊各個governor到鏈表中,,例如:
fs_initcall(cpufreq_gov_performance_init);fs_initcall(cpufreq_gov_powersave_init);fs_initcall(cpufreq_gov_userspace_init);fs_initcall(cpufreq_gov_dbs_init);fs_initcall(sugov_register);
drivers層
drivers層的初始化在device_initcall或者late_initcall階段。需要完成以下主要任務(wù):
調(diào)用cpufreq_register_driver注冊驅(qū)動 驅(qū)動的init回調(diào)完成硬件層的初始化,包括clk、regulator、pmu的控制 cpufreq_register_driver接口內(nèi)部完成policy和governor的設(shè)置
分享文章:詳解Linux cpufreq 機制
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/dppopii.html


咨詢
建站咨詢
