目錄
一、ARMv8-A電源管理概述
二、idle管理
2.1 電源和時鐘
Standby-待機
Retention-保持
Powerdown-關機
Dormant mode-休眠模式
Hotplug-熱插拔
三、動態電壓和頻率調節
四、匯編語言power指令
五、電源狀態協調接口
一、ARMv8-A電源管理概述
許多ARM系統是移動設備,并由電池供電。在這種系統中,優化功耗和總能量使用是關鍵的設計約束。程序員經常花費大量時間來嘗試在這些系統中節省電池壽命。ARM核心內置了許多旨在減少功耗的硬件設計方法。
即使在不使用電池的系統中,節能也可能是一個問題。例如,您可能希望最大限度地減少能源使用以減少消費者的電費、出于環保原因,或者為了最小化設備產生的熱量。
能源使用可以分為兩個組成部分:靜態功耗和動態功耗。
靜態功耗(通常稱為漏電)發生在核心邏輯或RAM塊通電時。一般來說,漏電電流與硅面積成正比,這意味著芯片越大,漏電越高。隨著制造幾何尺寸變小,漏電占功耗的比例會變得更高。
動態功耗是由于晶體管開關而產生的,是核心時鐘速度和每個周期改變狀態的晶體管數量的函數。顯然,更高的時鐘速度和更復雜的核心消耗更多功率。管理功耗感知的操作系統動態地改變核心的功耗狀態,平衡當前工作負載的可用計算容量,同時試圖使用最少的功耗。其中一些技術動態地開啟和關閉核心,或者將它們置于靜態狀態,不再執行計算。這意味著它們消耗的功耗很少。
【注意】:這里描述的功耗管理類型不是源自體系結構。這里描述的方法是軟件功耗管理的常見實踐示例。
二、idle管理
空閑管理通常由操作系統控制。在這種情況下,當一個核心處于空閑狀態時,操作系統功耗管理(OSPM)將其置于低功耗狀態。通常情況下,可供選擇的狀態有所不同,具有不同的進入和退出延遲,以及與每個狀態相關聯的不同功耗級別。通常使用的狀態取決于核心再次需要的速度。在任何時候可以使用的功耗狀態也可能取決于SoC中其他組件的活動,除了核心。每個狀態都由進入該狀態時時鐘門控或電源門控的組件集合定義。
從低功耗狀態轉換到運行狀態所需的時間,稱為喚醒延遲,在較深的狀態中較長。盡管空閑功耗管理受核心上線程行為的驅動,但OSPM可以將平臺置于影響核心之外許多其他組件的狀態。如果集群中的最后一個核心變為空閑狀態,OSPM可以針對影響整個集群的功耗狀態。同樣,如果SoC中的最后一個核心變為空閑狀態,OSPM可以針對影響整個SoC的功耗狀態。選擇也受到系統中其他組件的使用的影響。一個典型的例子是當所有核心和任何其他總線masters都處于空閑狀態時,將內存置于自刷新狀態。
OSPM必須提供必要的功耗管理軟件基礎設施來確定正確的狀態選擇。在空閑管理中,當一個核心或集群被置于低功耗狀態時,它可以通過核心喚醒事件隨時重新激活。也就是說,可以從低功耗狀態喚醒核心的事件,例如中斷。OSPM不需要明確的命令來將核心或集群重新置于操作狀態。即使它們當前處于低功耗狀態,OSPM也認為受影響的核心始終可用。
2.1 電源和時鐘
可以減少能源使用的一種方法是移除電源,這樣可以消除動態和靜態電流(有時稱為電源門控),或者停止核心的時鐘,只消除動態功耗,可以稱為時鐘門控。ARM核心通常支持幾個級別的功耗管理,如下所示:
- Standby-待機。
- Retention-保持。
- Powerdown-關機。
- Dormant mode-休眠模式。
- Hotplug-熱插拔。
對于某些操作,需要在移除電源之前和之后保存和恢復狀態。保存和恢復所需的時間,以及由此額外工作消耗的功耗,都可以成為軟件選擇適當的功耗管理活動的重要因素。
包含核心的SoC設備可以具有額外命名的低功耗狀態,例如STOP和深度睡眠。這些指的是硬件鎖相環(PLL)和電壓調節器可以由功耗管理軟件控制的能力。
Standby-待機
在待機模式下,核心保持通電,但大部分時鐘被停止或者時鐘門控。這意味著核心的幾乎所有部分都處于靜態狀態,唯一的功耗是由于漏電電流和用于監視喚醒條件的少量邏輯的時鐘。
進入此模式使用的是WFI(等待中斷)或WFE(等待事件)指令。ARM建議在執行WFI或WFE之前使用數據同步障礙(DSB)指令,以確保掛起的內存事務在更改狀態之前完成。
如果調試通道處于活動狀態,則保持活動狀態。核心停止執行直到檢測到喚醒事件。喚醒條件取決于進入指令。對于WFI,中斷或外部調試請求會喚醒核心。對于WFE,存在幾種指定的事件,包括集群中的另一個核心執行SEV指令。
Snoop Control Unit(SCU)的請求也可以喚醒集群中用于緩存一致性操作的時鐘。這意味著處于待機狀態的核心的緩存與其他核心的緩存保持一致(但是待機狀態的核心不一定會執行下一條指令)。核心復位始終會強制核心退出待機狀態。
各種形式的動態時鐘門控也可以在硬件中實現。例如,當檢測到空閑狀態時,SCU、GIC、定時器、指令流水線或NEON塊可以自動時鐘門控,以節省功耗。
待機模式可以快速進入和退出(通常在兩個時鐘周期內)。因此,它對核心的延遲和響應性幾乎沒有影響。
對于OSPM來說,待機狀態在大多數情況下與retention狀態幾乎沒有區別。但是對于外部調試器和硬件實現來說有所不同,但對于操作系統的空閑管理子系統來說則不明顯。
Retention-保持
核心狀態,包括調試設置,在低功耗結構中得到保留,使得核心至少可以部分關閉。從低功耗retention狀態切換到運行狀態不需要對核心進行復位。在從低功耗retention狀態切換到運行操作時,保存的核心狀態將被恢復。從操作系統的角度來看,除了進入方式、延遲和使用相關的約束外,retention狀態和待機狀態之間沒有區別。然而,從外部調試器的角度來看,這兩種狀態有所不同,因為retention狀態下,外部調試請求的調試事件仍然掛起,核心電源域中的調試寄存器無法訪問。
Powerdown-關機
在這種狀態下,正如其名稱所示,核心已關閉電源。設備上的軟件必須保存所有核心狀態,以便在斷電期間進行保留。從關機狀態切換到運行操作必須包括:
- 在恢復電源后,對核心進行復位。
- 恢復保存的核心狀態。
關機狀態的定義特征是它們會破壞上下文。這意味著所有數據、操作條件和操作狀態都會丟失。這會影響在給定狀態下關閉的所有組件,包括核心,以及在更深的狀態下系統中的其他組件,如GIC或特定于平臺的IP。根據調試和跟蹤電源域的組織方式,調試和跟蹤上下文中的一個或兩個可能會在某些關機狀態下丟失。必須提供機制,使操作系統能夠針對每個給定狀態執行相關的上下文保存和恢復。執行恢復從復位向量開始,之后每個操作系統必須恢復其上下文。
Dormant mode-休眠模式
休眠模式是關機狀態的一種實現。在休眠模式下,核心邏輯關閉電源,但cache RAMs保持通電。通常,RAM被保持在低功耗retention狀態,即它們保持其內容但沒有其他功能。這比完全關閉提供了更快的重新啟動速度,因為活動數據和代碼保留在緩存中。同樣,在cluster中,可以將單個核心置于休眠模式。
在允許單個核心進入休眠模式的cluster中,當核心斷電時沒有保持一致性的空間。因此,這些核心必須首先從一致性域中隔離出來。它們在執行此操作之前清除所有臟數據,并且通常是通過另一個核心發出信號,以通知外部邏輯重新應用電源來喚醒它們。
然后,喚醒的核心必須在重新加入一致性域之前恢復原始核心狀態。由于核心在休眠模式下時內存狀態可能已更改,因此可能仍然需要使緩存失效。因此,休眠模式更可能在單個核心環境中有用,而不是在cluster中。這是因為離開和重新加入一致性域的額外成本。在集群中,休眠模式通常只有在其他核心已經關閉時,最后一個核心才會使用。
Hotplug-熱插拔
熱插拔是一種動態開關核心的技術。OSPM可以利用熱插拔根據當前計算需求來改變可用的計算容量。有時,熱插拔也用于可靠性方面的考慮。
熱插拔和將核心置于關機狀態以節能的使用之間存在幾個不同之處:
- 當一個核心被熱拔插時,監督軟件會停止所有對該核心的中斷和線程處理。該核心不再被調用的操作系統視為可用。
- OSPM必須發出一個明確的命令將一個核心重新上線,即熱插拔一個核心。適當的監督軟件只有在此命令之后才開始對該核心進行調度或啟用中斷。
操作系統通常會在一個主核上執行大部分內核引導過程,并在稍后的階段將從核bringing up。Secondary boot的行為類似于將一個核心熱插入系統中。這兩種情況下的操作幾乎是相同的。
三、動態電壓和頻率調節
許多系統在其工作負載可變的條件下運行。因此,能夠降低或提高核心性能以匹配預期的核心工作負載是很有用的。降低核心的時鐘頻率可以減少動態功耗。動態電壓頻率調節(DVFS)是一種利用以下特性的節能技術:
- 功耗與操作頻率之間的線性關系。
- 功耗與操作電壓之間的二次方關系。該關系可表示為: P = C × V^2 × f
其中:
P 是動態功耗。
C 是相關邏輯電路的開關電容。
V 是操作電壓。
f 是操作頻率。
通過調整核心時鐘的頻率來實現節能。
在較低的頻率下,核心還可以以較低的電壓運行。降低供電電壓的優點是既降低了動態功耗,也降低了靜態功耗。
對于給定電路,操作電壓和電路可以安全運行的頻率范圍之間存在著具體的實現關系。操作頻率和相應的操作電壓組合成一個元組,稱為操作性能點(Operating Performance Point,OPP)。對于給定系統,可達到的OPP范圍總稱為系統DVFS曲線。
操作系統使用DVFS來節省能量,并在必要時保持在熱限制內。操作系統提供DVFS策略來管理所消耗的電力和所需的性能。針對高性能的策略選擇更高的頻率并使用更多的能量。而針對節能的策略選擇較低的頻率,因此使性能較低。
四、匯編語言power指令
ARM匯編語言包括可用于將核心置于低功耗狀態的指令。架構將這些指令定義為提示(hints),這意味著核心在執行它們時不需要采取任何特定的操作。然而,在Cortex-A處理器系列中,這些指令是以一種方式實現的,即關閉了幾乎所有核心部件的時鐘。這意味著核心的功耗被降低,以至于只有靜態漏電電流,而沒有動態功耗。使用WFI指令可以將執行暫停,直到核心被以下條件之一喚醒:
- IRQ中斷,即使PSTATE I位被設置。
- FIQ中斷,即使PSTATE F位被設置。
- 異步abort。
如果核心在相應的PSTATE中斷標志被禁用時被中斷喚醒,則核心在WFI之后執行下一條指令。
WFI指令在電池供電的系統中被廣泛使用。例如,移動電話可以將核心置于待機模式,而在等待按下按鈕時可能會多次進行這樣的操作。
WFE與WFI類似。它暫停執行直到發生事件。這可以是列出的事件條件之一,也可以是cluster中另一個核心發出的事件。其他核心可以通過執行SEV指令來發出事件。SEV向所有核心發出事件信號。通用定時器也可以編程觸發周期性事件,從而喚醒核心離開WFE。
五、電源狀態協調接口
電源狀態協調接口(PSCI)提供了一種與操作系統無關的方法,用于實現核心的啟動或關閉的功耗管理用例。這包括:
- 核心空閑管理。
- 動態添加和移除核心(熱插拔),以及從核引導。
- big.LITTLE 遷移。
- 系統shutdown和reset。
通過這個接口發送的消息被所有相關執行級別接收。也就是說,如果EL2和EL3被實現,操作系統在虛擬機中執行的消息必須被一個hypervisor接收。如果hypervisor發送它,消息必須被安全固件接收,然后與一個可信操作系統進行協調。這使得每個操作系統可以確定是否需要進行上下文保存。