找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 17938|回复: 2

CPU Power States

[复制链接]
发表于 2010-10-1 20:42:05 | 显示全部楼层 |阅读模式
C-state
4 T- x0 q7 r; W1 Z* F' m
1. Overview$ L! K2 ~' a* h( A
) e: y9 ?- b+ f" c

1 N- w" t- m. y& vC-stateACPI spec定义的CPU工作在G0时的power states,这些状态包括C0,C1,C2,C3…Cn.其中C0被称为Active状态,也只有C0的时候CPU才会执行指令;其余的状态则被称为sleeping,这时CPU是不执行指令的,也因而会节省更多的功耗。系统在运行时会根据loading状况在各个C-state之间切换
$ T, ]# v5 N2 W% D. B" W降低功耗,图1C-state切换的一个简单的当CPU在进出sleeping state时会有一定的延时,通常延迟越大功耗对应的C-state的功耗就越低。APCI规定C0 C1 C2需要保持cache的一致性(要保证CPU cache中的数据一定要是最新的数据),C3以及后续的state就没有这个要求了,也就是说如果系统还要memory requestOS就不会进入C3以及之后的state。从信号上来看  n  O: s( J( ^
比较旧的CPU架构上,C-state的切换是通过STPCLK#,SLP#,DPSLP#这几个信号实现的,在新的架构引入了QPI bus,切换C state的动作都会透过QPI Request Msg达成,上述信号在新的平台上都被remove掉了。  g' r' b) Y* j
( c* M/ ^/ M: l( z* F3 q
cstate1.jpg

1 _& R- K! G! b8 L; m
1

  A! J* o: K2 P: J2. C-state Control
5 U- H1 C# K  Q" d. v
) V/ P3 E  L" _% k1). E& }0 h; i* B0 o) d% }
Detect & Enable C-state
/ n8 M, G: e* d% |( n0 A" f1 X
% y' U4 Q7 ?& y% y# ?BIOS可以通过CPUID function 5 check CPU是否支持C-state,以及支持哪些C-stateC1 C1E C3 C6 C7),支持的最大的C-state也可以通过MSR去设定,默认情况下增强型C-state以及IO MWAIT Redirection是不支持的,BIOS要根据系统的需求决定是否开启支持该功能的register,对于多核的系统就需要对每颗核都要单独去配置它的C-state的支持。
; j' |2 Y5 ?% y: h
% M1 h& f) @7 a8 _1 v2): m- k7 R8 [+ @; q8 a3 d. S
C-state Basic Configuration: d. `  T7 \) J# U) @* ?- s( n
通常情况下PPM code会根据MWAIT以及AC/BAT是否存在给出不同的配置方案如:a.MWAIT支持的时候通常的做法是将CPU MWAIT(C1) 映射为ACPI C1,CPU MWAIT(C3)映射为ACPI C2 CPU MWAIT(C7)映射为ACPI C3,当AC存在时为了系统获得更高的性能通常会将MWAIT(C7)不再映射为ACPI C3,也就是支持ACPI C1 C2 两级C-stateb.MWAIT不支持的时候就需要使用传统的读P_LVLX的做法,将HLT当做ACPI C1,P_LVL2当做ACPI C2,PL_LV4当做ACPI C3,同样在AC存在的状况下ACPI C3就不会被export出来了(以上做法的假设该CPU支持C6 C7,如果不支持的话就remove相关的supportcode)。' k4 |' `: D2 L1 D
& B. ~- p: j0 \- `
3)
) F% W% k; K  R  }7 RACPI Structure For C-state( |8 Y* Y; D9 F. I

/ {" t, N& p* j* w" R2 Gl" M' ]! N8 A1 L. U
_OSC & _PDC
8 w5 q' p/ r6 n# v& u" X( Y_0SC(Operating System Details) & _PDC(Processor Driver Capabilities)在功能上比较接近,基本上供OSPM调用和BIOS传递一些关于C-state P-state T-state是否支持,以及支持的程度和实现方式的一些设定,BIOS可以依据OSPM的参数回报相应的ACPI Structures; j- k, e  E5 V! e; M7 n. P
l' E7 J5 n% N( u0 T8 O6 J
_CST
' j! e8 c0 P! L( y, z- q_CST是通过ACPI ASL code 汇报给OSPM的有关该平台CPU所支持的C-state的信息。它的格式如下所示:
7 |' g8 p5 O, w' t8 e2 \2 t+ @- {7 QCSTPackage : Package ( Count ,4 F+ s6 {: @" }8 B8 {3 V- Y( S# v! e
CState ,…,
7 B& [, [: K1 e) t! D6 xCState )5 C: ]: x7 |5 Y# d9 N! x$ ~2 L3 W
其中Count表示所支持的C-state的个数% z; X6 h! n4 I  k& I+ j
CState: Package ( Register ,3 x, J5 ?" ~6 I& C" _! C9 ]$ M5 m
Type ,  W, J2 ^2 H* \% S7 `
Latency ,2 B, ?" R& u  Q1 r+ ?9 e
Power )7 U0 ~9 p5 T2 P$ k
6 `8 B* ~$ W8 E+ r1 Q
Register表示OSPM调整C-state的方式,Type表示C State的类型(1=C1, 2=C2, 3=C3)Latency表示进入该C-state的最大的延迟, Power表示在该C-state时的功耗(单位是毫瓦)。下述是一个sample code,注释部分已经讲的很明白了CPU0支持4C-state,其中C1使用FFixedHW的方式访问,其它3C-state都是通过P_LVL方式切入,第三和第四个Cstate都被映射到ACPI C32 K2 }1 G0 d+ }
* U; N; ?* W  K5 ?
Name(_CST, Package()
9 V% |* l5 _& d0 R& ^

3 K3 G/ {/ j' c/ e, y; o{ : q& |" }$ ]( x0 n( X8 b7 X
4,
/ G& D. o# J2 R7 W9 _, W// There are four C-states defined here with three semantics

# T0 f2 |$ _4 P3 B
+ L9 h& u& G! H! L, D5 A// The third and fourth C-states defined have the same C3 entry semantics9 j: H( ?2 b( A7 t

' X" H7 T2 J6 N5 iPackage(){ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},: I. S; C+ E" Y4 a, V! p
1,( U: R2 q3 q" z
20, 1000},
& {( z/ h3 Z! ^4 Z( f4 s# S
& \1 ^) I# \# f% @1 e3 l
Package(){ResourceTemplate(){Register(SystemIO, 8, 0, 0x161)}, 2,% q$ C0 S) B% X0 h  ?
40,
& g" W( u+ S8 x  x' Q750},
4 B% `- |, y# `) c& Y
Package(){ResourceTemplate(){Register(SystemIO, 8, 0, 0x162)}, 3,2 Z, ~- P; e. t6 X5 l, Y$ G3 z
60,
3 ^" R2 t/ [: Z+ g8 {! o500},

0 z$ v9 Y1 C: `9 K: \9 }; SPackage(){ResourceTemplate(){Register(SystemIO, 8, 0, 0x163)}, 3, 100,, {* L; W* N& D$ K
250}
1 j6 v1 W9 q+ A
* M( S) m8 Z6 }! W  t0 x* h
}) 8 L+ r& l1 d$ I% \: }% m: G. ^( R

# b5 H6 a; c# `; T' hl7 U6 ?; F- _. S# ^4 [
_CSD" N' Z0 m. H) R- C; K  G
8 A( B3 N. d( F- x- F+ F
C-State Dependency 用于向OSPM提供多个logic processor之间C-state的依赖关系。比如在一个Dual Core的平台上,每颗核可以独立运行C1但是如果其中一个核切换到C2,另一个也必须要切换到C2,这时就需要在_CSD中提供这部分信息。: E; @2 n4 r7 L5 `
& ]% [9 y) Q" o/ \$ b. o9 B+ k( R
" k' N0 B2 ?! [) m8 S
2 V2 r2 f0 a/ y9 O

8 w+ s2 l7 O. q$ {4 I3. P_LVL VS FFH
% H; R/ ^: f6 P9 x+ m( C) N( R- i1 o( W  N" c4 Q
P_LVL称之为Level register,是在一些比较旧的Intel平台上用做切换C-state的一种方式比如切换到C2,就会去读LV2 然后系统就会进入一个叫做level 2 power state(C2)" I+ J. |0 u) Q( A8 U
FFH全称是Function Fixed Hardware,它是Intel特有的用于CPU power states之间进行切换的一个interface. ACPI中的GAS被用于传递FFH的信息给OSPM,它有一个特定的Address_Space_ID(0x7F),这种GAS主要被用在_PCT _CST这样的ACPI Structure中。GAS_CST中的格式如下图2所示:
2 G1 k1 ]* ^$ l. @6 n, d1 q* H8 u7 D( E" j: [* t0 |
gas2.jpg
; k% ^8 o. i% `: F# Z  }2 o3 n
2

5 y& t3 r% e1 W$ [# g8 e# h0 NOSPM解析到该_CST structureID0x7F,在切换C-state时就可能就会去用Intel特定的native 指令MWAIT去切换,其中Arg0 Arg1主要是MWAIT Extensions指令中传给ECX EAX的参数。Intel之所以将切换C-state的方式从读取P_LVL改成MWAIT指令的方式主要应该是因为性能和时间上的影响,P_LVL的方式就通过IO read 4**地址的方式去做的,IO读取是比较慢也是比较耗时的,所以改成现在通过MWAIT的方式去做,可是现在的CPU仍然可以通过开启IO MWAIT Redirection的方式支持以前的P_LVL的做法。下面的_CST是使用FFH的一个例子:1 m  X$ G+ ^/ }. B* f. f
Name(_CST, Package()& I  X! r2 c9 U/ |0 N

7 V9 l7 h% k1 G: w{ * ]& i0 p# z5 d
2,$ S- m3 t3 _/ h
// There are four C-states defined here with three semantics

' o6 B+ o- J& M4 i" b( y; @, N7 q+ \4 l* R
// The third and fourth C-states defined have the same C3 entry semantics
  t% i- l6 a  F# R2 y4 s; [4 s
/ p- r1 c* D; J( |+ U; u
Package(){ResourceTemplate(){Register(FFixedHW, 0x01, 0x02, 0x0000000000000000,0x01)},
) g( t" M. k$ F0x01,' u; T  |+ A' v' D" x
0x03, 0x000003e8}," J( L7 t, z8 V
, G/ R0 t' X3 b& n. V) t+ F) c
Package(){ResourceTemplate(){Register(FFixedHW, 0x01, 0x02, 0x0000000000000010,0x03)},
2 N( f6 n* b5 U! G# y, V, q0x01,; J- [& {6 K1 n
0xf5, 0x0000015e}
2 W2 k& M3 A& P2 D
})
+ x1 k+ s8 K0 p/ C7 X, ^; B- F; _  E7 s* k: j

( q5 |/ x' n* J! dREFF:
! {8 [; \3 R1 ~1.2 c3 B6 m: g% O8 T9 ~) I8 ^% l6 ~
ACPI Spec 3.0
* n) i# S: R! _5 k# Z3 W$ }9 R2.4 |& v% i% x- T* C2 J+ k
Intel Processor vendor-Specific ACPI
2 Q6 [2 I1 \6 h  \& g
# m- [) i! w3 \& q; }( v, C3 }- S4 }  o% \, Q: a
That’s all!
% d$ N2 q, J$ _; r! o, Z5 W- b
# R* J9 q9 O) |% y6 ]  e$ J8 [* J7 u- PPeter
$ I+ Q2 |* |5 @0 p5 D9 `9 t
0 v  m( M* L8 s: W4 K6 `8 {2010/9/20
7 c* D( d% x, G; w9 b4 z- s9 H2 |8 ^( v/ m# f
[ 本帖最后由 peterhu 于 2010-10-1 20:44 编辑 ]
 楼主| 发表于 2010-10-1 20:45:45 | 显示全部楼层

P-state

1. Overview+ e" x  ~9 {( R% R; g

; w* Q8 f% [: l+ _CPUC0状态时会执行指令,但是即使在C0状态下OSPM仍然可以通过调整CPU的工作电压和频率的方式,以此降低整个平台的功耗。P-state Intel平台上通常指的是EIST9 F5 p9 Y+ j& s9 Z" s3 r8 v
Enhanced Intel SpeedStep Technology),EIST允许多个核动态的切换电压和频率,动态的调整系统的功耗。OSPM通过WRMSR指令写IA32_PERF_CTL MSR的方式调整CPU电压和工作频率。: p9 g9 a7 N3 Q4 g8 s/ S- L3 H0 O
" |; a3 T5 t) Y& x* b" R1 _
2. P-state Control8 F" ]! p6 ~# _) T, B2 g! ]
9 d+ ]  ]8 j' n0 o
1)8 C# d! d# a6 v( z
Detect & Enable P-state
" e! |6 m( P: @4 E, E
% B* O6 @4 h. n7 U- V, dBIOS可以通过CPUID function check CPU是否支持EIST,如果不支持就没什么事了。如果支持的话,后续就要做一大堆乱七八糟的事情去开启P-statesupport,其中主要的步骤就是使用WRMSR去写IA32_MISC_ENABLES开启P-state
8 _3 m6 @9 K: M
0 C  H2 `* A/ u& ?8 [+ _2)# P2 e  K$ R- ~" y$ E
Supported P-states
# n. X; d5 Q; r * y* L% e& D/ w
BIOS Enable CPU EIST以后就需要计算出该CPU支持的MinRatio(MaxEfficiencyRatio) MaxRatioRatioStepSizeNumStates,所有这些信息都可以通过CPU MSR直接或者间接的获得,其中MinRatio MaxRatio都可以从PLATFORM_INFO中获得(不同的bits),NumStates就是二者的差,有一点需要注意的是如果NumStates > 16,RatioStepSize就会加1直至NumStates <= 16为止。CPU的工作频率 = BCLK * Ratio,旧架构的CPU BCLK通常是由clock gen给出的,通常上是100/200 MHZ。新架构下CPU clock gen是内置的,BCLK固定是100MHZ
& Q; V1 y7 z) s& J: Q
; H3 E# Q& A7 I% ~4 u. S8 BMinRatio = PLATFORM_INFO6 S- y# P7 g& _8 {& o
MaxRatio = PLATFORM_INFO9 E% X; ~. z, p* N( x
RatioStepSize = 0x01
5 L8 j  d8 S0 p" T+ _6 J3 T5 NNumStates = (MaxRatio – MinRatio) / RatioStepSize + 1
7 T- J+ s& _+ \  J4 {
4 i- J# O/ R; m+ |; eIf(NumStates > 0x10)
3 p( ]0 A( [; {+ I{7 ^& _; w$ S7 ]
RatioStepSize += 1- k. M' `+ E" M
NumStates = floor((MaxRatio – MinRatio) / RatioStepSize) + 1
7 {6 y* U( [/ W) i) ~, E" b5 h' t}
* d' x1 a( K+ W$ x% n
8 J" s) ^: u5 ?* Y0 P/ w3)
7 E! ?; W5 o9 @0 H3 G7 e. F. qTurbo Mode6 G$ d# @: v. L+ Y: e/ W
- r1 w4 j2 i  ~) H4 \8 U
Turbo Mode是新的CPU架构下引入的一个新的功能,通常被作为IPS的一个sub function。在Turbo Mode模式下 CPU能够访问到与之相关的thermalcurrentpower的信息从而根据这些信息动态的增大CPU以及IGPUfrequencyCPU可以工作在[Max Non-TurboMax Turbo]ratio之间的任意频率。BIOS 可以enable/disable Turbo Mode,当Turbo Mode存在时,它会作为EIST最高的Performance State P0 reportOSPM,另外Turbo ModeRatio是通过MSR TURBO_RATIO_LIMIT获得的。Turbo Mode受限于thermalcurrentpower的门限值,BIOS可以通过设置这些参数影响Turbo ModePerformance) B! [1 E- Z+ p5 H
# Z- i$ B8 Q+ D, v/ @7 t9 I3 Z5 E( [
4)
7 C% E/ Q& E. @8 iOver Clock: L: D- d2 r$ ?0 e; Z: X
8 k# ?1 }4 X8 ?' }' S: e  `& d
某些SteppingCPU具有Over Clock的功能,BIOS DetectEnable Over Clock的功能以后,Turbo Mode所支持的 Max Turbo Ratio就会取决于FLEX_RATIO,而具有功能OCCPU则可以通过调整 MSR FLEX_RATIO影响Max Turbo Ratio的值,当然FLEX_RATIO也是会有一些其它的限制(参考相关的spec)。
) @2 n$ ?7 p+ f0 H" p
/ s8 ^1 i4 h5 {$ b: I5)
) y: g( K: K) Y$ a" Z0 J) G$ qACPI Structure For P-state$ D1 R) P" }7 H3 B

7 B9 y% b) u6 p, s8 E! {$ m1 K0 Vl! D! _  e, u% U# o8 j- w
_OSC & _PDC
/ N, l3 e, j8 B / L, {4 \" L/ |- E( W
_0SC(Operating System Details) & _PDC(Processor Driver Capabilities)在功能上比较接近,基本上供OSPM调用和BIOS传递一些关于P-state是否支持和实现方式的一些设定;另外关于_PSD Coordination Type也是有_PDC提供的,BIOS可以依据OSPM的参数回报相应的ACPI Structures# ^5 W: O. O  U; U( x+ t- P

! v1 {7 b+ W9 `# d9 ql# M% |1 K- s* \& C  M! N
_PSS, [8 S, h, h& t/ {# r+ ?, Y/ y" M
Performance Supported States用于回报OSPM 该平台所支持的Processor Performance States的数量
7 T7 N; n& V* e' ~! z并且通过一个packaged list的形式回报出该P-Stateinternal CPU core frequencytypical power dissipationcontrol register valuesstatus register values。第0package表示该平台所支持的最高的P-state,第npackage表示最低的P-statePackaged lists的格式如下所示,其中需要说明的是关于ControlStatus这两个参数,其中Control表示要写到 MSR IA32_PERF_CTRL中的值,Status用于当OSPM通过WRMSR 写完IA32_PERF_CTR之后再读取IA32_PERF_STATUS中的值并和Status做比较1 h; d0 |6 `; s$ D2 X2 X0 e
以确定P-state切换是否已经完成。
: C  x2 Z: m  r2 p2 b  \
6 c9 {  d, E! n7 [7 y! zName (_PSS, Package()
8 c3 h7 H% Y' }, F) J7 c{2 T- [$ ]8 r$ ]* X: l" Y) x
// Field Name+ U* t3 i' U1 E0 i+ \$ u5 s
Field Type
) H9 S6 d2 E6 ?* Y7 r8 e; d( \8 ?, l! F7 p7 P" F+ f9 Z9 W0 \
- l, k9 r4 r2 u  ]

4 {7 H% |& `0 T% r! M0 TPackage ()
* T/ E& }+ Y& G: m% K6 ]// Performance State 0 Definition – P0 - O* X  L8 m) t

+ `5 g0 x. \$ ?- Z+ E{) d. W* }) d9 p$ D$ P2 x7 Q* T

2 [1 ^* `6 E5 _7 V' S+ L( G+ v) L& b4 @7 c+ k4 ?* e5 L0 Y' y
CoreFreq,& L& u5 y5 ]+ v5 b2 ~  ]3 Z
// DWordConst 9 y2 s; E0 a) S) l" D" e! T' M) N

5 i# z# _1 v1 U# ?/ ]0 ?6 b5 O* r5 h2 d# Y/ C2 i' Z
Power,5 c4 r! p- e6 T% m% b' D! x5 K
// DWordConst
* p, O; h+ s2 Z4 U- v
" f' V, n* l- @8 o5 BTransitionLatency,
, |7 q4 E( G) s8 _// DWordConst 6 C# r7 C4 ~0 }# a/ Q+ c/ y
6 b$ G) H$ C( e! S( H+ E
BusMasterLatency,8 Y4 u- t* l9 Z0 Q+ p6 o* F3 h
// DWordConst
1 P; G* u# @0 v; a& j! Z/ a
- y9 x. d1 l( ^4 H) h% WControl,
$ h( I7 G. f( m2 P// DWordConst 6 x& {9 }% A( v; b- ~2 l0 b
$ J2 _/ L4 a; H6 A
Status
2 F0 c! d" Q/ E. T) z' e* [+ M" H9 s& N) a3 i, p- g2 L
// DWordConst
3 m7 K4 W4 o7 F& }' x, z) `5 L; o7 l; V, d$ u
}, - i) y2 d+ \, m: v
& ?) i: T9 l' G0 q
.
7 _1 R+ k1 O! D  ?- `
1 X# d; m% l4 K0 V* }2 l' P.
+ t5 w$ d0 m2 B
0 M: j& ]' x( j) d5 H) N. : x5 Q3 C% t7 V0 D8 e& O
}) // End of _PSS object7 [& v: f* Y$ s, @# c$ ^
前面Supported P-state中已经提到如何计算MinRatioMaxRatioRatioStepSizeNumStates的值了,我们就可以将这些值天道_PSS packaged lists之中了下面是一个_PSS的具体的例子,这个例子中MinRatio = 0x0cMaxRatio = 0x10RatioStepSize = 0x01NumStates = 5 . i# }5 V7 ^2 o, e& g9 u0 B. K
% C; T7 l6 y9 Q5 M
Name (_PSS, Package()
/ [- {/ l5 [' H' W, q5 T, {3 x( C
* i7 }) {9 s' q( ?3 s{
) i5 f; L# v' X+ t/ U: q
# M. g1 i% b" v- ^6 J# w: L8 lPackage(){1600, 21500, 10, 10, 0x0010, 0x0010}, // Performance State zero (P0) 5 p' B1 B, P% ~5 Y( j, e

4 M/ z- R1 R1 I$ q$ R$ nPackage(){1500, 14900, 10, 10, 0x000F, 0x000F}, // Performance State one (P1)
0 C; j8 z" [( s6 Y
  l( V5 i. c, E4 D9 o  RPackage(){1400, 8200,+ j  F# S! V0 t0 _- Q6 O' v
10, 10, 0x000E, 0x000E}6 h6 t( a' v, S3 Y
// Performance State two (P2)- s" m& `4 f6 C
Package(){1300, 14900, 10, 10, 0x000D, 0x000D}, //
; G& T/ b& ^: b0 PPerformance State one (P3) 9 C0 r* Y2 I" V& u5 E6 C7 Q

# @& Y5 T/ E0 Z) K7 I! APackage(){1200, 8200,$ J% b3 }7 q$ Y2 `# I% @( x+ a
10, 10, 0x000C, 0x000C}$ S1 X( c' e8 i' J3 a
// Performance State two (P4)
8 k* ]: q: R; [% ]6 q& A' R' t1 W' g  S6 E  S
}) // End of _PSS object
/ a3 G  V# U% U- h1 B/ N- H( {
: M* F9 U7 L0 Y8 L另外当该平台支持Turbo Mode P0将会reportTurbo Mode
9 ^: T0 [3 _  g
2 d+ x0 k% v# d/ g: d6 `  Yl
  v8 f8 L6 }. ^; W9 S* z; P
_PCT9 d4 x' W% G" n' y: v4 a
" c+ V- l; S. o2 E- x- [
Performance Control用于将P-state MSR interface ReportOSPMOSPM通过_PCT report出来的PERF_CTRL MSR 切换P-state,在新近的CPU架构下_PCT通常report native mode也就是FFH的方式,下述是一个sample codeOSPM透过_PCT得知是native mode,当系统切换P-state,它应该就会通过MSR IA32_PERF_CTRLIA32_PERF_STATUS的方式来进行。
' \& o; X! Z7 T% p3 L
+ c- O7 a$ g2 D. xName(_PCT, Package ()7 u8 p5 e) L8 \3 C
// Performance Control object ) t9 Y- K6 n+ n# H7 X0 Y

& z4 V6 _+ g3 D( ^- X{ ) M5 y8 @9 _( Q2 H

+ T3 B" w# A* u1 j- Z, GResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
0 {) U: g9 l+ w- }0 s1 H0 l// PERF_CTRL
+ K1 D( o! U3 J4 M: v5 G( @
0 C4 ]! E) v% @' V( z, x* cResourceTemplate(){Register(FFixedHW, 0, 0, 0)}1 l! C6 S& T* F6 {/ a0 t+ }* n
// PERF_STATUS
, f# [, W% Z/ J+ ?3 S
* B; j* l- j3 v# D}) // End of _PCT object' Q5 D1 m' d9 Q) V1 e

2 X, i. `* e& v: T) Jl
5 b7 ]# h) ?* v" R6 i% O
_PPC3 _3 H# ^$ A6 I! ~
, d4 i8 i1 u9 |
Performance Present Capabilities用于动态的告知OSPM该平台当前所支持的最高级别的P-state,它返回的值就是_PSS中的Packaged lists中的entry num,如_PPC return 0表示支持_PSSreport的所有的P-state [p0,pn] return 1就表示支持[p1,pn]之间的P-state。下述是一个sample code。当系统的电源状态发生改变,我们希望支持不同的P-state时,我们只需要Notify(\_PR.CPU0,0x80)的方式通知OSPM重新解析_PPC method,进而获得当前平台所支持的P-states
2 W* I2 x+ k0 Q' I
% q7 u/ P, b6 r( fMethod (_PPC, 0)5 B: [) {) h, o7 m% z% ?
// Performance Present Capabilities method
2 L6 l( A! [2 |6 W" J/ ^8 x  z) g5 s) @! p8 l
{ & J) R# F$ @$ a' W
. q( B8 }" s+ d) v% L, |
If (\_SB.DOCK) 2 @4 W* J" D  U! `

: X) H4 [) E  q$ g: {8 {{ 0 _) {  W7 ?) k7 N' D9 \
, X9 O" x; Y+ |
Return(0) // All _PSS states available
2 L0 [5 ?! ?- c
) t  g) I* R% j
5 T- B; ?$ }  o( H} ' j' I, S1 Z4 N
' W4 ]6 m* J3 |1 A6 W
If (\_SB.AC) % x! K$ L4 ~; |

8 p+ l# y) E" ?{ : e) v7 r/ g* K
: D" C6 ~* ^, w1 d  }$ C
Return(1)
0 ^* D3 M5 H$ ?  c8 j// States 1 and 2 available 2 [' l# V! q( W* C* k" x% P

) @3 i& r; [5 Z% M+ l2 s; b} ; O: g0 m# l1 n4 I* y

# X8 w" `" V: F! F( }/ uElse
  R1 X4 B& t& F0 A9 u0 }1 \2 h0 W8 o
{
$ q+ C# v+ s/ Y" y: d1 {* e+ m, D) e  @7 q/ r2 }
Return(2)
' z' f) [1 q3 g// State 2 available1 i7 `" g, {- A0 O6 X; v8 K) b
+ S8 X! g5 E: I, z) o
} / v* G. T: g2 y
0 _; a( p1 X# b- j7 ^3 v
} // End of _PPC method
. O: f: n7 m% J; m) I( h
/ ?6 }  C) J7 `( u" E3 w$ r" E; p$ l) Tl
6 V; H' v4 \2 ]8 p
_PSD# Z7 Y# c. Y$ D% ]! N, e
  H4 Z4 O7 i( a3 ?
P-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的P-state,其它的核需要进行的动作等。4 ~- \6 b6 j# f
: V& A4 y7 M( w4 Y
REFF:) o' p/ X2 P) Q3 U+ b
1.
/ y. r, I: `7 v: j7 HACPI Spec 3.05 [; u! @0 T& F: J+ a; e
2.
, \$ {" n' J, N0 u5 dIntel Processor vendor-Specific ACPI
8 q2 L) h4 z0 T- P # w0 r( ~+ G. M7 y" _

. t! r% w3 e, f3 MThat’s all!0 _( a: I7 Q* K3 z" C
  R# \; }6 _6 B% E$ v" z/ h
Peter
, Q  b' }) {% D0 L! [" v" _. }
, u$ {4 C* s4 i( G$ f3 f' \2010/9/24
回复

使用道具 举报

 楼主| 发表于 2010-10-1 20:46:32 | 显示全部楼层

T-state

T-state
1. Overview2 V. K2 v+ d: C

; q) h2 t3 S3 |7 r" ^: S7 i  }" {, ECPUC0状态下有两种手段降低功耗的方法,其一是之前介绍过的P-state,另一个就是T-stateT-sate全称就是Processor Throttling States,它为OSPM提供了一种通过降低Processor Performance进而降低系统负载和温度的能力,听上去可能和P-state很像,其实是有区别的,P-state通过调整CPU VID电压进而影响CPU的工作频率的方式调整系统系能,而T-state则是通过调整单位时间内CPU Clock On /Clock On + Clock Off)的时间(也即Clock On工作占整个CPU工作时间的占空比)的方式
6 o! T" e' A* D6 o, I0 s,影响系统的功耗和温度。
) A% i: u0 M1 u4 c* U2 L
9 V+ g- [) G3 _: Z; [2. T-state Control5 B3 B0 C; b3 f4 {/ ^
: q, @- j3 Z. ]5 d+ {1 Y5 a8 K
1)
& U& s7 u* W9 f- b' g- f4 s" B) EMSR Based Control* L- Q7 Y/ ~) ~

' }  Q& \. M4 m: QBIOS可以通过IA32_CLOCK_MODULATIONEnable/Disable clock modulation,而且也可以通过该registerbit0:3 设置CPU Clock Duty Cycle。当FFH_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATIONT-state的转换。 8 S$ D4 y! [. y; V& ~$ q
; w( D2 ~; X: M# @+ k
2)
) M) T+ B0 I8 s* W1 y' r& l3 |/ ]I/O Based Control
# L4 |4 q! w+ F% }6 K' [ ( R# o* D: O& J1 }
除了基于MSRClock Modulation,新的CPU也支持IO emulation Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock ModulationOSPM将会通过PROC_CNT register bit4:0T-state的转换。, C9 @$ |: w1 u
$ c6 i7 z6 Y3 o4 {
3)" e( H& v) Q. g2 u. `9 r) H* a- J
ACPI Structure For P-state5 M3 B( D8 Y) ~9 [) E
l
0 k) \3 `/ e" B$ a! x
_PTC: F- ~/ E; g3 C6 d( c' \+ A

3 ?% j6 O: ?+ n6 s* G. ~: NProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
+ s9 j! _8 L3 _$ v# R % C  j& G+ {  A3 _# Q6 R
Name (_PTC, Package() 4 w' w( V& H1 b- t3 q
{ / T  ~  h' l* m2 P( W" S8 q/ S' D. J
# B' {6 _& Y7 g! Q" y
ResourceTemplate(){Throttling_Control_Register},
# e: U2 U4 E8 x3 B//Generic Register Descriptor 1 E8 r9 z8 c/ v: ]" T! j8 |: ^
9 y; I* A6 e, \, U: o0 E) M
ResourceTemplate(){Throttling_Status_Register}
: i( z& O! d" e3 D7 z6 Z5 f1 H2 }//Generic Register Descriptor
0 M% Z' ]; ?4 [  |5 w4 g3 \}) // End of _PTC
: P9 c' a& Q' G1 I$ _. v/ j5 B& } . ^/ |5 Z/ H, \' E
下述是一个sample code* ]; Q$ z/ W! a/ B
' A' S# z. J- J
8 N. [1 g+ p; j2 V" q) r; Q, [, ]
//! X( r+ x( X. Q' w) h# R) V

) w) w2 I( {1 q* p/ P& d// T-State Control/Status interface5 ~) m- x" G5 [; V' [8 q

1 W  l5 h& [! Y//
. m5 I4 p( D5 k2 Y+ W
( G- r+ g; ^3 x/ O, FMethod(_PTC, 0)7 m7 `" u8 K- |* d, p) K+ g

3 b. ]: C" ~8 E% Z6 }{8 o( L1 J7 r' N5 k
- W+ D6 d* V! d% K: V
//- h) Z  j& S" J4 c% t; z/ K

2 c, d6 t2 p, P. o2 M// IF OSPM is capable of direct access to MSR* q" K; O- A  u! N6 j/ c* `
' k& M$ o) s& g0 v
//
. ~+ C" d2 G& p+ I' C9 J" y8 tReport MSR interface4 a; v7 Y4 y8 r  w# d  B+ W

) C8 i5 }, \' D& u1 u// ELSE
# c7 e- {% C  g2 o0 B0 s
  m. t0 S: t0 s! T( a  s: [//
- m4 _+ O( K9 e3 @; b- v+ W1 m, UReport I/O interface
& L9 `9 e9 g# L( o$ V) y( Y1 _1 f$ W3 y) u% |) Y& ?/ M+ t
//# v! `- C& W# g" W1 N
3 H) k' m! [* c6 \5 T& C+ N: G! a
//
7 M6 g9 o# Z. J+ F( @* z! t0 ~2 mPDCx[2] = OSPM is capable of direct access to On  I* `7 s" ^7 v# q9 H5 w

) C4 b* w. x2 t+ u6 b//) U0 z& G; y0 @! L; d) M
Demand throttling MSR
' _2 y- D! Y# j& V* _! z6 h
( w. |6 f  `- s' [//. x- U: |* t2 L; ?* h( g

) \3 ?6 b+ P  u5 `4 b, }If(And(PDC0, 0x0004)) {
2 n, i  w' G( V/ X7 f' l/ {6 C: |2 A5 {/ f5 V& F, {: B) c9 o
Return(Package() {- r9 L& Y8 `. i/ s% ]

% P9 Y. ]1 {1 q5 i* Y9 IResourceTemplate(){Register(FFixedHW, 0, 0, 0)},4 z* a- [8 V9 w* }+ U$ P
# ^) _$ h; g9 W' _
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}8 e- Z+ {, Z" `
. z# ^5 I. S. {1 I
})2 f' K) Z* y& x1 v( d
& i7 F3 b" a) ^1 E: V: Y! }* r
}# |" _! O; ?( E
( i, J6 L; [) K8 I  J# l5 h
Return(Package() {
5 M- T: `# ?+ b, @5 n5 J
& t9 Q+ x; G6 Q9 @% uResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},6 y& @2 U1 z8 _6 |2 E6 G; H1 ?5 o

  s0 F: T' v8 p3 h) mResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}+ u- l7 Q0 t' |9 Q

* _9 d5 q" s7 L/ ]5 z/ I})
. R' a8 U1 U4 V5 W+ B) D2 a, h3 c6 P' x/ t# w
}
+ M) s5 T& ?2 Z: n% S& E' z9 k3 ~% e' D" ]. [% {9 M

. X, v: G* b' u9 Q  E% @
4 V/ U$ A" O5 Y/ ol1 d( q* U) l* N8 l1 H. W
_TSS- q6 K1 V) S8 S4 a* D

6 l$ V* {$ X$ zThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:) F8 ]( N* P+ b
Name (_TSS, Package() " O3 S( S9 ?' Z' [  p0 K
{6 C- X5 i, I. H, p3 i3 \
// Field Name; a! ^" i1 F2 [( P3 B0 Q
Field Type
' C3 w8 Y1 ?% j/ {4 _% p" M3 B1 p' }; [: o/ L

# m3 e' W. F+ q; z
5 c" K4 @7 I- U" p, G% m& f1 XPackage ()
2 s& a! q7 o) x9 T// Throttle State 0 Definition – T0
+ M$ K1 y0 Z9 B8 z/ p* f  @
& z+ A+ n$ |5 W9 X1 j{9 K- f! s0 b" i& t0 k

+ `, B4 }1 e: m0 B, B+ o7 U7 l1 M7 J5 ^- X
FreqPercentageOfMaximum,
& C- C4 R7 R9 N// DWordConst
1 i1 [0 k( S" c. |0 v+ p" v$ b
# }/ _; K: x3 l/ _Power,7 m' @0 e  z) J' m6 @& u2 ^
// DWordConst * B1 d. b+ _7 U

) U& {+ V+ Z# K4 Z& B% {0 rTransitionLatency,3 ^4 E( r% I: A/ r/ B1 n+ l
// DWordConst
& Y/ k3 k  {7 H# X% v
! V$ ~9 Y* W7 E5 V; H2 f; {Control,/ E6 N. R% U7 T+ P
// DWordConst
6 z, {. k$ B( V  [5 }, L- C
4 i$ d" D3 v+ EStatus: Y, x: m1 v" W5 D6 J5 |# E
// DWordConst % i! w6 S7 {3 N
}," S, v+ C) @- _5 ]$ K; [& f. b) B6 T2 e
……
6 V5 }, d$ {' |}! N  M0 E5 _. _( B2 ?% B$ {, G
- c/ y1 E. L! D" Y
Example code 如下所示:. n- f+ u; c& j  U

7 k. L$ z' F6 Q: Y8 hMethod(_TSS, 0)+ ], n/ X5 o4 G$ H, D: g

& {! V0 v6 W' g7 t* D{
0 w# u) C( R9 I5 y: w" ]2 C  T7 N$ a" K+ }
Package(){100, 1000, 0, 0x00, 0},
. N# l& X( z7 W1 i6 c
/ _+ G4 e1 f. l, ]' [- u, B- tPackage(){ 88,, Z; f0 L# c6 _8 _# }) ^' k
875, 0, 0x1E, 0},9 L& ]$ r7 B8 l+ q" x- V2 `6 F

& O* \  [6 P" qPackage(){ 75,6 B( t$ A$ {" |9 B
750, 0, 0x1C, 0},- x0 r2 V. B; Z/ l* ]% A1 `

  W- C; r: I9 V: x# D+ LPackage(){ 63,
+ p1 X* e& a4 H, |+ \' q  N/ X# E625, 0, 0x1A, 0},6 j4 s0 e5 ^1 e  p/ Z$ p' t3 Y

2 A8 {# s9 t& T1 HPackage(){ 50,
7 T0 ?+ j- W* `/ h. a500, 0, 0x18, 0},% Y: b4 Z3 z! W8 G! L4 l. g- G
0 n7 K# D2 o& G: q
Package(){ 38,
! ~5 s1 s; S( P% \% \0 |375, 0, 0x16, 0},# f2 V$ l6 Y7 Q! s
5 \/ r. i7 d9 B
Package(){ 25,; ^  E% Y. H7 N; {- }4 h5 J
250, 0, 0x14, 0},8 ?+ A) j* P/ P0 N

7 u& U6 x3 `, `6 ^% g1 ~' }Package(){ 13,
7 h$ q+ F0 ]) D3 G125, 0, 0x12, 0}
, x2 Q7 l, a/ `
9 O  k, |: Y; Z* p# c) M4 J' n}
+ d) P# A) X" I9 P2 T  d
, q* Y3 E% B/ M- o' H" M9 d! ]8 j( w) S
l8 ]. s: P5 q' K+ O# \
_TPC8 B  U2 F$ M: c( _% Y

( G4 t+ }% ^! g% k# ?* B, s$ PThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states0表示支持所有的T-state1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC3 q8 }0 b' E9 i8 D" ~/ a

/ ^( {+ E' w, K4 Tl
! n" k% Y# h4 \
_TSD
' I. Q9 O/ ]5 T1 k % D2 d$ {) D1 L" }" ~" r: x
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code$ I" K! S! ?+ A

/ g8 N5 q, h4 D. yName (_TSD, Package() - \4 v. F7 |& \! g
' d3 g4 ?* O5 ]. z8 H4 ~# T# F
{
- ^8 P4 K0 X7 D  p8 R  P7 a- [/ b  ~4 [7 _( [
Package(){5, 0, 0, 0xFD, 2}
5 P2 _) M' ]1 W& O3 B  i0 c// 5 entries, Revision 0, Domain 0, OSPM 2 T( A' O0 a4 S* m
Coordinate, 2 Procs
7 C4 w( O9 l2 \* x2 `) l: O( w) l& Z) J* F& |
! O3 W- u+ E( r  ^3 Y- B( I
}) // End of _TSD object  K7 i: `0 ^, d/ O5 u% V" y
9 {  \; w, Z6 j# N  t! Y  V) Q
REFF:  @- ~3 X2 N8 w
1.! e9 V* j1 W" S4 O5 c
ACPI Spec 3.0
- Q% l/ l/ R3 G+ K2.
" E& S: u; ~- G3 B  s* W4 @- J5 m7 JIntel Processor vendor-Specific ACPI
9 ~$ L4 w- `: g5 C+ H# `- o " R5 u" r& Q) U& r- @- y: K

8 W5 l2 M9 @/ k. fThat’s all!
. v' ~# Z8 B. K
  \9 u8 X# J8 D$ hPeter
" T# R2 g! C6 a* [: |6 u# l8 H & V9 r5 c& ^. J3 m- I
2010/10/01
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2025-6-13 06:26 , Processed in 0.051802 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表