回顧昔日PCI介面的時代,存在一份「PCI Bus Power Management Interface Specification Revision 1.1」的規格,簡稱為「PCI-PM」。此外,也有一份耳熟能詳的「Advanced Configuration and Power Interface Specification, Revision 2.0」,簡稱ACPI,而裝置的電源管理狀態就是D0-D3。
回顧昔日PCI介面的時代,存在一份「PCI Bus Power Management Interface Specification Revision 1.1」的規格,簡稱為「PCI-PM」。此外,也有一份耳熟能詳的「Advanced Configuration and Power Interface Specification, Revision 2.0」,簡稱ACPI,而裝置的電源管理狀態就是D0-D3。
而3GIO的電源管理全名為「PCI Express power management」,簡稱為「PCI Express-PM」。「PCI Express-PM」與上面兩者完全相容,這些電源管理的極致化目標,自然就是做好節約省電的控制,並在理想狀況下,不使用時就進入睡眠或中止模式,一旦要回復過來,當然也必須透過喚醒(Wake)的歷程。
3GIO定義了L0、L0s、L1、L2、以及 L3等連結狀態,自然就是電源管理的具體實踐方式。而所謂地「PME-power management event 訊息」,就是喚醒的運用之道。
3GIO之中,另闢有一種稱之為「ASPM - Active State Power Management」的特殊機制,即使裝置處於D0的情況之下,也可以進一步達成省電之道。這點務必要掌握,畢竟是新介面所導入的嶄新特性。
不同於PCI-PM規範是定義介面上的電源管理狀態,3GIO卻是定義了連結電源管理狀態圖1。不難想像,這些連結電源管理狀態,傳統的PCI-PM軟體自然是看不見的。這些連結電源管理狀態的各個含意分別是:
若仔細研讀規格,將可發現有一個觀念凸顯出3GIO電源管理的特徵,就是除了L2/L3 Ready狀態轉進L2、L3之外,連結電源管理的轉換皆會經過L0狀態。我們將系統進入睡眠模式的歷程步驟描述一次之後,就可以理解這個觀念。
如果以流程演算式來觀看,則有下面之流程:
「L0 --> L1 --> L0 --> L2/L3 Ready」
誠如之前所言,3GIO支援所有PCI-PM之裝置電源管理狀態。而眾多裝置必須支援D0與D3狀態,D3狀態又可以細分成D3hot與D3cold狀態,D1與D2的支援乃是選項(Option)。這些D狀態就是大家耳熟能詳的「Device Power Management States」。
「PCI Bus Power Management Interface Specification」該份規格,對於PCI-PM的底細有清楚的記載。官方網站上,應該可以尋得。
下面是3GIO與D狀態之間的互動關係:
D3cold與D3hot狀態的區別認知也是很重要的一環,因為當電源被徹底移除之後,就是進入D3cold狀態,必須再度歷經電源開啟次序的流程,然後才會進入D0uninitialized狀態。在這個時間點上,軟體必須實踐完整的初始化歷程,復原到D0active狀態。如果裝置支援D3cold接受喚醒的機能,就必須維護「Power Management Status/Control register」中的PME內文,作為PME服務常式回復之用。
D3hot狀態必須反應組態的存取,比如PME_Turn_Off/PME_TO_Ack的協定。可以藉由移除電源,進入D3cold狀態,也可使用軟體的設定,進入D0unini-tialized狀態。因此,連結的電源管理狀態,是依據下游端裝置的D狀態來決定的。圖7範例說明了當下游端裝置進入功率節約狀態,比如說D1、D2或D3hot狀態時,連結是歷經怎樣的過程來轉進L1狀態的。而L1狀態的離開跳進L0狀態圖8,則可以由任意一方來開動。
還有一個重要的議題,那就是PME機制之實踐。PME三個英文字代表著「Power Management Events」。3GIO中的PME機制自然與PCI-PM規格中所定義的PME機制相容。無妨如此來說,PME機制是3GIO裝置,用來請求PM狀態更易所採用的手段,大多是在節約狀態下,用來甦醒系統。
連結喚醒機制的主要精神,是提供一種辦法讓平台間重新建立電源與時脈。依據規格上的規範,有兩類的喚醒(wakeup)機制被定義著。其一為標示 (Beacon)信號機制圖9;其二乃是WAKE#信號機制圖10。所謂的標示(Beacon)機制是利用頻帶內(In-band)信號的傳遞方式。而 WAKE#機制卻是採用旁頻帶(Side-band)的信號,也就是借用實質上存在的實體介面信號。
使用喚醒之前機制,裝置皆必須靠軟體去設定PMCSR暫存器(Power Management Control/Status register)中的PME_En位元。圖11中的Case 1,WAKE#信號直接連到電源管理控制器,現象比較單純。但是,圖11中的Case 2,WAKE#信號是接續到開關裝置,就必須多出一道手續,將WAKE#信號轉換成標示(Beacon)信號。
PM_PME Messages是隸屬於一種「posted」的TLP封包,用來告知電源管理軟體,在整個連接型態中的哪一個部位,要求PM狀態的改變。PM_PME Messages如同其他系統電源管理訊息一般,透過泛用型的TC #0,PM_PME Messages也都是引導至Root Complex的方向。若以狀態控制流程圖圖12來體驗PM_PME的遞送,是比較容易理解的。
通常所說「Native PCI Express Power Management Mechanisms」乃是3GIO獨特採用的電源管理方式,依據邏輯來推斷,當然需要嶄新的軟體來支援撐腰,才能發生效用。另外,所有的3GIO裝置,都必須支援ASPM(Active State Power Management)的起碼要求。當裝置處於D0的狀態,也就是完全移動的狀態,其上游端的連結,也是處於L0的狀態,而ASPM(Active State Power Management)圖13的基本精神所在之一,就是讓D0狀態的裝置,可以有辦法來降低連結的功率耗費。
ASPM定義有兩種待命連結狀態。L0s狀態圖14是時間切換、等待最為快速的策略,所有的3GIO皆必須該L0s連結狀態。另外的L1狀態圖15則是高效率、省電的模式,等待時間還不錯。然,L1的支援與否,對於ASPM來說,卻是列為選項。
依據規定,3GIO裝置有責任義務,必須報告從L0s或L1切換至L0所需的時間,專用術語就以「exit latency」來稱呼。而當系統跑在舊版的作業系統時,也是可以透過BIOS程式碼來開啟或關閉ASPM的功能。
L1狀態在ASPM下是一個選項,提供更為節約的方式,付出的代價就是時間較長的「Exit Latency」。對於軟體來說,這個時間是可以取得的參數。因為只要透過「Link Capabilities」暫存器就可以做到。至於,所用策略何時進入ASPM的L1狀態,由使用者自行規劃。
針對L1狀態在ASPM,特別提供了三個電源管理的訊息。
ASPM之L1狀態的協商法則,用圖16、圖17來一窺內部流程的端詳。至於L1狀態的逃離就顯得簡單許多,沒有什麼協商談判流程。一個開關裝置當下游端開始L1狀態離開切換時,上游端連結的轉換不得超過1μs。以圖18為範例,有三個連結,端點C在時間點T轉進L0狀態,則連結3需要在T+32的時間點進入L0狀態。因為,端點C的耗掉時間為T+8,開關裝置B則須T+32。以此類推,最終連結1的完成時間為T+34,也就是說,總共有「34μs」的遲延時間。
每一個3GIO元件對於ASPM的支援與否,必須在ASPM Support組態的欄位裡頭的位元設定,報告透露支援的程度概況。L0s狀態是絕對必要,但是在D0active狀態下,對於L1狀態的支援與否,卻是選項。「ASPM Support」組態的欄位裡頭的位元設定:
前面不斷提及L0s狀態與L1狀態的「Exit Latency」,也就是轉進L0狀態所需的潛伏等待時間,每一個3GIO元件裝置的連接埠(port)有責任義務要告知這個數值。設定的所在處就在於「L0s Exit Latency」與「L1 Exit Latency」組態的欄位三個位元裡。「L0s Exit Latency」的位元編碼涵義如下:
如果有支援L1狀態,「L1 Exit Latency」的位元編碼涵義如下:
基本上,這兩個欄位的存在,一點都不難理解,因為為了更謹慎的措施,端點也有兩個與之相為呼應的欄位,分別是「Endpoint L0s Acceptable Latency」以及「Endpoint L1 Acceptable Latency」,置放在「Link Capabilities」暫存器中。電源管理軟體針對各個元件對於ASPM的致能,實乃透過「ASPM Control」的欄位來處置:
當ASPM Control = 00,意義相當清楚,連接埠不可以將連結帶入L0s狀態。也就是說,連結下游端之連接埠不能送出PM_Active_State_Request_L1的 DLLP封包到上游端的連結。
當ASPM Control = 01,其條件迎合之下,連接埠將連結帶入L0s狀態。連結下游端之連接埠,也不行送出PM_Active_ State_Request_L1的DLLP封包到上游端的連結。
而當ASPM Control=10,連接埠的傳送器(Tx)就不能進入L0s狀態,而連結下游端之連接埠,可以送出PM_Active_ State_Request_L1的 DLLP封包到上游端的連結。
當ASPM Control=11,其條件迎合之下,連接埠將連結帶入L0s狀態。連結下游端之連接埠,可以送出 PM_Active_State_Request_L1的 DLLP封包到上游端的連結。但是,還必須釐清一兩個其他欄位的功用,那就是每一個3GIO元件裝置如何來告知參考時脈的來源。「Slot Clock Configuration」欄位,該位元其實就坐落於PCI Express Capability構造「連結狀態」的暫存器裡頭。此位元表示元件裝置使用平台在連接器上所提供的參考時脈;另一個「Common Clock Configuration」欄位表示連結雙端是否使用共通的時脈來源,此欄位也是坐落於PCI Express Capability構造「連結狀態」的暫存器裡頭。於是,我門可以啟動ASPM的軟體流程演算,逐步分別敘述。
輔助電源通常是用來支援標示(Beacon)喚醒的機制,PCI-PM規格指出一個裝置必須支援PME,為了耗費所能夠允許的最高輔助電流。然而,PCI Express PM在Device Control暫存器中追加了一個嶄新的控制位元「Aux Power PM Enable」,提供另一種方式,耗費所能夠允許的最高輔助電流,但是不用去顧慮PME產生之位階。3GIO請求輔助電源是在「PMC - Power Management Capabilities」暫存器中的「Aux_Current」欄位中所指定非零的數值。傳統的PCI-PM系統軟體是不可能知道該新位元的存在,也僅僅能夠依據裝置告知的PME支援、Aux_Current欄位、PME_Enable位元,來致能輔助電流。因此,這個3GIO所新增加的「Aux Power PM Enable」,就值得進一步搞清楚。
最後,就將3GIO中所規範的電源管理(PM)封包,做個最為扼要的整理。
言及至此,可以來闡述一個廣義地觀念問題:PME所涵蓋的協定處理,可以跨及三個範疇,分別是電源管理協定、介面卡與裝置熱插拔處理協定與插槽電源管理。因此,PME軟體的策劃就需要涵蓋以上各個要素的因應措施。