|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
3 l- L) P# z, a
4 r: Q- X- c5 e; h3 z4 uCPU在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工作时间的占空比)的方式
+ s: k' B1 g9 ^9 j,影响系统的功耗和温度。
! q& [2 c; ^2 O U6 ^" o 6 f+ k% i j" ~) Q+ M1 r! i
2. T-state Control
9 @1 y& _; H: ^, }- T7 N
2 {: n, k% @5 F j. n1)
. F( I3 |8 b2 Z; R1 w# l( ` bMSR Based Control, T) ^% M2 X5 u5 d5 W9 Q
' V( U) M G" jBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
3 k( W$ T u) c8 E5 }7 S
" T# t6 @5 j" j/ a9 T2)
7 s/ k1 O1 U( |I/O Based Control' x. ?+ p- R f% X! t8 v
, x) \( W9 p0 n. i1 C" U0 k除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
& {8 w$ C% {8 j: \4 { ! C- C) c$ D0 _2 I5 c
3)
& G" K# h& o HACPI Structure For P-state% w$ ~% l1 ~8 T$ B: N, T( V2 [
l8 ^8 H, I$ \7 t0 F* _$ E; k& o6 y
_PTC8 Z! L8 i. U8 ^
- l/ ^6 {' N2 \4 L0 i0 T9 d/ X% [' z& \Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
0 Y# L' o+ G) k6 r7 _" P/ w $ \2 D% n( _9 [
Name (_PTC, Package() ! B* Z+ V+ K K; Y- h
{
* I3 k* H) @2 I- s( L
2 C; ~4 J/ e3 H+ o! wResourceTemplate(){Throttling_Control_Register},
+ Z8 x( d9 y/ L) {//Generic Register Descriptor
; z' Q. b$ {( v1 a7 Q4 M! C3 [) ]" }1 ^$ k* g7 t I; @6 E2 _
ResourceTemplate(){Throttling_Status_Register}/ @7 C2 r6 \& U* h& J$ x, }& O
//Generic Register Descriptor
2 a2 n; u* [) f& s @* ~}) // End of _PTC& Q# G' T* c( C! b' m
% w7 K5 [- D8 R. H6 e I- _7 l
下述是一个sample code:
1 \" i; J' z8 k- q 7 w/ j2 h- }- I& ^
+ R9 ^$ g4 u3 ?
//( u! J% f0 y! ?6 ~% Y
& ~" b+ K j- g' h. q// T-State Control/Status interface0 E7 O; Y; k, W
+ P, t& b6 O% B1 j* l6 P% `4 s& h
//" v' l1 D9 o* g, _4 g, u3 _' S3 E
& t! o; N/ V$ h5 r$ uMethod(_PTC, 0)
* T/ H; _& y8 s9 C5 C8 v) T! e3 K$ S4 {$ {
{7 m, l1 R% n& t
, V6 r4 m( z/ K% E, T5 v! z//
/ T/ n) v. t3 u9 a; A( s6 p0 n2 @* h- |0 Z2 }
// IF OSPM is capable of direct access to MSR! e" J/ H* L6 B$ C! E8 \7 m
4 s( ^6 K) g% `/ A6 w* s' b+ M//
* Q9 @$ V0 o" x, Z- E* j, lReport MSR interface
/ v) E; E' }# s! h
3 b: F" a9 ]1 L L" T// ELSE
9 v8 h) C3 H9 U) B: a4 Q5 b1 J3 j& Y8 h3 N( U& J" w
//
4 w" X( d b' QReport I/O interface
& O: ]; Y6 I0 ?% v* o( _- n7 P
+ E) u" \4 N& Q6 |//' I$ U% Z' S- q0 X& S8 K* s( d
5 e/ u' a( g2 O3 C" c9 I7 K+ y
//4 g7 O! i4 z/ c! F
PDCx[2] = OSPM is capable of direct access to On
8 E1 }% _& w2 {) i& T6 [2 ?* G- d
. G" i$ [4 O; O7 `7 B//
: C% i' y# b# t+ h" uDemand throttling MSR( t3 a; @+ d( A* o! @
' D2 [1 T6 I; p( }5 a
//
- _ R9 i4 l' `( f" d8 P; D1 H1 t r
If(And(PDC0, 0x0004)) {
" {; ]# \: f* `, @( F8 J( o
1 L- m0 T) g, k/ M* |Return(Package() {
9 \" V: F/ Z2 m! H- m |( c1 n$ {/ ], \, l
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
# c4 V, o7 h; t- N3 B! ]# }+ ~2 j- c) [
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}0 z& ~ f* ] f4 w+ p8 U8 M2 y/ H! ~
" R8 `# ~3 F( S$ j! d})
1 J8 S1 |6 s4 v5 D( F6 E
8 B. Y+ n# d/ I# [- h}6 S7 U3 b0 s. u% Y0 I
8 N' s. S1 `7 T. Q0 m
Return(Package() {% L$ W. ?. ~. {1 R* }9 U
. F: x% @. h# E' u5 v( WResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},/ p5 P9 V1 d2 c* }; z) y$ @+ J
[) W' }' Y# z1 o, WResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
/ O5 s- n* |$ d( _% I: u& B s# [4 Z* `: D
})+ m' M" ]% p& U1 e
x2 t7 ^9 ? k1 }0 b1 C
}
' [2 f. x6 i" X5 L
$ |! v* F. O5 w: D
: _+ d6 j7 S9 h/ g
5 [9 Q/ |+ k/ g; L. \2 M% gl
7 O P6 y$ d: V1 L% {_TSS' A) n. @, a$ @- Z
" M/ b4 r% C5 ^ FThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:: _( g! G, d% d& |' l
Name (_TSS, Package() + u2 \5 \ P. Z. Q8 O+ K
{
+ F, f3 G$ s5 r4 C4 d& [9 Q. {; r5 M// Field Name. h1 G" y8 Y: F: \6 B! X# |/ c: y
Field Type
& s" K1 H& E; Y1 S; A6 k+ ^
5 _1 c" M% T1 B4 h& v& U! v
: B% D t2 m" x6 d4 J- I1 `+ {6 V3 n6 I& m2 Y6 t( E: D& @
Package ()( [/ C1 {' I' J! [1 \% g
// Throttle State 0 Definition – T0 6 H: p/ F; x# t, C6 X8 _
. w( F7 q9 s- B5 r
{
) z4 f e0 _7 e: [: n
/ H5 X$ B, x* b+ j% u
6 {# {5 i0 C8 \* \FreqPercentageOfMaximum,
" U% u1 G7 S p$ x. F7 m// DWordConst
4 }# G, g. t% |9 I
y, @9 n8 F2 ]Power,
& L+ A4 ? p$ {; a5 m) ]// DWordConst
2 Y& }- [! h. W+ u0 f
" ?3 b; t3 w8 a4 nTransitionLatency,) X/ k( u E+ Q S; h
// DWordConst
1 n2 Z, h5 C5 D* x% x
2 ^4 Y G& w F2 P7 EControl,
: L% C# F1 G. w; _% x: `// DWordConst
. X, l' [/ z9 J+ |
5 D# a: j: a& g! J4 qStatus
/ f: A6 b% A5 n6 }// DWordConst ! u9 f W& c0 D4 P
},
8 }! @, |4 H; E0 g4 F2 h4 z" D/ q/ e……8 w" A1 D' f k+ [1 ?! H
} s2 h8 K& a4 b2 p1 g& y
* O( ^1 j8 b" _7 t$ y O1 e
Example code 如下所示:
$ c1 p K! q5 x( s# Z7 ^. J( Y( a! c0 Y* \. U! h- f* F" i# x
Method(_TSS, 0)& O; \1 R+ @5 j7 A
. }6 [1 I5 |1 Y! Z{
" i4 O( R; o9 s3 y! C6 q) m* W. E# f# o% b z, f
Package(){100, 1000, 0, 0x00, 0},
; l: M! r" D" K5 C& E+ e4 I
- s& ~3 J6 p( @Package(){ 88,
W2 R& d! {: ]* A875, 0, 0x1E, 0},
( _3 K2 y0 u o& N8 Y% Y! ^, Z$ Z7 h; n" k, _+ l4 q- u
Package(){ 75,
! B C/ f. f+ f5 \% j; M- \7 k# C750, 0, 0x1C, 0},
3 @1 [0 T0 O0 {
% c1 P8 c" o% uPackage(){ 63,
8 Q+ m3 q+ l8 K! B625, 0, 0x1A, 0},
, R) n( ~: y% ^ Q% j! Z/ G' Z% i2 x. s3 u% E9 X B" F7 D
Package(){ 50,8 B6 d5 g D$ |& y) V t) Y- C
500, 0, 0x18, 0},! d+ f: e; o2 l# l1 i+ M3 k
8 w0 x+ D$ ]. F& \Package(){ 38,1 d1 q' C# Q9 y+ O: V
375, 0, 0x16, 0},% y+ J7 |& w8 ~& m: p. |) { X! O
3 \2 x2 z( z, h6 g, qPackage(){ 25,1 k9 S/ T% r7 t/ ]
250, 0, 0x14, 0},2 v( l" M2 P; _: A2 S
9 r- O, b* h2 \3 \4 E
Package(){ 13,( J; O1 w E! m# N w2 e+ ]
125, 0, 0x12, 0}
1 J9 c& |- n" M2 N0 H' p, g G- k' G& J% F* b9 K& _
} z, w3 T' S5 `5 \
" Y6 b! S, Y# H; j
# ~' O, U7 D5 [7 X7 r. Nl
4 s6 o: E! A5 O! [, a_TPC
: _( i6 e% O' H; Z1 q / q+ b% c m, h
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。# ~8 q- S, I: F2 e; K; G
' p# c6 P1 t( o; }2 n+ Q! Yl+ B9 t( P$ v, U. { S' t
_TSD Q1 w5 o/ d) m& Q- l. O
& O) k- \: I4 W }1 YT-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
& j7 u/ I1 w" ] & i3 L( X+ X1 R/ Y) x" V! w
Name (_TSD, Package()
& h+ q/ A' A; X# n/ T; \- o& c( ~% _/ @' B! I% `& g# t
{
0 C# ?: H/ W% S* P/ p8 Y4 R: U% J" ?
Package(){5, 0, 0, 0xFD, 2}6 `) u7 h( n, `" H+ A& i9 ^
// 5 entries, Revision 0, Domain 0, OSPM 2 c/ I9 E- d0 J, J
Coordinate, 2 Procs 9 @2 W. c% ~3 p4 ^
& R; K5 n$ N( H$ h3 Z/ C3 q
, F( k# p, J# w! \! M+ C* H}) // End of _TSD object [$ i, T0 h4 `+ f+ i U5 L+ U
% J4 l9 G3 j! Q+ E/ ~& I8 P" ^/ zREFF:- r0 X( U) |! V+ f4 a4 |
1.
! | c F, E* c9 Y+ p) k* R9 @ACPI Spec 3.0* T& [7 ^0 q/ \, k% Q
2. N# Z/ r. K, P* S1 [" W8 l; @9 U
Intel Processor vendor-Specific ACPI( F/ e5 u# o0 n$ }9 ~
# E- _6 q; Q) k! G$ |+ ^
+ p. b+ D, I) x6 F9 XThat’s all!
/ t6 P6 K7 A' V n3 A% m: ~
$ L& o ^! r( e0 c& @1 rPeter8 A% T/ q+ f' g' |% _
D9 l% R+ V3 Y8 {, x0 l
2010/10/01 |
|