Tuesday, November 29, 2011

Power Management (2):CPU省電功能(二)

P-State(Performance State):

和C-State不同,當CPU在P-State運作的時候有在執行指令而非停止不動。P-State的工作原理是將CPU的頻率降低,能讓CPU執行輕量的工作的時候可以有效減少所需要的電量。

Performance State也許聽起來陌生,但是聽到PC市場的兩大廠商各自為他們CPU的P-State功能取了名字(Intel的SpeedStep和AMD的PowerNow!或Cool'n'Quiet),應該很多人大喊:「原來是這功能喔!」。

ACPI定義支援P-State的宣告,以下會介紹在筆記電腦專案開發比較常遇到的_PCT、PSS跟_PPC(註1)。

(以下範例是從一台Intel i3-2310M筆記電腦擷取出來)
===================================
\_PR_.CPU0._PSS Returned:

  Processor Performance State 0
    CoreFreq          2100Mhz
    Power             35000mW
    TransitionLatency 10ms
    BusMasterLatency  10ms
    Control           00001500
    Status            00001500

  Processor Performance State 1
    CoreFreq          2000Mhz
    Power             32872mW
    TransitionLatency 10ms
    BusMasterLatency  10ms
    Control           00001400
    Status            00001400

  Processor Performance State 2
    CoreFreq          1900Mhz
    Power             30785mW
    TransitionLatency 10ms
    BusMasterLatency  10ms
    Control           00001300
    Status            00001300

  ...(中略)

  Processor Performance State 12
    CoreFreq          900Mhz
    Power             12763mW
    TransitionLatency 10ms
    BusMasterLatency  10ms
    Control           00000900
    Status            00000900

  Processor Performance State 13
    CoreFreq          800Mhz
    Power             11406mW
    TransitionLatency 10ms
    BusMasterLatency  10ms
    Control           00000800
    Status            00000800
===================================

透過_PSS object,作業系統能夠知道有支援哪些P-State(如上示P0~P13)和每一個P-State的詳細資料,同時間也包含要怎麼觸發改變(Control跟Status)。

那麼要寫到哪一個硬體的register呢?答案就宣告在_PCT object裡:
===================================
\_PR_.CPU0._PCT Returned:

  Performance Control
  Control Register (FFixedHW, 0, 0, 0)
  Status Register  (FFixedHW, 0, 0, 0)
===================================

系統設計者如果需要限制CPU最高的頻率(如:省電),作法為修改_PPC並且通知作業系統如此的改變,如以下的範例

  // 把最高的CPU頻率向下限制一階 = P1
  Store(0x01, \_PR_.CPU0._PPC)
  Store(0x01, \_PR_.CPU1._PPC)
  Store(0x01, \_PR_.CPU2._PPC)
  ...
  Store(0x01, \_PR_.CPUx._PPC)

  Notify(\_PR_.CPU0, 0x80)

  Notify(\_PR_.CPU1, 0x80)
  Notify(\_PR_.CPU2, 0x80)
  ...
  Notify(\_PR_.CPUx, 0x80)

當作業系統執行完以上的AML程式,CPU會被限制在P1~P13。

比較特別的是ACPI只有定義限制「上限」而沒有定義「下限」,其中的理由你是否可以想的出來呢?

註1:還有其他與P-State相關的object,如_PDC、PSD等在這篇文章沒有介紹。

(續:Power Management (2):省電功能 - CPU系列之三

No comments:

Post a Comment