2015-06-02 68 views
1

只要CPU空閒,它就會執行cpu_idle_loop。 我很好奇,知道這個循環的優點,當與暫停[x86]或wfe/wfi指令相比時,cpu_idle_loop vs halt/wfe/sevl指令

是否有任何功耗優勢?

+0

可能相關[Linux和喚醒空閒CPU與新任務](http://stackoverflow.com/questions/15058781/how-does-linux-kernel-wake-idle-processor-up-when-new-task-創建)和[Exynos電源控制](http://stackoverflow.com/questions/16003215/can-someone-explain-the-power-control-register-in-exynos-arm);至少有關該主題的更多信息。 –

回答

1

wfe/wfi只是指令,它可以使內核進入低功耗模式,但不會影響進入內核的時鐘等。如果內核在此時獲得功耗,泄漏將仍然存在,在電池供電設備很重要。

在像cpu_idle_loop功能,可以控制更多的權力爲核心,因爲你知道什麼樣的影響,也可以沖洗緩存,減少他們等使用的電源也可以完全切斷電源核心消除或減少泄漏盡可能最小化。在多核系統中,最後一個核心處於空閒狀態可以將平臺/主板降低到更高的功耗保持狀態。

wfe/wfi有利於避免核心在等待時浪費電力,這也有利於熱量不散發。必須實現互斥體/信號量,但SOC最近由許多元素組成,並且內核可以在不需要大部分時間的情況下通知硬件,而不是僅僅有效地使單個內核空閒。

+0

也許值得注意的是,如果缺少一個具有特定系統特有的聰明性的cpuidle驅動程序,默認實現最終會調用'cpu_do_idle',它在支持它的處理器上(例如'cpu_v7_do_idle')_is_基本上只是一個'wfi'。 – Notlikethat

1

除了其他用戶指出的功率優勢之外,我想指出使用WFI的另一個不太重要的優勢。考慮一下當我們的內核作爲另一個主機操作系統的虛擬機運行時的情況。主機操作系統會將WFI指令標記爲陷阱。當來賓操作系統執行WFI指令時,控制會立即轉移(陷入)到主機操作系統。這允許主機有效地安排其他操作系統在其準備好的隊列中。如果客戶操作系統正在使用繁忙的空閒循環(而不是WFI),則分配給來賓操作系統的時間片必須在主機操作系統可以在另一個來賓操作系統中調度之前過期,這會導致浪費的CPU週期。

+0

你好Arun,它的超級頭盔誰將WFI指示標記爲陷阱,對不對?此外,我想知道WFI指令是否從客戶操作系統執行,並將控制權轉移到EL2中運行的Hyper-visor,但是會再次控制返回給發出WFI的同一個客戶操作系統? –

+1

是的虛擬機管理程序會配置wfi/wfe來被困住。執行wfi的os被添加到等待隊列中。控制器調度程序的作用在於控制回到操作系統。如果操作系統再次準備就緒(由於中斷或事件),則低調度程序會啓動並切換到下一個要執行的操作系統。 (非常類似於os調度程序) –