|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
) O3 e/ H1 ?$ V3 _0 x2 v ! `# G l9 j7 E0 q
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工作时间的占空比)的方式1 {5 k6 i, e# ?0 V
,影响系统的功耗和温度。) D3 X; c; J# B( `
8 C( A, S# F( G" b$ y2 b. U8 f$ {$ z2. T-state Control2 w4 W; `; ?4 W6 g. [
. Z8 [- e% ?% _, B% ?
1)
- b5 h9 {% V3 b7 T* d% L! kMSR Based Control
, {" {( P3 f" R/ p- _
0 B7 p3 p0 \5 M* d! hBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
; W9 E0 k$ n s5 y' s. I" R9 o8 a; c" p! ~
3 k6 Y2 K- {7 _ N# b: L5 G2)9 N* h7 w i( W" O w9 \
I/O Based Control
4 B9 l! `# k E1 A) ^2 N & j- v7 n0 H5 q1 U6 D# P
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
% ~% f# H! z e! }4 V
4 \. E( N5 f5 P' N2 y# R2 W; w3)
/ g' [9 F5 j( j0 u$ o% wACPI Structure For P-state
' Y& `- D4 d$ x+ _; V# |l$ Q0 M* J/ C( w9 a
_PTC
! J& _! h w/ z( T: M! k& k1 C 2 P# {; V' ? k) d- B( p
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
2 s/ u- i; d5 S! ]0 T$ s 8 A$ S" H& ?- M g" e1 ?
Name (_PTC, Package()
. z! D" W5 z- g' e. Y4 H{ ) u, x ^% M* d/ {
7 Y) r' u, o M5 Z* w* q/ TResourceTemplate(){Throttling_Control_Register},
6 i: g6 A1 d2 y+ \" y+ f//Generic Register Descriptor
6 `- |4 o! b+ ^0 H
; d; |( |" L" U8 a& N4 B; kResourceTemplate(){Throttling_Status_Register} d" M" ~; r. e2 ]; R
//Generic Register Descriptor
" a" _( U: \. x( i" G}) // End of _PTC
' p9 `+ ?6 A+ j9 x7 `/ ^( G 5 D2 C9 r6 F4 [1 p6 B \! c! T
下述是一个sample code:
- n: x4 n! y& ?! ?: Y " n( l8 }4 d* ?3 r
- Y$ I+ `3 y3 [- J//
# e; J# j1 ~/ Z$ ~$ P
Z1 s3 i. h' ~% u$ v// T-State Control/Status interface
: _ s. @/ X6 @# j0 O* E3 l7 V% Z9 H; h
//" m( N3 b D5 y% O
6 E2 z7 E2 q) `& { U$ D$ M/ l
Method(_PTC, 0)* y9 D( D* V1 S
9 w; V5 r) E8 p" B4 |7 |{
: T0 F3 S5 E2 K8 m+ o& D5 j5 f2 U3 @$ w* H
//
1 E( N9 ^: {0 w8 s) N, R) S1 B* f: Q
1 I& Q/ P/ [; z, u( }* Q! C4 w// IF OSPM is capable of direct access to MSR
9 z4 q- b- ?- u9 Z& u0 v0 q7 a: K+ U6 x" u$ O7 p' l( f1 v3 L" ?# [
//! p8 E5 M* s9 \: h, Q, v
Report MSR interface
6 ~( Y6 ?9 L7 M- R/ O' a' Y; ]5 S# }6 P) p3 x
// ELSE* m% Y4 z- e% K
- k n8 \- W6 B: z! q//
* {$ s) `; K' N# j8 B0 H( p+ jReport I/O interface
: z+ M: Y4 a# i- X+ }. }5 F- v4 E+ _, d
/// l' \3 y+ A- l# i
0 Y; h1 R/ `; P* n7 j D5 ^. q
//
9 p1 H( L( h6 r: U4 T6 v1 GPDCx[2] = OSPM is capable of direct access to On( ?! x% q7 c1 E! Q2 ]
; E% N: W# I% X+ N3 z8 ?4 P) N
//
- y1 E, T, V# i4 `0 f6 q7 L* j/ G7 y6 SDemand throttling MSR
4 }8 f% f% f8 ?4 r( w' h. m @9 D
( V0 X9 U8 c0 C# @4 c5 Z: I4 b- ?//# g/ [9 _. N d$ w
4 O4 n9 v k& Y! NIf(And(PDC0, 0x0004)) {
1 X( z7 O T. u* ~: L* U7 g) T8 o7 M. ]/ p6 x3 Z
Return(Package() {
- I, U/ a- t" o4 i+ Y; W# L
?+ d' m, J) M4 j* r2 _ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
" l; F* d6 ~$ f4 h$ `6 \ l3 K. s; H9 V' w0 Y4 |- {0 d
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
, W9 \5 `4 Z' V, p0 f( e A# x5 w& G( b" ^, w. e
})
" q& K$ E0 I% ?5 B( e. ?8 T# k6 _( k. ~5 `3 }' L& o) }1 G
}
5 \% ?! @+ a4 u2 d4 s! X
+ g. U* q, C: k j2 iReturn(Package() {
6 h$ @; q, U# C% S1 r0 f2 H, b2 S6 K/ p- N$ Z2 J) h3 U
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},' T+ s, s [5 s* ~7 z
$ [' o- i- ~) e: i$ h4 |
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
" f6 W; G7 p9 r; a5 `. w0 P4 ~# N! |1 W+ ]3 Z, q3 u! V
})6 S# A7 G9 a4 e- ?4 c. ~, L% n
/ y8 `! h! w# {5 l2 H
}
: H1 u6 s, R% s7 U& G7 @) P
. [& \$ f! T7 {8 e. ^/ {' s: E1 b {0 c- }+ j+ Q
1 j* V9 W1 J4 a) P
l$ t) n- y7 |# P
_TSS; @* [. k* B' Q# m* D
# F5 P4 m& C4 ^" yThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
& a2 V3 T+ `; QName (_TSS, Package() " C/ d; p3 \& I4 b
{
# L. q4 W5 ?/ z: P// Field Name
- I( O& u+ |. ~. ?7 }6 QField Type
& A5 L4 l, z$ @: T" _$ ?4 k. ~& ~7 s9 h- ]
: h" E q* c1 K" }+ ?! v, H
0 ]1 t0 R7 B! F5 s
Package ()
; w* f; y4 k8 }7 T% _/ V// Throttle State 0 Definition – T0 9 w' t' h4 a' ~5 e* \! m
) a: F! @. E5 T" ~& c
{
9 a* ~. w& I+ U) m4 \2 f6 N9 |# L0 S. @ [
6 ]/ I( ^, E! H) G* zFreqPercentageOfMaximum,
3 w# E8 A j0 n" a// DWordConst
7 I! w$ b" g: h* ]8 `* K5 E& f- {9 c0 W! t! @' U4 ?% R
Power,
- j8 Y" j* n# x; V ^4 Z) |2 w1 Z// DWordConst
. w3 \8 o+ c( ]! _' P0 N7 S7 v/ s* Z! n5 _" g" u
TransitionLatency,
& d# x: r+ Q& s) ?' O! w// DWordConst
4 S% ?* z5 F: {& o6 @/ `$ `8 g* {+ h$ x
Control,
8 `/ q) P/ X8 N1 w// DWordConst
: I# E) F4 k: W( M$ ?) Q/ l6 l5 C5 Q4 w$ j& L/ _
Status
9 n9 m& Q$ _, q// DWordConst
/ C% W1 M$ _9 z& i' o5 F7 |},
5 m5 J ]3 ?/ k' j7 f: k……
7 Y R" C( S$ u}# f5 x5 w' W5 [5 \. z: n# \' k
& T5 t) }" T6 A6 C3 }: O, g! `Example code 如下所示:
! T. b5 B' w ~9 }9 B' @
f, y: h3 B. y; h0 n4 uMethod(_TSS, 0)8 o V- b9 P) r( k; b/ U
0 l% S3 t; D8 y ]" b' ]
{
" C" H5 G( c3 O6 N" l2 T/ p+ q/ d. X7 c
Package(){100, 1000, 0, 0x00, 0},
4 s/ `& A. b/ s/ o
# V% [$ m, k& P! CPackage(){ 88,8 |4 A# L6 J* ^1 z ]
875, 0, 0x1E, 0},
/ Z$ O" S% l3 K
1 R4 R4 E B2 D$ q, ]! kPackage(){ 75,
/ |+ R5 Y% [- H" @7 L; ^750, 0, 0x1C, 0},
# U7 P6 y4 Q) [2 U2 Z1 s$ g5 j+ I& a
Package(){ 63,
) u K+ s2 x% l# Z9 N' P625, 0, 0x1A, 0},4 K! K) G' Z# V6 v2 e
9 j5 ^$ ^% w# D, L) E" }
Package(){ 50,
0 \# N8 F9 g/ m) ~* {500, 0, 0x18, 0},
. U( P8 }8 k2 N# E' P$ D
; C9 U: r+ T% r: L0 }. `+ mPackage(){ 38,
$ `0 T) Q# L4 O) L375, 0, 0x16, 0},
* o+ n7 V5 @& b( S9 k; A5 ~$ k; L. w* G2 V1 P- Q( u
Package(){ 25,
8 A# h* m5 y" Y9 |8 | J/ K; @250, 0, 0x14, 0},
1 y4 I' o6 P2 Z1 A7 V2 ^- {8 b3 f& o4 J- M( b, v9 {+ R7 g
Package(){ 13,
: s/ M+ |' `0 R- e& K t n125, 0, 0x12, 0}
: B* s# A# z7 i3 g' T' c2 t t6 K4 Y! f' z7 L3 b5 _2 e7 P
}
9 o9 b- J$ t8 Y4 Y s' X8 m9 [! e; Z$ Q0 `6 c+ R' r6 ?+ c
& b. s( f; |, Q! M0 Y6 [. ?l
M( n8 x/ a5 y: b6 V_TPC" U) m- t; B5 u
0 h6 w/ Q) K* Z) G$ q9 [7 ZThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
; a* q# `$ C& u/ r; E; x; T+ e
! |' |0 ^- f' x' wl9 B. F8 f; P: T- K
_TSD
( h2 P) w W& n. U$ M. G( G
2 ~( @3 o& h7 i- ^( LT-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:8 i: c' `4 m' v% x
" O7 b) h. F/ f# Z" u3 `' {; MName (_TSD, Package() & }0 I9 K4 T3 k- z
$ _. O$ L* m- v1 z0 w7 x
{ ! {( G2 v. }& G0 G4 _" r% I
8 o/ a2 Y& e3 C' S0 `
Package(){5, 0, 0, 0xFD, 2}8 j9 X# k7 t) m0 g$ T
// 5 entries, Revision 0, Domain 0, OSPM
; y% W" y+ z6 |* R: E E8 fCoordinate, 2 Procs , q- O8 z# {- p! Z$ B' h2 n$ W
, N+ o' H" {% p) ^6 ^
+ j' L! C# ?5 @
}) // End of _TSD object
- b; T* F7 Q# k, W* ?
, x& ]9 a% r9 z# K( {4 mREFF:8 u0 K! ~9 j& W* V* Y
1.+ ^) [7 ^) |9 g# k) `0 P8 a
ACPI Spec 3.0# T8 a) q5 w+ G- j) Q6 g! U0 Y
2.
2 v2 i3 w( |5 W& F' pIntel Processor vendor-Specific ACPI
% {0 }1 W3 x' D+ N* w& S: c 1 B1 P0 \7 `2 |* q1 X; G; V9 z3 Y, |
' ? V) a& d% y
That’s all!
/ q& d9 M/ s6 b$ ~5 J2 ~
$ I6 X0 l6 ^6 q vPeter0 @: ]# b* \8 G9 x- v$ l* U
4 Z7 v# _3 ^3 s
2010/10/01 |
|