|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
+ j4 c1 h) Y5 i/ T( B6 p7 _
9 O# v3 H. Y4 vCPU在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工作时间的占空比)的方式
/ _& c( [) `2 W,影响系统的功耗和温度。0 N1 T, O$ z7 g: p
2 c* F4 {; L ?
2. T-state Control
; l! S- O$ f2 d* F. ]( k 7 z0 c0 n" g) H8 M; S
1)/ @0 t. q/ h4 B
MSR Based Control, z' F. s$ o& I6 m- t
! s# ]; e R# o0 @ XBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
; L8 L! c u2 G+ X3 \( `6 h# W : d* A6 s. A. m% J+ R3 ?/ ]/ o
2)
6 p% I$ K0 U, KI/O Based Control
. J) s% O0 Y1 q8 m3 ^7 ^* P
- N; ~- k a* x; S6 r除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。; \8 \/ [+ T4 q
, x" A' d5 N3 o; U+ P0 L- G
3)' _2 j3 E/ s) ]% f2 L
ACPI Structure For P-state
4 s( |# h' ~: n( c$ V" ~% Kl# _0 h8 u& V4 O. S
_PTC
4 D$ ~/ r7 n& I- V$ m
9 o0 v+ Q& Q4 f: h& H3 c! p2 J6 mProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
$ @- Q1 T0 W5 ~! [6 S8 w* S
6 K" l$ d8 A0 ~- oName (_PTC, Package()
$ C+ o. D5 |" c% N4 j g{
+ i% n* S$ ^7 p3 E* F8 T* n" v& b. U/ h! g4 P' O
ResourceTemplate(){Throttling_Control_Register},( q9 k6 U, n) L" t
//Generic Register Descriptor ; j" ^5 @' r5 F6 W
# L! k; Z3 k5 z9 T; gResourceTemplate(){Throttling_Status_Register}
5 e+ h+ v! y8 ^, y ~" p//Generic Register Descriptor * g2 ^- J* M3 B2 {8 ?
}) // End of _PTC2 c* D3 H8 i: I; f$ I* @
2 N& A1 y- _5 f4 M2 m下述是一个sample code:8 c1 g9 c, \' q+ l; A- [
. f/ l0 X& u6 p* @: I Q1 z
. o% Q+ f7 ?* q$ X R( o
//
! U+ r6 H8 w$ y+ {+ J% c5 i2 U8 R p" ]5 `3 l
// T-State Control/Status interface* [9 m. A% S! y7 T3 y2 C* w
4 F8 K$ H4 R) S2 G+ h
//' C3 S* k; T6 N9 J
4 D. D" j0 k0 J: K6 V
Method(_PTC, 0)( Y9 Y7 L1 B6 A. G, {" Y/ ]
- a3 R: X' e3 F+ J
{8 j$ ?$ @9 d" w4 T" k" Y2 E
& k7 T4 i0 ~& C, o//
$ G. b8 O1 a8 L) J5 p+ d$ S) ~2 r+ A
' ?* f$ ?7 w5 u P& Y: k// IF OSPM is capable of direct access to MSR9 U1 m, O1 {! r6 W* H4 k" f
, R! c! D0 P" p) U9 m; W
//
# W2 b! E0 l6 z; u; p% }Report MSR interface$ S5 s- S" E) @6 H; W! K* Z
( h: E/ z2 j' U$ l3 H P, R// ELSE
; E, S1 d& V- z8 X$ z/ k! @" K. L7 M( r
# m- x) ?* O% }/ F//- {7 s! L) o& K3 z1 x5 P
Report I/O interface: n6 t6 I% E% f5 {! f
9 `& n* l7 h1 I//& E3 N: W7 x$ c# A
" U# G7 _1 V, v% ~4 l
//" F8 n2 @6 ]3 o9 X0 N
PDCx[2] = OSPM is capable of direct access to On! o) r) H4 u: L0 {. i! Y, s5 n" p
! [ ]0 \0 M- e( D
//
' v/ P5 U: }2 g8 c+ P5 ]) xDemand throttling MSR5 l4 c/ Q6 { m' v1 u$ F
$ Q8 R+ Z& \6 _2 M7 D; |3 r//
6 W& @; s+ j' `
9 |9 ^6 j" l! Z7 c* K. ]$ j( _$ GIf(And(PDC0, 0x0004)) {; l* n& h/ _( o2 }' e/ F0 p5 S: `! M
/ { Q. g- ~* ^6 S/ c, j' @
Return(Package() {7 h# ^8 i3 }% j$ D; b
5 E. @5 {4 N% S$ j7 {( S. tResourceTemplate(){Register(FFixedHW, 0, 0, 0)},9 W+ K5 q' T% J& c. \7 o
8 W y& k1 G% V( r0 t: tResourceTemplate(){Register(FFixedHW, 0, 0, 0)}) N, ?* ]+ I$ H; e, V1 n
% c; T7 Y& S; R4 w% s- u})/ }5 E8 J1 u( x, o7 f( l
$ Z" @1 h8 {1 e _! w
}9 Z# Q" e& J% f
- o; |6 W Q. q
Return(Package() {
* M7 h8 B* q& D& n
' Y5 Q5 c9 a* y [ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
- @) U9 P% p) x2 b
4 Y g+ h3 {/ H) y- c- X8 TResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
3 @) y j2 V2 b0 X. k# f
* o: j/ u4 A& _8 Q+ }" f, ]/ z* X})
# i1 c7 v6 ~# r8 v
! r) Q* K7 l; J3 C- a$ Z}" ?/ @% `; X& w6 x3 V! p+ Y
1 l. T* L3 P6 ]1 o) X+ F. s) p0 A! J* j
- `1 @6 n% P) fl
- q0 a' J/ Q2 ?& ?/ F5 J& D+ m_TSS
- [: I" A# W/ k0 C( E 7 d5 }; [- ^% x6 q1 u# I
Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
7 v3 O1 }7 y+ N, G pName (_TSS, Package() 6 | a* R8 B# K5 Y7 @
{5 ^- H/ N$ B4 O( e
// Field Name! M! H3 h7 [: f$ ^% t1 I
Field Type . z0 |- R8 z# @6 A: N
+ O! U/ O' Y/ }
' Q6 `+ b3 G3 r8 j
% b$ P& d$ X+ ~9 l$ Q1 kPackage ()
+ @+ c/ x2 z# Y// Throttle State 0 Definition – T0 ' w1 V+ [9 H) E3 H% F
) z I$ e, t; Q" h8 l
{3 c* |+ m5 {; f9 |3 x( ^. P
6 h' x; g3 Z2 \
6 O x$ D. I" Q- Z' e p) a' zFreqPercentageOfMaximum,
* u9 _+ p1 R; G& m6 M" o: X1 M// DWordConst + ^0 g% I) |* \2 f% O- Q
, u+ Q; w5 v) w5 C
Power,
. u$ T S: t+ @, o) @// DWordConst ' x# O$ n) C- u( V$ U
2 G/ ?- N5 K! y0 D. j
TransitionLatency,4 c5 U- ?, u' W& F% a
// DWordConst
! F5 f0 I$ @0 _5 a; \- A
! f" k' `+ U( p6 K$ |( v5 [4 h5 pControl,1 L8 v f$ z6 e/ O T
// DWordConst W3 Z' Q! Y: m) M1 y! w z
* ] v: Q( O/ k3 d% s0 V( fStatus
: @+ I" b6 Q# k# d8 Q& ~// DWordConst
) W% J0 \3 c3 f+ D! e5 {8 O! S% l},8 h5 }3 \- @; P+ Y) W8 F
……' b" a3 p8 V% Q6 X
}
+ I4 ]3 C" a ~! B7 _- I& ~" c( o9 Y
Example code 如下所示:
% L- n' q3 a. G3 W1 X1 }; \0 t6 P* k+ O7 V; u) M* n& `8 W
Method(_TSS, 0)" s, K! x: |0 M, x1 P. _
' G% _$ G4 Y N2 O4 v7 m3 k
{
8 x6 r, X8 a2 ]0 l+ y1 n7 C$ g0 S2 \2 p0 b1 \) k
Package(){100, 1000, 0, 0x00, 0},
t |% F" `6 @" v3 t
2 }4 X* v: L8 f# L a' d, x$ j4 v6 BPackage(){ 88,
) g7 S# F# o2 X6 ]875, 0, 0x1E, 0},
! ]* ]$ z$ r# O
3 w! O4 u3 _$ L5 w! m5 hPackage(){ 75,
% z- L5 q' X3 p2 [750, 0, 0x1C, 0},; D$ U+ Y3 ^: F4 M2 ~2 x/ R( g
; j0 K9 v" J" j( IPackage(){ 63,
- U+ n4 U. h) Z3 k625, 0, 0x1A, 0},
7 n; d3 d; L' c$ Q/ l: H- f, a
- a. ~) H' r& JPackage(){ 50,0 \( k/ o' F' O4 ^7 [) M+ G
500, 0, 0x18, 0},
5 N: G1 m) A6 k5 ]; v3 w- F% L3 i/ @2 [
8 |$ ]1 h" W) K& |& FPackage(){ 38,, W% }+ @. y. R& n
375, 0, 0x16, 0},
+ ?3 z9 Q+ ^) k. O. T N1 q. E* o( A8 l* V
Package(){ 25,
8 c! @0 Q; V4 H250, 0, 0x14, 0},
0 [9 @' |4 s2 k0 @4 ]* g
! h0 _2 L9 k& R, w& jPackage(){ 13,
; @& C, { p# m5 C125, 0, 0x12, 0}
7 [+ n' u6 @8 A! o F: r8 |5 c. n6 G, @' m& L) V, p' s9 Q/ S* W5 l5 F
}
& m: e" _& t# ?, @0 V0 T9 C6 c
9 K5 M: X0 L0 ]+ n7 B& S$ C% Q% U7 h
l5 ~+ ?7 `9 p8 h" E* m- p: r- a+ L% p
_TPC
. K+ N" f; `" @* M 5 v) ^( t+ Y3 f4 K" Y o K
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。; ?* u2 @/ J/ ~1 e2 C) L
1 Y& r5 ^( {5 @, X. ?3 N+ O1 Yl) A0 L+ e/ \. c; p8 h; f! F. @
_TSD
! p, m$ e5 X! M ?2 K7 `& v% A
( y+ z3 L% L9 @4 z3 U8 ~* DT-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:# @/ H9 M2 S* w! D
* {, E7 N- Z/ J3 g6 pName (_TSD, Package()
$ W9 ^! Y; h# J( f1 X6 Z2 H
) ~ }2 Z! y [' v' E{ , ?8 ^) N Q" i9 h2 o! u8 Z
* o6 D5 G2 S) p3 u5 V
Package(){5, 0, 0, 0xFD, 2}2 ?7 M' H% t1 V
// 5 entries, Revision 0, Domain 0, OSPM 9 H, b, f1 `# H/ {1 ^( ]
Coordinate, 2 Procs / O& x" R: W( ]' _( y! E, q o
; j; y$ T" H- p
. U# n" P* l2 y, Z, V}) // End of _TSD object# W4 P. u" @* b6 N% n
7 `1 c2 y8 M; B! b
REFF:; c( W: |+ r+ O% ~) k$ l4 {. ^
1.
% {! g) |# t/ J8 w2 `3 |ACPI Spec 3.03 O) N, O# L" |8 I% N
2.: O2 B! c+ C* \! N- _* B3 [
Intel Processor vendor-Specific ACPI7 L" A$ V) {8 s1 W7 ?5 e
9 ^2 q! B8 }; v& [
: _' ]4 P& b, S- V, nThat’s all!
' |7 Q- S t$ W$ }! D9 D7 i 6 j4 L( K6 H+ c# U: h
Peter. S9 F& F1 L& G3 Y
7 p/ D; @* o7 R7 j- @2010/10/01 |
|