ACPI Processor C-state

ACPI,即Advanced Power Configuration Power Interface.在G0工作狀態下,ACPI定義系統處理器的電源狀態,要么為活躍狀態(正在執行),要么為睡眠狀態(未執行)。處理器電源狀態被設計為C0,C1,C2,C3...Cn。C0電源狀態是活躍狀態,即CPU執行指令。C1到Cn都是處理器睡眠狀態,即和C0狀態相比,處理器處理器消耗更少的能源并且釋放更少的熱量。當進入睡眠狀態,處理器不執行任何指令。每個睡眠狀態都有一個和省電多少對應的延遲。一般來說,進入和退出的延遲越長,這個狀態越省電。為了保持能量,OSPM在空閑時將處理器置于其中一個支持的睡眠狀態中。在C0狀態下,ACPI允許處理器的性能通過一個定義的節制過程發生改變,通過改變進入多種性能狀態(P-states). 處理器的電源狀態.
p-status:
CPU在C0狀態時會執行指令,但是即使在C0狀態下OSPM仍然可以通過調整CPU的工作電壓和頻率的方式,以此降低整個平臺的功耗。P-state 在Intel平臺上通常指的是EIST(Enhanced Intel SpeedStep Technology),EIST允許多個核動態的切換電壓和頻率,動態的調整系統的功耗。OSPM通過WRMSR指令寫IA32_PERF_CTL MSR的方式調整CPU電壓和工作頻率。
ACPI定義這樣的邏輯在每個CPU的偏置上,即OSPM通過轉換來切換不同的處理器電源狀態。這個邏輯是可選的,在FADT表和處理器對象中有描述。FADT表中的這些字段和標志描述了硬件的對稱性,以及處理器對象對特別的CPU時鐘邏輯包含的位置(在P_BLK寄存器塊和_CST對象中有描述)。
P_LVL2和P_LVL3寄存器提供可選的支持,將系統處理器置于C2或者C3狀態。P_LVL2寄存器將排好序的處理器置于C2狀態,P_LVL3將排好序的處理器置于C3狀態。C3狀態的額外支持通過總線主狀態和仲裁禁止位被提供(PM1_STS寄存器中的BM_STS位和PM2_CNT寄存器中的ARB_DIS位)。系統軟件通過讀取P_LVL2或者P_LVL3寄存器數據來進入C2或者C3狀態。硬件必須精確的將處理器放在恰當的時鐘狀態,通過對相應的P_LVLx寄存器的讀操作。平臺必須定義可選的接口來允許OSPM使用_CST對象進入C-state。
處理器的電源狀態支持是對稱的,通過FADT表和P_BLK接口;OSPM假設同一系統里的所有的處理器都在相同的電源狀態下。如果處理器有不對稱的電源狀態支持,BIOS將通過FADT表選擇和使用所有處理器最低的相同的電源狀態。例如,如果CPU0支持所有的電源狀態乃至C3,但是CPU1僅支持C1,那么OSPM將僅將空閑的處理器置于C1(CPU0將不會被置于C2和C3狀態)。注意C1必須被支持,C2和C3是可選的。
處理器電源狀態C1
所有的處理器必須支持這種狀態。這種狀態的支持是通過一個本地的處理器指令(HLT或者mwait),并且認為不需要芯片組的硬件支持。這種狀態的硬件延遲必須足夠的低,使得OSPM在決定是否使用該狀態時不需要考慮延遲方面的問題。除了將處理器置于一種電源狀態,這個狀態沒有其他的軟件可見的效果。在C1狀態下,處理器可以保持系統cache里面的內容。
硬件可以以任何理由退出該狀態,但必須是在有中斷到達處理器的情況下。
處理器電源狀態C2
這種電源狀態不是必需的。如果存在,該狀態能夠更好的省電,它通過使用P_LVL2命令寄存器或者由_CST提供的另一種機制來使處理器進入該狀態。這個狀態的最壞情況下的硬件延遲在FADT的表里面有聲明,OSPM可以根據這個信息來決定什么時候C1狀態應該被C2狀態代替。除了將處理器置于一種電源狀態,該狀態沒有其他的軟件可見效果。OSPM假設C2比C1更省電,但是退出的延遲比C1要高。
C2電源狀態是一種可選的ACPI時鐘狀態,需要芯片組的硬件支持。時鐘邏輯由一個接口組成,可以用來被操縱使處理器精確的進入C2電源狀態。在C2電源狀態下,處理器被認為能夠保持其cache的一致性;例如,總線控制器和多處理器的活動可以發生而不破壞cache里面的內容。
C2狀態將處理器置于一種低功耗的狀態,圍繞多處理器和總線控制器系統做優化。當存在總線控制器或者多處理器活動時(這一條件將阻止處理器進入C3狀態),OSPM將使一個空閑狀態下的處理器群體進入C2狀態。處理器簇能夠在C2狀態下監視總線控制器或者多核CPU訪問內存的行為。
硬件可以以任何理由退出該狀態,但必須是在有中斷到達處理器的情況下。
處理器電源狀態C3
系統對C3處理器電源狀態的支持也是可選的. 如果存在,這種狀態比C1和C2狀態更加節省功耗. 使用P_LVL3命令寄存器或者_CST機制可以進入C3狀態. 這種狀態的最壞的硬件延遲在FADT表中聲明了,OSPM可以通過這一信息來決定什么時候需要進入C3狀態而不是C1或者C2狀態. 當在C3狀態中,處理器的cache保持著狀態但是處理器沒有窺視總線控制器,或者多核CPU進行訪存.
硬件可以以任何理由退出這種狀態,但必須是因為一個中斷投遞到了該處理器,或者當BM_RLD被設置時,一個總線控制器企圖訪存.
OSPM負責保證cache的一致性.在單處理器環境下,這可以通過使用PM2_CNT.ARB_DIS總線控制器仲裁寄存器來保證總線控制器的活動不會發生在C3狀態下. 在多處理器環境下,處理器的cache可以通過flush和invalidate來保持一致性.
有兩種機制支持C3電源狀態:
1. 在進入C3狀態之前,讓OSPM flush和invalidate cache
2. 提供一種硬件機制,阻止控制器寫內存(只支持UP)
在第一種情況下,OSPM將在進入C3之前flush系統的cache. 由于flush系統的cache通常有很大的延遲,OSPM只對多核平臺的空閑處理器支持這種情況. flush cache通過ACPI定義的一種機制來完成.
單處理器平臺提供一種硬件功能,OSPM將嘗試將平臺置于一種模式,當處理器處于C3模式,這種模式組織系統總線控制器來寫內存。一旦總線控制器請求一個訪問,CPU將從C3中被喚醒,并且重新使能總線控制器訪問.
OSPM使用BM_STS位來決定要進入的電源狀態是C2還是C3. BM_STS是一個可選的bit位,表示總線控制器是活躍的. OSPM使用這一位來決定在C2和C3之間的策略. 頻繁的總線控制器活動將CPU的電源狀態降到C2,沒有總線控制器活動將CPU的電源狀態提升到C3. OSPM保持BM_STS的一個變化歷史來決定CPU電源狀態的策略.
用在C3里的最后一個硬件特性是BM_RLD位. 這一位決定總線控制器的訪問是否導致Cx電源狀態的退出. 如果這一位被設置,一旦有總線控制器訪問,Cx將退出. 如果該位被復位為零,總線控制器的訪問將不會導致電源狀態的退出. 在C3狀態中,總線控制器的申請需要CPU轉換回C0狀態,但是在C2狀態中,這樣的轉換將不
是必須的.在C3狀態下,OSPM可以設置這一位,在C1或C2狀態下,可以清除該位.
閱讀全文類別:Acpi 查看評論
浙公網安備 33010602011771號