CPU空閒冷卻¶
情況:¶
在某些情況下,SoC可能會達到臨界溫度限制,並且無法將溫度穩定在溫度控制附近。當SoC必須穩定溫度時,核心可以對冷卻裝置採取措施以減輕功耗。當達到臨界溫度時,必須做出降低溫度的決定,這反過來會影響效能。
另一種情況是,即使透過時鐘門控元件將動態洩漏降低到最低限度後,矽溫度仍繼續升高。 由於靜態洩漏,這種失控現象可能會繼續發生。 唯一的解決方案是關閉元件電源,從而降低動態和靜態洩漏,從而使元件冷卻下來。
最後但並非最不重要的一點是,系統可以要求特定的功率預算,但是由於OPP密度,我們只能選擇功率預算低於所請求功率預算的OPP,並且未充分利用CPU,從而損失了效能。 換句話說,一個OPP以低於請求的功率預算的功率來欠利用CPU,而下一個OPP超過了功率預算。 如果存在中間OPP,則可以使用它。
解決方案:¶
如果我們可以在受控時間內消除特定持續時間的靜態和動態洩漏,則SoC溫度將降低。 透過作用於空閒狀態持續時間或空閒週期注入週期,我們可以透過調節功率預算來減輕溫度。
工作效能點(OPP)密度對cpufreq的控制精度有很大影響,但是不同的供應商具有大量的OPP密度,並且某些OPP之間的功率差距很大,這會導致熱控制期間的效能損失和其他情況下的功率損失。
在特定的OPP上,我們可以假設在屬於同一群集的所有CPU上注入空閒週期,其持續時間大於群集空閒狀態目標駐留時間,從而導致在此期間內靜態和動態洩漏下降(模輸入此狀態所需的能量)。 因此,具有空閒週期的可持續功率與OPP的可持續功率具有線性關係,並且可以使用類似於以下的係數進行計算
Power(IdleCycle) = Coef x Power(OPP)
空閒注入:¶
空閒注入的基本概念是強制CPU在每個控制週期中進入指定的空閒狀態,除了cpufreq之外,它還提供了另一種控制CPU功率和熱量的方法。 理想情況下,如果屬於同一群集的所有CPU同步注入其空閒週期,則該群集可以達到其斷電狀態,從而最大程度地降低功耗,並將靜態洩漏降低到幾乎為零。 但是,這些空閒週期注入會增加額外的延遲,因為CPU必須從深度睡眠狀態喚醒。
我們使用固定的空閒注入持續時間,該持續時間可帶來可接受的效能損失和固定的延遲。 可以透過調節空閒注入的佔空比來增加或減少緩解措施。
^
|
|
|------- -------
|_______|_______________________|_______|___________
<------>
idle <---------------------->
running
<----------------------------->
duty cycle 25%
冷卻裝置的實現基於佔空比百分比的狀態數。 當沒有進行緩解時,冷卻裝置的狀態為零,這意味著佔空比為0%。
當緩解開始時,根據調速器的策略,選擇一個起始狀態。 透過固定的空閒持續時間和佔空比(也稱為冷卻裝置狀態),可以計算執行持續時間。
調速器將更改冷卻裝置的狀態,因此佔空比也會隨之變化,並且這種變化會調節冷卻效果。
^
|
|
|------- -------
|_______|_______________|_______|___________
<------>
idle <-------------->
running
<--------------------->
duty cycle 33%
^
|
|
|------- -------
|_______|_______|_______|___________
<------>
idle <------>
running
<------------->
duty cycle 50%
空閒注入持續時間值必須符合以下約束
它小於或等於緩解開始時我們容忍的延遲。 它與平臺有關,並且將取決於我們想要的使用者體驗,反應性與效能之間的權衡。 應指定此值。
它大於我們想要進行熱緩解的空閒狀態的目標駐留時間,否則最終會消耗更多的能量。
功率注意事項¶
當我們達到熱跳閘點時,我們必須在特定溫度下維持特定的功率,但此時我們消耗
Power = Capacitance x Voltage^2 x Frequency x Utilisation
...這超過了可持續功率(或者系統設定中存在問題)。 “電容”和“利用率”是一個固定值,“電壓”和“頻率”是人為固定的,因為我們不想更改OPP。 我們可以將“電容”和“利用率”分組為一個術語,即“動態功率係數(Cdyn)”簡化上述公式,我們有
Pdyn = Cdyn x Voltage^2 x Frequency
功率分配器調速器將以某種方式要求我們降低功率,以便以裝置樹中定義的可持續功率為目標。 因此,透過空閒注入機制,我們希望平均功率(Ptarget)導致在特定OPP上以全功率執行一定的時間,而在另一段時間內空閒。 可以將其放入方程式
P(opp)target = ((Trunning x (P(opp)running) + (Tidle x P(opp)idle)) /
(Trunning + Tidle)
...
Tidle = Trunning x ((P(opp)running / P(opp)target) - 1)
在這一點上,如果我們知道CPU的執行時間,那麼就可以得到所需的空閒注入。 或者,如果我們有空閒注入持續時間,則可以使用以下公式計算執行持續時間
Trunning = Tidle / ((P(opp)running / P(opp)target) - 1)
實際上,如果執行功率小於目標功率,最終我們將獲得負時間值,因此顯然方程式的使用僅限於降低功率,因此需要更高的OPP才能使執行功率大於目標功率。
但是,在此演示中,我們忽略了三個方面
此處未定義靜態洩漏,我們可以在等式中引入它,但假設大多數情況下它將為零,因為很難從SoC供應商那裡獲得值
未考慮空閒狀態喚醒延遲(或進入+退出延遲),必須將其新增到方程式中才能嚴格計算空閒注入
注入的空閒持續時間必須大於空閒狀態目標駐留時間,否則最終會消耗更多的能量,並可能反轉緩解效果
因此,最終方程式為
Trunning = (Tidle - Twakeup ) x
(((P(opp)dyn + P(opp)static ) - P(opp)target) / P(opp)target )