和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:那麼要寫到哪一個硬體的register呢?答案就宣告在_PCT object裡:
===================================
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