標籤

2009年4月27日 星期一

ACPI C state

http://baike.baidu.com/view/2051969.html?tp=2_01



  ACPI Processor C-state
  在G0工作狀態下,ACPI會定義系統處理器的電源狀態為活躍狀態(正在執行)或是睡眠狀態(未執行)。處理器電源狀態被設計為C0,C1,C2,C3...Cn。C0電源狀態是活躍狀態,即CPU執行指令。C1到Cn都是處理器睡眠狀 態,即和C0狀態相比,處理器處理器消耗更少的能源並且釋放更少的熱量。當進入睡眠狀態,處理器不執行任何指令。每個睡眠狀態都有一個和省電多少對應的延遲。一般來說,進入和退出的延遲越長,這個狀態越省電。為了保持能量,OSPM在空閒時將處理器置於其中一個支援的睡眠狀態中。
  在C0狀態下,ACPI允許處理器的性能透過一個定義的節制過程發生改變,透過改變進入多種性能狀態(P-states)改變處理器的電源狀態。
  ACPI定義這樣的邏輯在每個CPU的配置,即OSPM通過轉換來切換不同的處理器電源狀 態。這個邏輯是可選擇的,在FADT表和處理器對象中有描述。FADT表中的這些字段和標誌描述了硬件的對稱性,以及處理器對象對特別的CPU時鐘邏輯包含的位置(在P_BLK寄存器塊和_CST中有描述)。
  P_LVL2和P_LVL3寄存器提供可選擇的支援,將系統處理器置於C2或者C3狀態。 P_LVL2寄存器將排序好的處理器置於C2狀態,P_LVL3講排序好的處理器置於C3狀態。C3狀態的額外支持通過總線主狀態和仲裁禁止位被提供 (PM!1_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狀態下,可以清除該位。

沒有留言: