|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview8 H" r) @0 a/ C
" R$ T; M; V0 k7 b6 }! b: d
CPU在C0状态下有两种手段降低功耗的方法,其一是之前介绍过的P-state,另一个就是T-state。T-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工作时间的占空比)的方式' C0 Z5 N0 k5 w3 B8 ?; n% q. t
,影响系统的功耗和温度。3 @. }% y& ^! a9 Q; W! K L- y; S
$ [1 W; O, s' c. Y: r2. T-state Control8 e% S( | P) W: Y; \9 N, ^
% Z/ U/ ?8 O$ u( \3 T" @
1)
* v+ `. [2 K( _) BMSR Based Control
# e9 D# ?8 P& y$ o) w
+ J N! ~/ {; P* oBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
; R: a: i. [& i
5 K. {1 b1 W [2 _3 W2), ~3 P. a& ^9 G2 m8 C7 q1 P6 l
I/O Based Control
8 `4 s9 Q0 C O- D6 Y2 X : [$ ]2 {: T" t8 I; V
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。: Q8 Y7 J$ K, e- l% c; i# N0 U
% s$ O, q. K7 T/ m
3)+ @/ @; J. D! i$ w/ V" D4 F% R
ACPI Structure For P-state
! |( S! e" \/ l) vl
. v6 a3 g1 n+ l( j5 H_PTC; e- E, z3 y8 X" q% E+ e
" a, ^* Z% U/ j! {# qProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:) _, _9 x9 p) t8 D
( K+ f) V8 t7 y) U
Name (_PTC, Package()
) p! C) x# U# N+ y{ : |3 `/ N3 T6 y' C! \" v- K$ f- ?
/ w# b- ~- f- E3 kResourceTemplate(){Throttling_Control_Register},
/ e& w5 ~& R7 [& {% Z//Generic Register Descriptor
! y6 |: p( R; U/ g6 {! S: P! R# B' m3 r, V
ResourceTemplate(){Throttling_Status_Register}
1 K$ q& e! |0 g1 v//Generic Register Descriptor
0 g0 A7 i( N0 N* @}) // End of _PTC
* R# P' S/ |. i' L( B. H
, |0 S+ T* p' x9 m下述是一个sample code:7 I' c& i* G) g' z5 R( o- @
4 D& v+ g3 I, p. D2 W" C% S8 F, i, n# m' }9 @ \2 ?2 q
//
8 n/ V/ g9 K1 Y: K: W! K: T' R. `) W y- i/ ?1 l
// T-State Control/Status interface1 G4 P0 m4 L3 K
. b8 L/ m& |, n$ c- B
//
- W. {' r( c6 ^# N+ K3 r! X9 q0 ~3 n7 g# @+ \! j% F
Method(_PTC, 0)8 m5 D0 q4 J! Q) S) b4 {7 W* |
! {5 K/ H; a; t1 F
{
* v' N1 N) ?4 Z, E2 L5 k0 ]
$ K. _+ V% D) `6 T//% E o% M! C( i* a; N6 Z$ A+ O! Z
- [4 i! n. J% [* e* E0 z% `
// IF OSPM is capable of direct access to MSR9 Q) d3 ~& m2 b& _; n
8 B& P% R8 H; W/ s z7 P0 m
//8 H% Z# G6 K" a( v: k, b' |
Report MSR interface% i+ B0 U6 x- v
" O5 W9 A$ b$ ^% B6 R. h/ K
// ELSE4 n; I. m" Q* ]9 v5 @ }6 E
; s* G: r+ r5 {
//
/ |: z k) V1 T3 b0 rReport I/O interface
: I. B1 c3 Y9 }+ G( O8 R
: w+ i. S- U6 B/ n# w7 u//- ?$ i% {- b1 @2 [( x
6 e6 i1 c0 V+ ]//
/ {/ y4 l1 p/ ^: ^$ d! \9 g# a, BPDCx[2] = OSPM is capable of direct access to On
$ o, k' T3 }( s) B) F2 r4 l9 v" O" d+ M- C2 O0 h
//0 c' R5 i5 P/ @: d3 S: L
Demand throttling MSR
0 g) I" L# e% ?6 d" y: U0 j d5 n, O3 i6 s% n
//4 I$ q' o6 \* K8 v; ? e# c
+ Z- S: x \7 K" t9 }If(And(PDC0, 0x0004)) {) T2 T- o @7 c
3 Y, c% C* }9 J% \/ K
Return(Package() {
& `5 b8 x! }4 M: N
W* z u3 d! p- f! d, d- a: KResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
8 v2 D/ u f/ y1 N' O5 ^
+ ]1 p4 P/ K- bResourceTemplate(){Register(FFixedHW, 0, 0, 0)}/ A9 q2 @' `0 U [; P$ W& t, N5 B1 v
3 w3 c: t) {/ d' c
})! {: ?2 F' K: f" H/ [
7 O+ g8 v* W, l, M} p- b* S" l+ L# e o% G
- |: z& K, v3 l1 Q3 [' t3 d' {" S' q4 W: cReturn(Package() {6 I+ |8 Z8 d: F `
8 } s" x- X1 X
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},. g! R1 a8 J7 }: u" e$ N8 I
4 j$ b% Y9 _; \
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}2 I$ z9 E3 C1 k) N. E
7 ^: ?( C1 M# M, |$ W# q})
( |/ g2 Z/ N2 e3 l# D. z# g: w: R# G8 s9 ?% b3 F/ l
}
$ g+ w" J! ~# T) Q7 ?7 `" v }3 E% a" D
: c( K, o9 f- y T! R. N
5 j* @2 K5 e' U; ul
+ m9 [) ^$ O& H3 u8 x3 a5 d_TSS" h+ s6 r% w8 w6 t
& `; c) L4 n" c, ^# @5 ~( t
Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
: Y2 v" x" t5 z3 @8 G! y8 wName (_TSS, Package() 7 u" z6 j1 i' c: E, d; }) v) r
{* L3 Z% b! E- N) M
// Field Name
6 n: B! B7 _2 q. j0 N* G1 s! D# U; bField Type
8 O# r& d% \+ K7 {6 W$ Z, o0 n; F4 F5 a* R6 r. L
0 i& ^4 J0 ?9 w9 s
- ] s. _* \* H. }Package ()" y, c) j& Y. G- A, R0 F
// Throttle State 0 Definition – T0 0 v! U! J2 g t' ?! R5 A8 d" _+ [6 _( J
, W$ @: L6 _& y' I6 t% N! D% P# J
{0 S* ~9 V% d9 b- E
! t# T5 @9 T; z; k# ?2 o
# z: l3 Z) t# x$ T7 \FreqPercentageOfMaximum,9 X, q" M9 `; L) J/ l0 Y7 V- `
// DWordConst
0 J u( M8 H! X# e" ^& ]& a( w: w7 K% b1 C" W$ h7 M3 G) ]
Power,) a* c- D& `/ A: k1 C' W
// DWordConst % U, c% t9 l9 K% L9 \
# B0 f, k Y! u% X) N
TransitionLatency,
/ D( V- o% t. T7 u; n// DWordConst
5 S5 L4 e" w4 |" P% E/ w r) e! j) \+ M) X
Control,. k( e+ Z. e3 v; W8 u
// DWordConst ; g% ]% `/ \9 t4 W
0 Q8 a& T! t l. G$ I4 a
Status! F: k7 J% U& t s# Z, S: w2 |. s
// DWordConst
& D% B! v4 Y5 k},. D- m4 P4 ?* m Z2 q
……
6 _. h0 t6 t& n}2 R% n: C9 E4 B+ ]* U
. U8 E8 @: g1 m" j$ w9 v
Example code 如下所示:% f: n( b7 @7 X
& a- t; _: \& P) m- r( dMethod(_TSS, 0)
7 Y% o2 Y( s* J; r
3 ^3 v9 C8 K j- G& W1 V2 w/ ^{; ~5 y$ K, c; e0 [9 h4 Q- U
6 p/ S+ P4 K3 z3 U+ \6 ?' P
Package(){100, 1000, 0, 0x00, 0},: s* }3 N& F/ o5 O. P
" x* h8 E+ z5 e6 P
Package(){ 88," H. W4 r8 \( b9 i. q. r0 U
875, 0, 0x1E, 0},
/ L) P4 U3 J7 z6 s/ S
4 g) L: G! Z3 L! ZPackage(){ 75,
3 z0 v+ W3 t$ B( d x+ h5 ^8 {! G750, 0, 0x1C, 0},$ J) | N# k- V1 I' e) B. x+ Y
1 l; N8 K5 `+ o# k
Package(){ 63,
[: ~8 I7 o) w7 o, D5 k* E625, 0, 0x1A, 0},
2 J% S P. z0 L% x z5 U" m4 x) d
% R% N# N9 |: g0 T* g5 iPackage(){ 50,
0 @$ y( D( V: O: R- ^500, 0, 0x18, 0},
0 H0 t0 H5 y% \! y! Q/ S' @: E, U w) v) P# T1 Q4 p0 i1 j
Package(){ 38,
( L$ \; P) g1 L2 [# M' k: v6 f5 u) h375, 0, 0x16, 0},
& p1 E; v' {$ u2 {4 k2 A1 j
* c3 {5 {; f$ E. jPackage(){ 25,
2 B, p& E1 e( G0 s7 H" @, V250, 0, 0x14, 0},
' R# I" R" L1 k! r4 n
* O. w) X0 c$ N6 Z. DPackage(){ 13,$ ?" I* R3 \9 J6 R8 g" H
125, 0, 0x12, 0}! k+ K8 }/ l- Y4 Q
" b6 Q! h6 N# Z* i
}
6 {! y1 O4 V# f4 |
( N" s, Q4 J) C' C4 V3 s, x% c. p3 L; j- [+ ^1 T
l! [! P' x* o& {3 e
_TPC7 X! w8 c: B# Y" O3 w
% F+ C) l5 q) `2 C7 G1 m. _; oThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
& J$ V3 t, I- I3 T4 _
( P+ d/ t( [) l$ }5 u7 B& h: Gl! c# y: R4 z7 p4 U9 Z
_TSD
X k: a0 a j3 p
8 N! T2 L# c, \T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
8 \, _* r- A- y) I9 m
5 n0 E# a) N D9 n/ Y0 vName (_TSD, Package()
6 _( N& x! @" r- D5 }
( t, l W8 i s3 `# O! w) }{ 9 E6 K `; q) R1 m0 K
2 e. ^8 T0 a' |" i6 C
Package(){5, 0, 0, 0xFD, 2}
$ B$ d9 E2 ]# o1 ]// 5 entries, Revision 0, Domain 0, OSPM
- V% Z2 ^. i$ C% ~1 }+ j2 T* vCoordinate, 2 Procs & ~3 O) `% ?2 q* d$ |
) n( H$ {! }( W! ^6 k( n6 I8 ~+ x8 n" p- _1 p' y1 ^5 U5 l; T
}) // End of _TSD object. S6 \; H0 j6 n& c w0 P" j
$ }1 V: h. b) i8 HREFF:
, Q7 [4 L$ ]( j6 C3 E1.; Y& ^! x8 x- p: ^( j
ACPI Spec 3.0& Z" C g! ^, q1 a5 o( Z" T6 {& r
2.4 M4 e8 g5 x0 a+ _; m- d7 i
Intel Processor vendor-Specific ACPI
, {) v G* O5 M* x/ w- }7 i6 [ + B% H, m) B6 ~1 j) G
8 S! X; [ l/ ?) Y' D
That’s all!
+ |4 b4 c( a, F" ]) Y; P + k) N/ p9 X/ s. s, P
Peter1 K+ ^5 ^4 f5 n6 W; D
! e r6 _3 q U; F6 M& G
2010/10/01 |
|