|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview. K, P5 o4 j. S) r6 m+ f
5 ]3 [8 L/ T$ g6 h9 {7 k# R4 l
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工作时间的占空比)的方式
2 T) a& Y& R" `& x: n& Y" F,影响系统的功耗和温度。
! I, x% L9 G3 O: o N
: D6 M% H, B9 {6 {& H4 M2. T-state Control- {2 a. b! V2 j0 G( R7 a
. n' t1 K0 L& J! F1 I1)7 n8 L0 @2 t+ ]
MSR Based Control
7 C% n) x7 a% q3 H 5 R4 E# S! ]/ U7 @, }
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 6 D* w; f* I3 S; g
$ A, e' ?* w, i* s9 a2)" }2 |9 [6 V# B5 a/ W
I/O Based Control" z. i r' |7 O0 f8 q/ G
" s* U2 m- j7 {
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
5 i6 k# u9 k3 L+ q- R % n7 R# }+ t! f/ T+ Y
3)8 ^/ j' d0 ^' X7 f
ACPI Structure For P-state6 }8 W* r$ O% G! A; T- P, D! d
l; W1 E" Z1 i: N4 q
_PTC
' [7 f& M" _6 ~" x6 P2 b5 h
: d( ]6 g, ]9 M4 u0 I ?Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:& ~6 C; f* I% I7 [* ~: ]; x
4 A# u! t F$ _7 l
Name (_PTC, Package()
1 O4 |0 X) v; p% H{ 7 Z( L! @# h* c* o T
/ V9 W/ h3 B/ AResourceTemplate(){Throttling_Control_Register},; k5 G- c' D+ q3 H# y
//Generic Register Descriptor 8 I' w7 E; ^. Y* ~3 S
7 B" Q0 _/ H, i" {3 V9 wResourceTemplate(){Throttling_Status_Register}
_+ d: w9 Q- L0 ^+ F: i7 @3 [* G//Generic Register Descriptor 1 ? Y. _% `& j7 s
}) // End of _PTC3 o% C6 F4 h) |7 ?
0 W1 L5 ?$ l% B/ g% K下述是一个sample code:+ ?3 b3 R1 f7 o G, t- ^! y2 x
7 a- ?% y0 P3 j' h3 Q( p# F
* P5 Z7 e5 ?4 u6 ]) o8 t//
$ G* d* R& d# h/ v
; z- {% i1 a" T& f, Y3 i6 U- m// T-State Control/Status interface
u3 H0 V: y: _ |% `; c6 W# H
6 I! B6 }( |; q# H% |2 e//
$ I3 h3 A3 B$ `* `6 E( S0 g/ d1 u! b/ R: B3 a: Z
Method(_PTC, 0)* C8 A, [4 R( Q
7 Y, u2 V6 X# e5 u1 `! J3 J% ?
{
' U/ T) M0 I: t- A, X( y u- b. r4 n8 u4 Z- Z3 ^' y) W. ?
//
3 s) G2 d+ ]' S1 C; o1 h( y" S, o4 X4 J: _
// IF OSPM is capable of direct access to MSR
& A/ Y) G# ~! c
$ B) S: _% e k+ {1 }: E3 T( d; Q* |! Z//# o9 k ~7 f- [" e
Report MSR interface4 m& H! a+ p% v0 W8 T' s' U- F
& a0 `- @! M2 A1 Y8 n- e// ELSE
* K! K. S i, \0 G$ |
, T5 h! B% @4 r* Q0 x//( @/ R Q+ k2 M7 p$ |7 F
Report I/O interface
5 M; B# ]* T; d6 I) {" |& T9 l
. j7 ?, {1 F! n( ^//
) e4 `8 k1 Q, w" L. i& y: F/ i: G/ K. D2 L
//' T! ~. b! a6 A; D9 P1 Q2 n, g2 F
PDCx[2] = OSPM is capable of direct access to On
. i9 Z" k0 @% p7 ^) b, H1 h6 N5 B% j8 Y; F# e
//
0 y3 f' W# r I ^Demand throttling MSR: Y2 e Q6 L! D. z' E3 a) {% Z7 w
+ r8 B8 |: A* i' M$ X- p//
2 {' v7 o4 R6 `3 w; ?! f( i
/ Z, L# b7 x$ C1 u: o5 C6 ~If(And(PDC0, 0x0004)) {
* m- \/ J+ B) S+ H3 }6 j
+ l4 _% P6 X, E9 ]Return(Package() {
% _$ I7 X# M7 L6 n: b$ i, s3 @
' ~/ X E0 K0 P) S0 E3 o2 Q' A& l: _ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},# x" A- ^5 d! z& F, p6 R
8 s. @/ R+ {' n+ k% Q4 f6 ?ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}+ h( r- W9 }- b4 S& Q, r5 y
9 [$ X. X0 n% l. U
})" `% [$ c6 i7 j4 P) \! G
( y) `6 A7 `6 }9 ?" N3 q}
; B5 _# {% \1 |6 }5 e" Z
% q3 ^) T$ m4 R. M0 q1 k. VReturn(Package() {* ^( K" P/ }* K: _* u8 o
/ ?% I3 V1 p8 ^+ n' G; ?
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},5 T; p! }8 u; s* I/ X
0 W) z6 z) r/ E4 W- O% K8 I
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}, {* q- _% T; p9 D8 m( ^4 n r
8 O) p- u% Q; a})) R* p% O' y5 |9 Z) M- t9 r9 G7 ]
& d0 G) F$ M8 H) l1 f% m3 E; d}
1 R% S9 O4 ?4 x$ S9 }/ a9 G+ a7 O5 S) u" O3 o) _
' @2 v& |3 ]" B, ?% E" {1 n
, U3 U( G# k4 b( ~
l
* L S/ ~) O6 v6 I# p- m5 m8 q3 W_TSS G: M; {8 t6 i9 D' F
! K1 [" Y# k& y9 ]1 {/ Y% QThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:& z4 v- t) ?! v' k( f8 W
Name (_TSS, Package()
" y7 F# W5 C2 b4 q# k. _{4 T2 M6 @1 i* k% C1 V
// Field Name
Q0 m8 M$ a, D) WField Type
; D) A7 P ]7 t" V) m0 Q0 ~) m7 e4 w# @1 I3 x3 l9 A
+ J. w: C! G; r$ Z) M3 N
" x+ A6 J. Q( G& Q k9 GPackage ()
) c9 C% v' t+ }9 a7 N// Throttle State 0 Definition – T0
x' T9 }, A( v( W: Y: p1 I$ H
- A* p/ p7 d/ ~) b{9 W: B' J4 l5 g! ~' V( U3 c& m
- G6 n, e* h6 X t1 |3 O
& K* P0 `' S: G# Y" I
FreqPercentageOfMaximum,; k" O8 F2 w3 t: B# D4 a1 h
// DWordConst
2 T) Q6 ~$ a7 C) _8 ]" w' J5 g% g9 }9 m3 z
Power,
8 u: X+ M% Y5 V+ [8 G1 l# l, U- w// DWordConst . Z# S* U4 ]7 ?& f# X% U
; a: W6 w1 m) a. {
TransitionLatency,
, X* U; X' {2 @' l6 [// DWordConst ( o( G# i: _+ {: O& U# J) Z* C
2 @0 B) f* h: O/ Z% l- vControl,6 y. F; \- O) f e9 s" E, V
// DWordConst
' P6 T1 x- D, n4 ?( u. i& I' y3 z1 ~7 n
Status5 f c1 Y. J8 K3 G0 W7 L T* Y
// DWordConst
3 d0 t+ A, o$ m5 ~},
7 }, c" x, |% ~+ t7 U! W+ g……
3 F+ n* B- ?) t6 {7 I7 V, w$ w+ }}
! r2 G' J6 c1 U; T# s8 Y y3 e+ L, Y+ O4 _5 m2 ]4 A
Example code 如下所示:
1 m2 l. m% W' e
+ t& i5 _9 D+ BMethod(_TSS, 0)) k, g5 F+ c: K; F, ~
4 W( v& x: K/ _, d{ Z$ r5 S% b {' l% p
" p: m( t, `3 } JPackage(){100, 1000, 0, 0x00, 0},. i$ [" i3 t7 Z' @, i" I' r& l1 b3 T
' r( ~! \2 m4 r0 @3 ~Package(){ 88, ^0 b7 o% z* K
875, 0, 0x1E, 0},6 K$ V8 I. D% i4 @
w% Y3 a5 ^! T+ sPackage(){ 75,
# g' W$ t9 d% |/ T( D9 ]* T7 u750, 0, 0x1C, 0},4 w( z3 }, ^5 {0 Q
/ \- ~5 T0 ^" p! `. d7 g2 G% M4 O }Package(){ 63,
- h, b8 U$ R- p9 o0 x; |7 m625, 0, 0x1A, 0},
. O1 ~/ ?0 m. t& t: R2 o- n
1 R0 P) v* D+ C5 A, mPackage(){ 50,( q# q* ~7 X4 f" P; ^" P
500, 0, 0x18, 0},
! W' B9 _& w0 J" A& Z- ?
* p3 f3 H3 K, b* \) f( {' ePackage(){ 38,/ T- h0 O. p2 A! S; S: J
375, 0, 0x16, 0},
1 S% p4 _% _( x% ^. c/ h `
3 |7 r4 S. t7 O# d5 LPackage(){ 25,
* Y+ s8 ~1 ]+ j3 H9 ] a250, 0, 0x14, 0},
: \% B" Q: T" M% h: t* b3 m5 o. M! i
Package(){ 13,. D$ b. \% j' J
125, 0, 0x12, 0}, D& e# I8 J9 T) P5 ?9 p
# L" U) k3 Y. i4 s. B. n}
* u4 c# p) Y l9 q' t
8 Y8 p9 `1 h, U4 m) h( s$ E% |' Y: t" A: n
l
7 H( [, K# S X& G_TPC
8 l3 T9 V6 [; C9 l* s7 H
0 M% k1 R; i5 C1 {9 tThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
" X- s" m: c7 W3 p1 X& x$ C . ]& [% Z4 M# r9 H: B* E
l
* m( v8 ?# r) ]8 M) [$ A_TSD
1 C, D! C+ p4 ]. X) a
) L, \9 q5 Q) k1 {* kT-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
# s( C8 \; [$ }
2 h6 W0 \, P- A0 t s* \& kName (_TSD, Package()
/ V: H! n5 n t# }5 D; d6 s8 n9 _, o
{
& [9 C8 S, _$ R* w( ~7 ~
/ j. M+ m6 Y2 T: J3 i7 ~0 a7 c% qPackage(){5, 0, 0, 0xFD, 2}
, V, ?! l; \3 G( }0 H" i4 k// 5 entries, Revision 0, Domain 0, OSPM o5 l) @3 |/ y. O
Coordinate, 2 Procs
}% B0 q" _: B$ \2 |' [
1 p& K% O% Y+ x' x* b
# D, `; V J) w1 t}) // End of _TSD object; @9 w, ?2 R v! g5 h5 S
- t+ E, L+ U) ]$ g. s' T* E4 IREFF:/ J4 ^# j" f+ b! Z1 k
1.
8 Z4 e: K G4 {, i6 L! h2 SACPI Spec 3.0
9 E- W& s1 k# o7 N" t2.
* b- S* r+ Y% [7 fIntel Processor vendor-Specific ACPI
; F5 X7 `- U3 h6 r& T6 X! ^
' U1 v2 \# q* t1 |3 W! }! l : U6 [0 ~1 J& U3 N5 |$ ^
That’s all!
4 |' N: G" r* d( j0 c& _" | ( `' K s, L3 C( L4 J! M1 V
Peter
+ D! ~* A$ N4 n. B
0 i- Y1 g! y* k4 A% i2010/10/01 |
|