|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview! r+ [, ?+ S- w3 z
6 _4 G9 H2 y' [* M+ x) _ G1 N! y, v% JCPU在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工作时间的占空比)的方式
% Y" m- _0 F, t1 O/ R,影响系统的功耗和温度。
1 r5 \+ t% k# T# ^+ T9 A% X ( r# m! U# }$ T- D" F2 t
2. T-state Control
$ E X+ h$ ~( b7 f+ C% n 4 w' d( o- N' s- R/ Q# L, l
1)) [, H( H( w; s7 ?% Y& c6 t
MSR Based Control2 b- x& @. v5 w) e% n: [
: T- h; }+ |! T/ \/ A: fBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 4 q5 K" N5 M; H6 v; `8 a3 Z: P
& j f6 R2 c, @. D, ]2)' e$ ^" D/ l1 T3 g; R: ?
I/O Based Control1 W5 y% B G; ~2 V4 h/ G
y: d7 y; `+ k C8 ?2 Y6 m除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。5 }# B. q! e" h
- H' ]8 _+ _+ S* c3)
$ ]* w3 q2 y* w" L5 s h8 [7 AACPI Structure For P-state+ q& ]! x+ A* p3 a5 W
l% z' V; c; e6 ^; G1 f- G9 e
_PTC: Q+ L+ M( `; f1 K* W) j0 i' {2 k0 a
* n+ a$ t/ G( jProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:) A6 U; @% l5 c
3 F I3 A, k; r. UName (_PTC, Package()
# I' w0 r {$ t{
7 `% j' [* ]4 ~( S. \& r: Y/ x
ResourceTemplate(){Throttling_Control_Register},
8 w1 G" l% w1 _* h b) w//Generic Register Descriptor / d1 v6 L) T! s/ n9 X- [" a1 s
6 z7 i$ F$ ^3 V! E. H5 m# l, QResourceTemplate(){Throttling_Status_Register}
8 I1 e3 r$ V- ]/ B2 n: q) U//Generic Register Descriptor
+ w' F0 R% w& R7 u7 F h( j}) // End of _PTC, s- v) e2 w* z' n) m/ ]3 \
! [! L9 W4 z, Z* Z6 m# ]9 H
下述是一个sample code:
2 p0 v# a( Z8 ]0 c2 s0 \0 e2 ~9 x5 h
3 c) y5 s, E5 G! [3 @2 Z$ `- j8 Z7 E$ M+ k- {
//
. ^. ?1 V: t0 w7 ]8 s- Z! U! l2 x2 V4 E; p% Q* P
// T-State Control/Status interface6 R6 e9 X8 |6 s9 i
. e, ^/ d2 Q0 x5 Q6 i
//+ m* f" L9 E; A3 w: D! U
; {4 d! r* {$ d4 ]. O1 E* zMethod(_PTC, 0)
, s( [. M/ G* z2 X/ p# g, E% n" {+ l
{
$ m; ?) g' A; N9 q' ]5 d+ ?6 i
; U0 d9 c7 g$ O* r, H( n//
- O C. H0 N( B! ~- w7 O0 e) ~: A: M0 N" h( ]
// IF OSPM is capable of direct access to MSR* y/ C2 Z z* T
, B. O- B- n% B. N9 I
//9 h5 ~. y9 }( K5 J/ p
Report MSR interface
1 g7 h' r; S- V7 i
7 Z s! Y- i- f: A// ELSE( f8 O* }& B% N4 r
/ E# p# r0 E. k6 r( u/ \8 c* Y//
0 z; U% [( M- U; m0 y9 CReport I/O interface- h% f; h: ]' C: y: E
: q/ V. A. z. L, G0 s/ C& `' A//
5 b- s4 J4 p5 Y0 g; @/ S/ p$ p
//
9 H. q3 q6 ~9 O) mPDCx[2] = OSPM is capable of direct access to On
2 K/ i* G( y, {* @$ \) ? H6 v- i
" o; U8 E! T- r//
& B) W+ c. X) @! SDemand throttling MSR
( E" D& F8 k/ c* Z$ F: O% n0 C3 e: ]/ S. ]$ K
//
) f* u( f) f/ T* J2 @! f$ c$ X# `8 U: @9 }% U* H: }5 D
If(And(PDC0, 0x0004)) {
& T8 f4 s! c a; _# H4 R8 h1 j1 c& m2 L
Return(Package() {
# h2 |6 L& B2 o9 m# n5 y( Q1 N9 H2 p8 b9 k7 a) R
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},2 T2 f2 \5 C$ W% ` U
* N- Z; v* }6 `( r
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
7 _) V4 S! g8 V% u q
5 \6 Z( g1 j% {* z7 Y}) o7 N- t6 V& S( u! e3 H
; G) \( e* B1 r3 C( _3 d+ N
}
h7 r+ i \& ~6 G
: L ]) O; Z; D/ C. q. KReturn(Package() {- C% p% W! o' _. x2 ]
% o4 G/ x* J- Z( C
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
6 k+ g9 w7 u/ @, _# @! Q- B2 R! a( n9 q; l7 R
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}% m/ X3 o8 U- \. R* ~9 U7 h
6 u" n/ F' ~" B})5 h+ b: o9 s4 I" k. K5 l
9 q" G7 @" s$ W5 Z, H" M2 N} ^/ J1 W6 M, j1 n
6 j0 i$ s# ^# I: Q# E9 b/ v/ G: B6 d- V) V
: k' i7 _8 X9 I! z# ]l
1 ^/ T) `1 T/ s/ y) D: ^% ]_TSS
, E# z' W" \8 b$ d4 O+ A: I2 ^( P
% e/ n7 y E9 m& u( X) F" y+ k6 _Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
9 j9 L. {* k0 u. T# w% lName (_TSS, Package()
2 w! {. q# r2 o) V9 v, j{
% \. F7 L3 z9 S3 y7 {// Field Name
0 r/ v: ~; v" Y- tField Type 0 c% |- q/ m( P4 W, u
3 p1 a% J8 a! w i; A& F* m& s( t: j0 Z
$ L, R; B. o/ u1 Z7 iPackage (): H; ~1 w+ _3 I+ [0 A" T
// Throttle State 0 Definition – T0 ( O0 x5 h& X0 [$ }* w5 K
6 C# E0 @9 Z2 E' ~2 G4 D0 E
{
+ P7 _2 q8 N7 d! f4 \- z9 u
4 K- Z2 v' E, ]* u/ l& f1 a3 b8 D. b/ A+ H
FreqPercentageOfMaximum,% \: V, X8 k. A1 m( ^
// DWordConst
q4 }0 o/ n% A( |9 H" V0 f7 p. a' C7 K; j5 A
Power,
, P+ R% k+ a( n* L; |// DWordConst
& r, D: h' L( |$ ^" |4 A# I l/ k( |1 m. @- T S, ~
TransitionLatency,# ?( _1 y4 A! S8 O8 B
// DWordConst
3 U" j4 o" \1 L+ f0 n0 \
' b5 v! c5 S% i- v s7 ]6 T2 YControl,
" @3 C' d* a8 l$ ~! N6 R7 F* J- ?// DWordConst
l# c$ I5 c8 Z' u- d6 p2 R4 X4 _$ A$ R6 l8 o9 x
Status m$ Z9 p' s& F# F3 Y' B7 v z$ c
// DWordConst 8 ]6 _+ y) H! N) e f" V
},
3 |2 g/ h, d; Q……) z3 Z- x9 H9 m" E4 N, ?: e
}
. u9 G8 o6 G5 f2 k1 b6 l; Z1 }- W! K9 b7 o. x
Example code 如下所示:
1 j' o* s; E9 V" s I6 E' m% u4 ~5 R# r
Method(_TSS, 0)- s4 o! q% }8 F
+ m4 T) N( L* a0 k6 t) L5 k; D- x4 `{7 A3 Y. c, V& r3 h7 X3 J
6 J6 x$ q, b6 ^% v0 LPackage(){100, 1000, 0, 0x00, 0},+ v3 W, `! ~/ u% _
+ T) Q! D Z1 O% aPackage(){ 88,- \5 {, J* w. N: y) x) T4 z
875, 0, 0x1E, 0},
5 Y) _5 ~, Q: `& k
: w" H4 T6 z. J5 F% B! z. I/ R# zPackage(){ 75,( N$ |7 y( {; h0 R h& {: o6 o
750, 0, 0x1C, 0},
: @9 `# r: `7 j& c8 ^% r3 t- Q
4 f& B- S. |& j) g: fPackage(){ 63,6 [5 |. U: f* |5 J
625, 0, 0x1A, 0},
! E! i4 f( u7 r9 C. M! f/ ` C
/ V$ _7 c! D; K" k6 g% k9 n ZPackage(){ 50,
# L5 a5 p, `9 Y0 s1 s" D500, 0, 0x18, 0},, {' P& f1 A1 B4 L" I
2 Y8 {1 ^% ]. U! h0 P! b" TPackage(){ 38,
2 Z( |4 J! j/ U& v! H9 \4 i+ i* D375, 0, 0x16, 0},
7 ]) Q5 D. g- E5 s2 o2 L; Y0 t( k4 j" f m* Z a
Package(){ 25,/ h! m4 Z5 q$ d6 S# h9 {6 ]
250, 0, 0x14, 0},
) ?* c: N L3 P) L( Y% e: m/ C6 U% { }7 s" W+ q8 t) t+ P) _6 K
Package(){ 13,+ R: R1 C. R4 R" @
125, 0, 0x12, 0}
2 d, B7 b' n7 }5 r3 z* B5 g; V4 k. ~ x" j# O- C, d/ r
}: J7 X6 _/ F6 @, L1 W7 u, o; W
( v' M( W1 F! B
6 y5 x, s4 `, a, \& Rl
4 n* G) X# ~: ^* V I P; w; _0 o! q3 W_TPC9 p5 [% [) l1 C. {
6 U. E" o) u( @$ aThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
) j& Q) t+ V! k$ v' f8 i6 ~
' H- ]8 s, A0 u8 a; dl
% W; g# l# h) {2 z9 ?0 h$ a! R_TSD7 W( a/ p; M, Q& q1 k& u
3 i6 X; b$ _1 b3 T& ?
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:) i% q' U0 A+ J* Z
Q g8 s$ k8 K U* VName (_TSD, Package()
6 O3 E+ Z$ y6 L3 H
& L i# w4 I- G; T1 S{ 5 h4 V* W0 N7 h0 o
$ [# C' P4 G# c, s% U6 q5 |# k
Package(){5, 0, 0, 0xFD, 2}- Y% G: H9 y: i. H9 g) q
// 5 entries, Revision 0, Domain 0, OSPM ; L- E) j7 E9 }- P7 X
Coordinate, 2 Procs 9 a, n C& g6 d# T
r# F% m8 C& q
: O! H( c7 p) k" q+ u. a* h# Z}) // End of _TSD object& b5 E% d; x- f
3 O" ~" f ~ P' Q- t
REFF:
$ p5 k8 S, H9 r: y1 l. ]1.
3 Q7 S8 u& a. y+ @$ hACPI Spec 3.0
) }, h. N' U6 s" q7 ]# {7 W2.
- s: |2 _6 m; Y- x; CIntel Processor vendor-Specific ACPI" t" k0 }1 o Q/ Y% `' l$ u
* o F1 ]3 `' i, M* h3 d
4 C0 K. `% }8 L4 G
That’s all!
: v0 X. D* h6 O1 ?2 `
+ U) B I( @; y& ?" {9 c' BPeter) A: H* @8 [& ^# c
; Q. u! e5 q: O! l6 T7 M
2010/10/01 |
|