|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview9 q. H8 q2 J5 c& `* k& H* c% X
* G+ n% f1 n1 A' t
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工作时间的占空比)的方式
' W ~7 a- J. s5 d- y4 W; q0 j,影响系统的功耗和温度。
, b4 O$ w. w8 h+ t 0 u; E0 A% r3 c A' E
2. T-state Control
) a# [7 \0 R, p9 o/ D8 S) Z
0 c" f& B8 A) n1)
$ G9 F5 U2 _' U) V2 K9 qMSR Based Control2 ^3 d' U+ z- g- M: P
b6 k8 H9 @+ `& `
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 ( |* e) G/ j! C5 H
. t2 z0 z5 U9 r! {5 U2)" d3 U; ^/ T6 H' v
I/O Based Control2 ?' V% ~! c n" O, N
0 [. U4 q' s( b |/ c
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
y c9 G" I( s0 t6 r " Z6 @3 t1 W3 Y( O$ O2 P$ N9 S9 s
3)
* z; F, B2 p5 u+ i- n! RACPI Structure For P-state! x3 C5 v; F% h
l9 Y- m% m: L- L+ t! P
_PTC9 f2 h+ ?* d. p1 b P4 u7 C
$ J0 B2 H- \# p
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:8 }5 F; u* e6 M
5 p+ v( u* m/ [9 _8 c) }
Name (_PTC, Package() }1 N) B- d4 n8 n2 {2 g: Z
{
$ x* e6 t5 S) \2 [' z2 @0 h6 v6 l5 e0 Z! B% g# d
ResourceTemplate(){Throttling_Control_Register}," I+ q6 J" k0 t/ ~1 b, W) D
//Generic Register Descriptor 3 f6 l5 D2 O9 ^2 Y! m5 T! G0 ^
' O& C" G" N+ i% O3 DResourceTemplate(){Throttling_Status_Register}
8 G. Z, @% I5 L8 m$ E9 P; d9 \//Generic Register Descriptor 1 z5 i) P4 F4 e% `. D# k
}) // End of _PTC. F+ V, o4 M9 t6 ]6 W" s
' ~. I* c% T ^
下述是一个sample code:/ K" }% u( Y6 W2 T
1 ?/ H: b3 H9 }/ f
9 @4 [( N& c( ]& D% u4 F7 N* @' {# x//5 W g$ h" Q! X- e2 |+ K
0 g8 J8 b% w5 o
// T-State Control/Status interface5 L* G( e6 j/ y+ D" }) @( ^
9 G3 \* g y$ r
//4 g+ O4 m, _: i9 N1 W. ~" d
. V, y" z. W- {
Method(_PTC, 0)
9 p$ F( F7 {9 q5 V% a9 P
) h \ \: H2 _3 i0 }{* g/ N0 M7 Q; y2 p! `; k% l
9 h' N+ \1 R' f2 o2 s0 U// A! g7 H& I& f) D" K/ D1 Z6 ]
2 V$ P" {0 F1 F2 l2 T! b$ F// IF OSPM is capable of direct access to MSR# H) ]8 ~4 V+ j
. n' w9 m+ W- X
//
# T& W4 W3 L# s8 LReport MSR interface+ p4 k5 D4 x1 Z- ?, n+ [/ p |. V
. L+ z3 a8 t+ A6 Q- h. G
// ELSE
" v* E3 F/ w( }3 c! ]+ p6 M4 T
# A! M% D6 M/ n K9 y$ a" b) B//
% j7 s$ J( K# ]. q2 q U C0 cReport I/O interface
9 F0 c I' X1 ~( u
8 M$ l0 f2 T( e/ B5 [) P//; s2 h' s9 K9 q9 H; ?. [4 A
0 k( @6 m; t& O: }% K- i; g//
9 y2 A" I$ ^. x2 e# o! G. m4 Y% FPDCx[2] = OSPM is capable of direct access to On
4 o; n: U' p$ z' Q7 K2 |: L
3 u% P( B4 _# I1 E//4 H/ K2 O$ @% \1 N' s) }, K+ H9 J
Demand throttling MSR
$ M, o( W0 p* b4 W
7 ]6 I0 H5 w: S. V/// ~& m, _. v! q9 u7 E7 m
+ L5 z) ?% h) s8 u9 u0 g
If(And(PDC0, 0x0004)) {! Z" B8 D8 _) H" d
8 k5 A8 t3 D8 T! i, f' Q
Return(Package() {
0 b( _5 E. q( a r7 P8 U/ w% W( {9 \& ` v0 q
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},$ q, T: w$ I6 s8 [% h
( q+ V! y) z. T7 o1 T/ C
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}7 f) v% C7 P- w8 @9 A. C0 J1 ]
w1 W, L- s/ w8 o7 d& }) O$ ?
})* z, M9 L7 H5 d5 I- A
. h9 i( p6 A k0 i/ Z7 B9 ?: i}$ E7 \% m; U4 q
- D* K6 W5 H* T2 o3 W* {3 k
Return(Package() {' A! ]5 i& F" E( a# g; N
5 ?" }7 v0 Z% g4 L5 aResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
' N2 ^& Z! N5 d- y4 L, z4 o, s: l3 q3 l# R5 e a
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}* x* Q. Q! W& i5 X0 m' u, o x( H
6 c( k# U# x# q
})
1 Z0 \& s( t' Z2 q
7 {' I/ { }0 g6 `4 \% z$ s}
4 T% w' [1 G! R1 O h5 \+ r; r6 [7 A a d/ k3 ]" \8 |
9 `2 i5 t9 F }5 T* Z: {+ Z5 k1 x
6 o' I+ s% A6 E1 g `" I nl
& D# I0 x4 i& H, Q* _2 z' F: K1 G# G_TSS4 w8 E2 P* @* m1 F
5 v8 u, ~) B, A! ~Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
5 t$ Z2 s; i+ m2 x2 bName (_TSS, Package() 8 P. [) u' g* w Y2 p
{
7 J$ Q: _! Q+ b3 Z; v! P" t// Field Name+ V* D6 w6 u- p
Field Type
0 H: [& k. k( q$ i$ l, I+ _3 X5 e( `# h9 Y9 T
* O3 G* F9 B$ ^2 e" ]" e% G9 }9 r5 B. e( k) Y5 e6 c6 A' z2 ?
Package ()1 J# p1 D! L; }& J, p. x* N" o
// Throttle State 0 Definition – T0 4 m3 a8 g+ C! [$ v6 D5 q$ B- K3 ~7 z, n. `
$ c' C. y7 a1 Z4 H0 E) J r{& e3 C4 Z8 P# V( v
3 n1 a9 e2 H% C7 ^- L, x. L) o' N' B. L- x# j+ k( j/ c8 w
FreqPercentageOfMaximum,5 M; i5 t! ^" T+ X
// DWordConst
& H$ L8 {" Q' {$ o7 U) E4 N/ r3 k s3 d8 M
Power,6 ]/ s/ k& W8 x* s( Z, a2 S1 y' d
// DWordConst
. y6 L3 ]* D$ B8 S1 s2 h
4 k& N4 y& K; A% kTransitionLatency,
' i' |7 z8 O/ j ~2 b' ~, G9 O// DWordConst . j# z3 e+ ^+ Y" r6 R- C
' Q1 G. u2 }3 GControl,9 \4 x1 E; y' Z6 b# m' Y
// DWordConst
/ z* w7 ^. v6 z, v! Q5 `
& E+ X$ ?% Q% A @# ~. KStatus" Z- J2 n2 C; b) }4 u
// DWordConst & u- j* F' A3 p3 m
},, g; l3 [% F) C) Q$ U- \( m
……
6 _5 {# A. ~, E7 x}& S0 \ L$ }7 u$ G D4 v/ y! E' \8 g% j
, f: C0 }6 `2 y: m8 t9 R% O. O
Example code 如下所示:
& L- V3 W# b3 r- E$ z% ~9 C7 e, d/ e( \! j6 t z- _9 ]1 ?: T4 k
Method(_TSS, 0)& r$ h; a# j7 S0 N0 F
2 n! f$ A$ o/ d8 n/ t. N{
( w; W; ~' Z" A# [2 [4 e& M8 q0 c1 j, F1 q5 p6 t2 F
Package(){100, 1000, 0, 0x00, 0},
8 x6 Z% o' X; h
# }) \8 v7 Z/ o7 _5 ZPackage(){ 88,
$ S; p1 X6 \) v1 p8 l& ?/ ^875, 0, 0x1E, 0},1 {5 Q% a6 @* G1 O) t/ @
6 A q$ C: k9 VPackage(){ 75,0 G. a( E2 g2 _& T8 x9 P8 ~4 v
750, 0, 0x1C, 0},3 ~- w3 b1 j3 o% n( b. D* ^6 Y! u
9 S% C9 v# X! w0 ?- cPackage(){ 63,
) J* Q6 S. \( w0 @2 \- O625, 0, 0x1A, 0},
# h9 S8 b' m+ `& p% `( o0 c4 ?3 b7 ~% y$ @* S( t# ?0 B" k
Package(){ 50,' m+ n! P: h+ V4 L" ^
500, 0, 0x18, 0},( u. x, I0 d/ q4 o
% D5 ]0 X* U; O5 H# q
Package(){ 38,4 S9 M7 c8 }0 s8 `) w$ T& }' K/ i
375, 0, 0x16, 0},
/ n$ M% b" a" m' A
4 q+ [1 p. o M; HPackage(){ 25,0 k, T: m( l2 y+ ^% t" \
250, 0, 0x14, 0},
# |3 L# N" H( Z1 X# Y! B7 P6 _% H0 v
3 ^7 k4 f& T1 p: J" E" e2 IPackage(){ 13,4 d% z3 U2 G$ S; `2 O5 }: i
125, 0, 0x12, 0}
7 `4 ?# r! s" _/ `, k2 b8 C. A1 g! J9 F" H. g5 v3 x0 g
}
. S( B; r) `1 d: G/ F4 j3 S8 y0 s0 ]+ J. n- M. N3 g
9 u, P2 d @8 u+ e% C3 q5 Sl
* N( G, Y% t6 U7 ?9 X, g_TPC
0 o& P! y6 c g8 ?" h7 `! P9 O3 e, ?$ y+ G
! {7 X( e3 P8 _( `/ hThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
+ j- a$ g+ y! M. L
; T* b- e' F& f5 a! m% hl
3 H5 x6 C4 h. j5 l: b_TSD5 ~3 `' F6 V _$ P- J* F. V; ?
2 V, b. w, I0 ^* Q3 W$ X
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:& h) a2 w* y1 B# j/ y5 p
8 J: u) d6 j, B% G3 OName (_TSD, Package()
, J: v) H6 I9 a6 f4 Y/ J
( D4 p8 q; P m C! P{
3 h& F6 ^, v0 n. t2 F0 c, g4 {( O! a5 F$ n
Package(){5, 0, 0, 0xFD, 2}' _( ]* n( h* V$ s; C- N: h
// 5 entries, Revision 0, Domain 0, OSPM
) V$ e% Z) |7 Y( D; \ G4 CCoordinate, 2 Procs ; F. v% R" H! l+ ]
2 j7 e) T) D$ O1 ?# P( Z4 S
# g6 ^ S$ F, k/ z% {! u! J}) // End of _TSD object0 I3 N5 ]* ~% `8 ^6 b' B
. R& Q+ L% u& u8 |
REFF:
0 N# _8 V5 V. w9 k8 e( C1.5 X$ i- W- _% U7 r6 _# F' ?+ \
ACPI Spec 3.0
1 f& w2 N7 i# @ ?& C" p2." P; m" ]4 j6 I$ _: ^
Intel Processor vendor-Specific ACPI
% l# v m) ^# g8 W! G, Y ) x; U' _% ~' Z; q6 v: S7 P8 y/ B
/ t c W2 [; [
That’s all!
# n- W ?; J/ M! k7 G9 U 0 Y2 C& s; ]% w* D6 x( l5 V
Peter0 [# p, W9 _1 s+ x8 |6 z1 U
) ]. M2 s3 S! t$ v
2010/10/01 |
|