在計算機系統中,CPU的功能就是不斷地取指、譯碼、執行,那如果CPU沒有程序要執行,CPU不需要執行計算任務,也不需要響應外部中斷事件,CPU要怎么辦?在Linux kernel中,這種CPU的無所事事的狀態,被稱作idle狀態,而cpuidle framework,就是為了管理這種狀態。
CPU在idle的時候可以利用一些芯片技術比如clock gating、retention,讓core進入睡眠省電模式,省電是又電子設備繞不開的話題。
idle進程的存在,是為了解決“何時idle”的問題。
在init進程(系統的第一個進程)完成初始化任務之后,將其轉變為idle進程,由于該進程的優先級是最低的,所以當idle進程被調度到時,則說明系統的其它進程不再運行了,也即CPU idle了。最終,由idle進程調用idle指令(這里為WFI),讓CPU進入idle狀態。
WFI/WFE用于解決“怎么idle”的問題。
一般情況下,ARM CPU idle時,可以使用WFI指令,把CPU置為Wait for interrupt狀態。該狀態下,至少會把ARM core的clock關閉,以節省功耗(和具體ARM core的實現有關,可參考“ARM WFI和WFE指令”)。
在SMP系統中,CPU啟動的過程是:
1)先啟動主CPU,啟動過程和傳統的單核系統類似:stext-->start_kernel-->rest_init-->cpu_startup_entry
2)啟動其它CPU,可以有多種方式,例如CPU hotplug等,啟動過程為:secondary_startup-->__secondary_switched-->secondary_start_kernel-->cpu_startup_entry
上面的代碼位于./arch/arm64/kernel/head.S、init/main.c等等,感興趣的讀者可以自行參考。最終都會殊途同歸,運行至cpu_startup_entry接口,該接口位于kernel/sched/idle.c中,負責處理CPU idle的事情。
cpuide framework的意義是什么?
ARM CPU的設計越來越復雜,對省電的要求也越來越苛刻,因而很多CPU會從“退出時的延遲”和“idle狀態下的功耗”兩個方面考慮,設計多種idle級別。對延遲較敏感的場合,可以使用低延遲、高功耗的idle;對延遲不敏感的場合,可以使用高延遲、低功耗的idle。
而軟件則需要根據應用場景,在恰當的時候,選擇一個合適的idle狀態。而選擇的策略是什么,就不是那么簡單了。這就是cpuidle framework的存在意義。
位于kernel\sched\idle.c中,負責實現idle線程的通用入口(cpuidle entry)邏輯,包括idle模式的選擇、idle的進入等等。
cpuidle core的代碼主要包括:cpuidle.c、driver.c、governor.c、sysfs.c。
cpuidle core負責實現cpuidle framework的整體框架,主要功能包括:
前面講過,很多CPU提供了多種idle級別,這些idle級別的主要區別是“idle時的功耗”和“退出時延遲”。cpuidle driver(機制)負責定義這些idle狀態(每一個狀態的功耗和延遲分別是多少),并實現進入和退出相關的操作。最終,cpuidle driver會把這些信息告訴governor,由governor根據具體的應用場景,決定要選用哪種idle狀態(策略)。
kernel中,cpuidle governor都位于governors/目錄下。
負責idle機制的實現,即:如何進入idle狀態,什么條件下會退出,等等。
不同的architecture、不同的CPU core,會有不同的cpuidle driver,平臺驅動的開發者,可以在cpuidle core提供的框架之下,開發自己的cpuidle driver。代碼主要包括:cpuidle-xxx.c。
概述
http://www.wowotech.net/pm_subsystem/cpuidle_overview.html
core層
http://www.wowotech.net/pm_subsystem/cpuidle_core.html
governor層
http://www.wowotech.net/pm_subsystem/cpuidle_menu_governor.html
driver層
http://www.wowotech.net/pm_subsystem/cpuidle_arm64.html
cpuidle的宏配置比較簡單,框架層和sysfs都默認編譯了,只需要配置對應的驅動宏。
#ls /sys/devices/system/cpu/cpuidle/cpuX/cpuidle/stateY name,名稱; desc,較為詳細的描述; disable,cpuidle使能狀態的讀取和設置; latency,退出該state所需的時間,單位為us; power,該state下的功耗,單位為mW; time,停留在改狀態的總時間,單位為us usage,進入該狀態的次數。
# 進出次數cat /sys/devices/system/cpu/cpu<x>/cpuidle/state<y>/usage# 總時間cat /sys/devices/system/cpu/cpu<x>/cpuidle/state<y>/time
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
e3300cpu參數是幾代?差不多9代了,9代的實際性能可以強一點甚至,不如10代I3強。不過e3前三代確實是神U,很多年后被超越,但并沒有被徹底淘汰。英特爾賽揚E3300是英特爾賽揚系列的CPU。采用LGA775接口,主頻達到2.5G,1M二級緩存,外頻200MHz,倍頻12.5X支持MMX、SSE、SSE2、SSE3、SSE3多媒體指令集,擁有EM64T 64位運算指令集,EIST節能技術,...
如何用office publisher編輯小冊子?Office publisher可用于制作小冊子或其他原創出版物。Publisher內置了許多模板,使得制作手冊更容易。首先,啟動軟件,打開宣傳冊模板,或在線下載適當的模板。在頁面中打開模板后,您將看到占位符的文本和圖像,第一個頁面包含占位符的業務信息,您將立即更新這些信息。把這些信息改成你需要的,把圖片改成適合你需要的。你可以保存指紋。Publi...
psctrl z只能后退一步?是的在ps中快捷鍵ctrl z只能后退一步。還有一個組合快捷鍵ctrl alt z,可以多步后退。一次按一步,可以后退的最大步數相當于當前保存在歷史面板中的步數。但是在實際操作中,我們經常會發現這組快捷鍵是無效的。這是因為等其他應用占用了這組快捷鍵。要么關閉,要么重置快捷鍵,要么放棄這套快捷鍵,使用ps的歷史功能。pscc2017怎么后退一步?如果使用套索工具,請按d...