精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文搞懂linux cpu dvfs

sakobpqhz6 ? 來源:黑客與攝影師 ? 2023-03-07 11:35 ? 次閱讀

1.介紹

CPU dvfs(dynamic voltage frequency scaling)子系統負責cpu運行時,對其頻率及電壓進行調整,以求性能滿足的前提下,cpu的功耗盡可能低。

芯片的CMOS電路的功耗有個計算公式,比較復雜,簡單來說功耗跟電壓平方成正比,跟頻率成正比,因此CPU dvfs在涉及到電壓調整的時候,功耗受益還是很明顯的。 但是僅調頻的話,收益是比較小的,因為頻率對應著算力,當頻率減少,對應的算力也減弱,這樣執行時間也會變長。

CPU dvfs framework(也常被稱為cpufreq framework)和其他的linux framework類似。 主要解決兩個問題:什么時候調頻調壓,怎么調頻調壓。 cpufreq driver提供調頻調壓的機制,cpufreq governor提供不同的策略,cpufreq core對通用的調頻邏輯做抽象,為上層提供功能、接口封裝,對下層調用抽象封裝的硬件控制接口。 此外,還借助頻率電壓對opp(operating performance points)功能,clk driver、regulator driver對頻率及電壓做硬件時鐘及電壓的調整。

2. 框架

wKgaomQGsQuAfLuBAAEKvVhe-Wk418.png

cpufreq core:是cpufreq framework的核心模塊,和kernel其它framework類似,主要實現三類功能

抽象調頻調壓的公共邏輯和接口,主要圍繞struct cpufreq_driver、struct cpufreq_policy和struct cpufreq_governor三個數據結構進行

以sysfs的形式向用戶空間提供統一的接口,以notifier的形式向其它driver提供頻率變化的通知。

提供CPU頻率和電壓控制的驅動框架,方便底層driver的開發; 同時,提供governor框架,用于實現不同的頻率調整機制。

cpufreq governor:負責調頻調壓的各種策略,每種governor計算頻率的方式不同,根據提供的頻率范圍和參數(閾值等),計算合適的頻率。

userspace:用戶通過操作scaling_setspeed文件節點操作頻率及電壓的調整。

ondemand:根據CPU當前的使用率,動態調整cpu的頻率及電壓。 Sched通過調用ondemand注冊進來的回調函數來觸發負載的估算,它以一定時間間隔對系統負載進行采樣,按需調整cpu的頻率及電壓,若當前cpu的利用率超過設定的閾值,就會立即調整到最大的頻率。 調頻速度快,但是不夠精確。

conservative:類似ondemand,在調頻調節時會平滑一下,以防最大、最小頻率之間來回跳變。 調整的時候會以一定步長調整,而不是直接調整到目標值。 同時會周期的計算系統負載,用以決定調到什么頻率。

schedutil:通過將自己的調頻策略注冊到hook,在負載發生變化的時候,會調用該hook,此時就可以進行調頻決策或執行調頻動作。 前面的調頻策略都是周期采樣計算cpu負載有滯后性,精度也有限,而schedutil可以使用PELT(per entity load tracking)或者WALT(window assist load tracking)準確的計算task的負載。 如果支持fast_switch的功能,可以在中斷上下文直接進行調頻。

cpufreq driver:負責平臺相關的調頻調壓機制的實現,基于cpu subsystem driver、OPP、clock driver、regulator driver等模塊,提供對CPU頻率和電壓的控制。

cpufreq stats:負責調頻信息和各頻點運行時間等統計,提供每個cpu的cpufreq有關的統計信息。

3. 數據結構

struct cpufreq_policy:linux使用cpufreq policy來抽象cpu設備的調頻調壓功能,用于描述不同的policy,包含頻率表、cpuinfo等各種信息,并且每個policy都會對應某個具體的governor。

struct cpufreq_governor:不同policy的管理策略,根據使用場景的不同,會有不同的調頻調壓策略。

struct cpufreq_driver:用于描述cpufreq的驅動,是驅動工程師最關注的結構。

wKgaomQGsQuAIzpxAAYXbFnVRYI807.png

4. 初始化及工作流程

4.1 初始化流程

cpufreq_register_driver函數為cpufreqdriver注冊的入口,驅動程序通過調用該函數進行初始化,并傳入相關的struct cpufreq_driver,cpufreq_register_driver會調用subsys_interface_register,最終執行回調函數cpufreq_add_dev。

系統中可以同時存在多個governor,policy通過cpufreq_policy->governor指針和某個governor相關聯。要想一個governor能夠被使用,首先要把該governor注冊到cpufreq framework中。

cpufreq core定義了一個全局鏈表變量:cpufreq_governor_list,注冊函數首先根據governor的名稱,通過__find_governor()函數查找該governor是否已經被注冊過,如果沒有被注冊過,則把代表該governor的結構體添加到cpufreq_governor_list鏈表中。

wKgZomQGsQuACz41AAZH41UboPs572.png

4.2 工作流程

不同的governor的觸發調頻調壓流程不一樣,這里以scheduutil governor為例。

CFS負載變化的時候或者RT、DL任務狀態更新的時候,就會啟動調頻這幾個scheduler類會調用cpufreq_update_util函數(前面注冊進來的hook函數)觸發schedutil工作。每個cpu最終會回調到sugov_upate_shared或者sugov_upate_single函數中的一個。

由于是從scheduler里直接調用下來的,最終執行調頻切換時,無論是快速路徑觸發的簡單寫寄存器,還是慢速路徑觸發的kthread都不會占用過多時間或者調度開銷。

具體的觸發時機如下:

wKgZomQGsQuAYNmWAANxAjTsMBc757.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10829

    瀏覽量

    211193
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208952
  • 功耗
    +關注

    關注

    1

    文章

    810

    瀏覽量

    31920
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40095
  • DVFS
    +關注

    關注

    1

    文章

    17

    瀏覽量

    11992
收藏 人收藏

    評論

    相關推薦

    搞懂Linux內核鏈表

    hello 大家好,今天給大家介紹linux 內核鏈表的分析,在寫這篇文章前,筆者自己以前也只是停留在應用層面,沒有深究其中的細節,很多也是理解的不是很透徹。寫完此文后,發現對鏈表的理解更加深刻了。很多現代計算機的思想在內核里面都有體現。
    發表于 11-14 09:17 ?1058次閱讀

    搞懂CPU工作原理

    中央處理器(Central Processing Unit,簡稱CPU)是塊由超大規模的集成電路組成的運算和控制核心,主要功能是運行指令和處理數據。現在CPU般都比較小,基本上只有
    發表于 03-07 11:27 ?4890次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b><b class='flag-5'>CPU</b>工作原理

    搞懂Linux進程的睡眠和喚醒

    。通過PPID,可以追蹤進程的來源,并了解進程之間的關系。 在PCB中記錄的進程狀態,不過是些整數,這個整數是多少就代表進程此時處于什么狀態。在CPU執行進程時,通過找到進程的PCB,從而找到進程
    發表于 11-04 15:15

    關于DVFS與AVS

    請問工程師,在SmartReflex中的DVFS與AVS兩種方式的區別是什么,謝謝
    發表于 06-21 03:32

    搞懂UPS主要內容

    導讀:UPS是系統集成項目中常用到的設備,也是機房必備的設備。本文簡單介紹了UPS的種類、功能、原理,品質選擇與配置選擇方式,基礎維護等相關的內容。搞懂UPS本文主要內容:UPS種類、功能
    發表于 09-15 07:49

    搞懂開關電源波紋的產生

    參考搞懂開關電源波紋的產生、測量及抑制開關電源紋波的產生上圖是開關電源中最簡單的拓撲結構-buck降壓型電源。隨著SWITCH的開關,電感L中的電流也是在輸出電流的有效值上下波動的。所以在輸出端
    發表于 12-30 08:31

    Linux CPU的性能應該如何優化

    Linux系統中,由于成本的限制,往往會存在資源上的不足,例如 CPU、內存、網絡、IO 性能。本文,就對 Linux 進程和 CPU 的原理進行分析,總結出
    的頭像 發表于 01-18 08:52 ?3336次閱讀

    搞懂幾種常見的射頻電路類型及主要指標

    搞懂幾種常見的射頻電路類型及主要指標。
    發表于 07-27 10:26 ?9次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>幾種常見的射頻電路類型及主要指標

    嵌入式Linux開發系統開發之《節課搞懂文件IO與標準IO》

    嵌入式Linux開發系統開發之《節課搞懂文件IO與標準IO》http://www.makeru.com.cn/live/5413_2293.html?s=47236
    發表于 11-01 17:37 ?10次下載
    嵌入式<b class='flag-5'>Linux</b>開發系統開發之《<b class='flag-5'>一</b>節課<b class='flag-5'>搞懂</b>文件IO與標準IO》

    搞懂CPU、MPU、MCU、SOC的聯系與區別

    1 CPU CPU(Central Processing Unit),是臺計算機的運算核心和控制核心。CPU由運算器、控制器和寄存器及實現它們之間聯系的數據、控制及狀態的總線構成。主
    的頭像 發表于 04-05 13:45 ?4.3w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b><b class='flag-5'>CPU</b>、MPU、MCU、SOC的聯系與區別

    Linux環境編程必須搞懂的幾個概念

    Linux環境編程對于初學者來說,必須深刻理解重點概念才能更好地編寫代碼,實現業務功能,下面就幾個重要的及常用的知識點進行說明。搞懂這幾個概念后以免在將來的編碼出現混淆。
    的頭像 發表于 02-12 16:57 ?641次閱讀

    linux cpu dvfs介紹

    CPU dvfs(dynamic voltage frequency scaling)子系統負責cpu運行時,對其頻率及電壓進行調整,以求性能滿足的前提下,cpu的功耗盡可能低。
    的頭像 發表于 03-07 11:36 ?2058次閱讀

    搞懂Linux系統內核的重要性

    今天我要跟大家分享Linux內核的重要性。內核就像Linux系統運行的大心臟,對系統的運行起到了至關重要的作用。那么Linux內核到底難不難學呢?今天我就大概和大家科普
    的頭像 發表于 03-24 15:16 ?889次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b><b class='flag-5'>Linux</b>系統內核的重要性

    掌握Linux常用命令

    掌握Linux40個命令
    的頭像 發表于 04-03 11:38 ?632次閱讀

    搞懂CPU、MPU、MCU、SOC的概念與區別

    1.概念CPU(CentralProcessingUnit)CPU(CentralProcessingUnit),是臺計算機的運算核心和控制核心。CPU由運算器、控制器和寄存器及實現
    的頭像 發表于 09-30 09:51 ?1.7w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b><b class='flag-5'>CPU</b>、MPU、MCU、SOC的概念與區別