|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
! n5 C# X" U7 U) j ) \; f' }1 t. ?! r4 f& {
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工作时间的占空比)的方式# Q! S9 l, v3 e. m) ^
,影响系统的功耗和温度。
3 c% s, @/ b' R- \ g. s
& {$ _. E5 h) W" c6 |9 Y6 G. C2. T-state Control! G: m/ y# R0 x& w% w
8 i& G# v% u8 t+ `4 B1)
2 }5 B, @+ A- q0 t J' l3 \MSR Based Control3 i' ?. s3 k c1 t
( c; U7 X; i7 hBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
$ N2 @4 _) n' X5 T/ N4 j& a
8 D" x7 ^8 t" W# R+ y! s: x) s2)& D. V2 h5 E8 ^
I/O Based Control
& m! M0 N! ]: P
' H& L C" |, i: t8 Y5 Y# k除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。0 k5 ~( P1 N- u/ A9 i6 X8 V
) t% a% ?% g( n9 i. g7 `( F3)
; K U2 h% L. p/ tACPI Structure For P-state
# J& o' Q t" d" S( Kl
- a3 G: S$ U, N_PTC
8 |/ y0 `# M& X0 r+ B. m8 w0 a 3 P7 X/ L; Z0 u4 \- `
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
( A8 J# E/ G7 c- v/ j5 {
8 r, Z; ]! o! q1 tName (_PTC, Package() . t1 O9 K, G9 _. @; ]
{
$ k0 I8 ?6 Z7 g% y
, l9 \; |% u4 z( U- HResourceTemplate(){Throttling_Control_Register},
5 D: ^6 _8 D- A% p& x5 Y0 |//Generic Register Descriptor
! S8 F# E$ _3 ]
; o5 O. D- a# g7 j; v$ h4 h ZResourceTemplate(){Throttling_Status_Register}4 p' O, |" w/ g6 y- Q2 {
//Generic Register Descriptor
- c' g" w1 V) [" n3 c8 U}) // End of _PTC
2 A4 P( v; g1 i9 B
3 a- z* |( Q; y. p" l下述是一个sample code:% ?, M) C1 x& m Q6 ^
, c# G9 X: }( [( d3 U8 o0 z% M- ~! {/ T! O
//
; W! U7 K" J$ ?; L# h" X* v9 r' r, F& C% z. G' J# w) e
// T-State Control/Status interface& h# y j8 I; s3 M. q6 Z0 z
' @! P' H) \% F# f0 J+ d) H
//
, ^; @( i4 u/ w- b5 e0 z! E& B: a4 ?. s: x) o
Method(_PTC, 0)
! }0 N+ d$ ^9 J! r
4 ~0 L U# Z; V) C: n( n{- ^9 G! \( g; ?6 t3 c- j
/ N& S3 p% A' e5 w$ T% \& w//$ W7 e2 M4 Y3 h) z) k
& t* R* }4 _, b9 {2 B4 `
// IF OSPM is capable of direct access to MSR) f# I0 r& x! \! Z- {" E2 _
& I( C: v: o( f5 V//
% s+ ^; v/ T7 e/ Z0 N* VReport MSR interface
3 u/ @8 c& `6 W, \, r
0 g6 O, h' Z4 P: I* ?0 X// ELSE
2 X- \9 P2 o5 M7 {- a& f
9 ]: x. J0 ]4 w) l' K/ C8 x//
$ |: u* _! {7 b, R2 o( E8 kReport I/O interface
6 K! b; ^9 Z8 ^
[1 \$ y; X$ _# m2 F' m//
6 Y* W# h6 @( v1 I4 M
5 N7 ?6 o. j- x: z- S' W//
0 h+ } G. |* a6 VPDCx[2] = OSPM is capable of direct access to On
' n p6 _$ L* [, C" C
& D! a7 H/ H1 T/ |: k//
7 m! j5 x9 T/ ?$ ?7 _! }- QDemand throttling MSR
. k4 B! s' O$ h0 u4 D R4 _& o* ~8 k& k& t
//0 H' G. j# o& [2 B! G# A
% f% O2 S4 s; l2 l( I! {
If(And(PDC0, 0x0004)) {- D8 [) e5 l, V5 B
1 a, M. @- J% \2 c. MReturn(Package() {
7 E& I5 \: u i8 c, z6 Z% u* s2 e
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},$ Y( D5 j; N- O. ~; v2 F& N
- E9 D. h9 {% X# pResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
0 i9 }9 r" J+ a, @( F; U9 X" f6 r/ B& a$ P+ H; R6 S
})
. z1 t. q! `; q. \% c$ R) ^; F. V. [6 V
}2 [' b$ G( Q* F
G" I& P+ i) p& {" rReturn(Package() {
q0 f/ n* ~: g& h4 m6 h
5 k$ Z, u7 w, g; V$ p+ XResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
( ~) }6 [) l( T4 d7 N- o# e4 @5 |: J; [4 s
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
|6 A/ a# T6 i* r/ B y" P7 `! ?
+ X6 X r; J7 b5 j})
4 T% }& ~# b9 ^- X6 ]
1 p5 p m1 \! g) d5 v4 L* y}
+ i# R1 |! |9 S" { d; U G2 x4 u! n
6 v% u+ C0 @9 _, P5 j2 ]5 R+ j
2 D- g" l" G- i: Rl
) M5 F# H% z' D* m3 Q9 x _' Q& |_TSS& ^1 Z$ o- B1 H5 R8 h4 p5 P
# ^6 G' ^5 x' q- Q* l8 \Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
, V- v$ T+ d) b8 B4 G" NName (_TSS, Package() ( n- Y" L& S# ?. l7 x
{( Q6 t! @% M" [6 Q: d0 S0 Y9 I
// Field Name4 ~8 g: _; {) c9 H
Field Type
% z: {9 V; |* g9 @" P1 Q
0 o8 ?4 j: i# z- S
9 u% o6 [/ r: U S* J) J
. R6 f2 Z5 x. O4 A G8 \& {) Y r! HPackage ()
% c7 C8 O# @* j! {$ X7 s4 K$ z// Throttle State 0 Definition – T0 ! V- E, a1 v: f5 N; Q
) }' o" N% n+ c{2 w2 Y- ~, r. j9 H
& ]$ _/ o& z: s/ \! ?
( V% c* }2 _" ]! \" zFreqPercentageOfMaximum,: k7 _/ U7 C" ~1 y
// DWordConst
0 q% F/ ?: Z% P0 I2 Z$ b3 a/ B' K8 W w+ o. D) s
Power,: u7 b) t& ]* f! a3 \& l' M5 i/ {
// DWordConst / K( z7 e( P, J, v# L
: E3 s; ?5 a1 O5 R5 H" [6 CTransitionLatency,0 b' v- g$ K) Y C4 q2 p0 S
// DWordConst
3 C% V) R3 Y( f2 c+ F; g; l; k' }# f8 y! F
Control,
, J0 x# c' n. r7 }0 J+ A( I// DWordConst
; R2 R. v0 V: H! I4 Q/ A, u+ x( }* T0 w: v% L
Status
0 a: }7 y# \0 Z8 d b' i1 c// DWordConst ) T( }+ ~( ]0 p
},2 z4 b5 u1 w3 G
……
1 W" o z I7 h( _" U0 z! g9 T}
0 F" L# ?4 Y: ?2 w% H$ S4 [0 o4 t7 \' I H5 _# O, n0 E' O5 p
Example code 如下所示:1 B9 ?( A( f1 [
/ A( X. @, K2 u) j
Method(_TSS, 0)
2 k# }7 O! I) m, B" U
# ]$ |1 T5 _. }! H0 Y" l{
* O4 A( j0 Q8 q5 d% F* f1 U% \" b5 n* _$ W2 w
Package(){100, 1000, 0, 0x00, 0},
5 U5 X) O, U1 \ q1 _
( l r/ X9 E3 \9 pPackage(){ 88, h$ d- ]6 U2 z3 F
875, 0, 0x1E, 0},
4 F& Y9 ^5 ~0 } e! \0 h1 `9 K$ P2 ?" x. [- a7 I9 s
Package(){ 75,
( Q; Y. H9 B$ t7 m, e: G( l750, 0, 0x1C, 0},. a& V9 T8 y" m" P6 B( p
. g; @# l* y( }; n* o" e. XPackage(){ 63,: x5 i* Z6 y. Y) e0 Z
625, 0, 0x1A, 0},& A' \: y6 ?, R0 p6 b' z8 ]/ f. H
) L* M$ t, c8 E2 O2 `6 E
Package(){ 50," U5 Q/ s3 e- k/ V
500, 0, 0x18, 0},' ~" Q3 f/ ?4 Q6 q
+ `; ^+ C% {; q6 |3 D+ N
Package(){ 38,
$ X' P0 {, L3 W' n/ `1 s375, 0, 0x16, 0},
% Y3 E0 k3 J3 O3 R4 D
4 H: x# a0 o- W* b( C+ wPackage(){ 25,
& g' |0 J5 c3 x4 b4 z1 C6 f( E! W250, 0, 0x14, 0},2 Q" d% U G& d9 f! J! T" p0 `
' M9 W" ^% b9 y# t2 u
Package(){ 13,
9 w8 |2 x r' Z* ?9 @& t% r# l125, 0, 0x12, 0}1 w+ [; x' ^2 e( z" o( {
a0 V8 [, Q4 `" ^2 ^
}( i& R1 p# q. ?9 V: B
5 F A7 c) _- b% [( d2 I' w* x' o L7 k$ J: U" s5 F/ i8 [' p
l4 K: I2 x( q5 ]" c
_TPC
4 c/ @' m+ b# Z, b
0 p2 V$ V- y* ]& M' f a" Y3 Y! _Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
' \. w2 S7 }% E2 I! S: _: l" W% \
& ^+ }7 z* _. t) D7 S2 ]0 b0 V( ~9 Ol
2 Y) P H; L" Y3 ~/ E+ R i_TSD5 A, f7 O% t7 Z# T
, j4 n. h: P5 K" Y' R' R) D8 @+ ]T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:* w5 k/ N1 b' K) g3 n
, D5 O0 |6 R) D6 R8 s5 |# ?! ~3 k
Name (_TSD, Package()
) B2 m) w7 m; c3 L8 }! }8 T6 ?9 f: r- p( l
{ 0 j- d1 X, A$ P, S& B0 B
' Z4 t: ]' N4 w4 X6 Y5 V
Package(){5, 0, 0, 0xFD, 2}* b/ s5 j" a; B- `) u- {
// 5 entries, Revision 0, Domain 0, OSPM ' t5 J5 ~6 Z L; p6 F8 H0 e/ E1 d j
Coordinate, 2 Procs
5 ?! S- Q X# E4 U) H4 i4 p. a3 f- K) a% S9 Z6 r. W$ q2 k1 q! N
# u& p- t0 x, ?
}) // End of _TSD object: ? [: K( a( j; L. _
9 i5 a: ]0 P$ T5 w# x: [5 g( lREFF:
; K* F3 B( w' A1.; O8 c9 t7 _( z5 }/ y* j
ACPI Spec 3.0
+ n) M" ^1 x; o, O9 N2.8 C: q. ?# H( l0 `
Intel Processor vendor-Specific ACPI4 V( x# P f$ v
( f' n- p- g* b& y# h" f
% L9 m, K/ J/ n- |$ S& l( PThat’s all!
8 u z: u1 g1 w( a1 i' f, y) i" C ! O, h) L! _$ h5 V' f% f1 w8 ?
Peter/ _% h3 ]2 P8 _* o
7 j' a* z' F& W7 v8 C( r( v7 }
2010/10/01 |
|