Linux : CPU Idle【轉】


轉自:https://blog.csdn.net/hongzg1982/article/details/54881417

CPU Idle狀態可以分為很多種Idle狀態,在CPU准備進入idle的時候在很多狀態中進行選擇以達到省電的目的。

CPU Idle相關的軟件架構可以分以下幾種:
CPUIDLE core:CPUIdle的內核驅動,在kernel\drivers\cpuidle目錄下。
CPUIDLE sysfs:這部分向用戶層提供CPUIDLE的相關節點,以提供信息給用戶。
在/sys/devices/system/cpu/cpuidle下可以查到當前的CPUIdle的驅動的名字和governor的種類。
在/sys/devices/system/cpu/cpu0/cpuidle下可以看到幾種CPUIDLE狀態,在相應的目錄下有lantency,名字等信息。

CPUIdle govenor:根據latency,residency等,根據某種算法選擇一個合適的CPUIDLE狀態。
比如cpuidle governor里邊的menu algorithm會根據之前的idle time的統計結果來預測接下來的idle time,並從中選擇合適的idle state。

CPUIdle狀態
以S5PC210為例,它有以下幾種CPUIdle狀態

NORMAL : IDLE (Wait For Interrupt)
AFTR : ARM Off and TOP Running
LPA : Low Power Audio
DEEP-STOP
SLEEP
每種狀態關閉的模塊以及latency,power saving也是各有不同。

 

 

 

進入CPUIdle,選擇CPUIdle state的過程

 

 

 

 

 


Governor
以下以menu governor為例說明
在眾多Idle state中選擇合適的idle state必須要考慮

Energy break event point
Performance impact
Latency tolerance(from pmqos infrastructure) ?
Energy break event point
1.target_residency

進入每個IDLE mode的時候,都是會產生energy cost
所以在”target_residency”里寫入進入每個IDLE state所需的energy cost。
governor->select()選擇合適的idle state所要滿足的條件為
target_residency > predicted idle duration的時候,governor->select()不會選擇這個IDLE State!!這里predicted idle duration表示預測的下一個idle state可以持續的時間
2.correction_factor[]
為了提交預測下一個idle state所停留的時間而導入的內容

Performance Impact
exit_latency
각 IDLE state(C state)는 종료될 때 요구되는 exit_latency 가 존재하며, exit_latency는 Performace impact로 작용 됨
“exit_latency“ 필드에 각 IDLE state의 예상 종료시 요구되는 latency를 명시 함
개발자에 의해서 정의되며, C0에서 C7으로 갈 수록 latency는 점점 커짐
struct cpuidle_state {
unsigned int exit_latency; /* in US */
int power_usage; /* in mW */
unsigned int target_residency; /* in US */
bool disabled; /* disabled on all CPUs */

}
————————————————
版權聲明:本文為CSDN博主「honghong96」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hongzg1982/article/details/54881417


免責聲明!

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



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