|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
0 C& b" {, [7 y; h
: v( n; j* B$ X/ TCPU在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! B! c# H% b! ^' H# }+ B: R
,影响系统的功耗和温度。
+ ?+ x# H7 [2 `% Y `6 [+ S
) {: E g9 [; g) M2. T-state Control1 R& f9 \0 Q. L
( Z* P8 ?! a, a$ F5 S. n' _
1)
) t" W& R" a Q! TMSR Based Control
2 F* M, H) g) {$ x+ m! r % a7 Z; ]. |5 P. G) e
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 ( d) U ?" e. r
: @+ A0 h; N0 J3 u/ a% d
2)
8 J9 P' a. _& O. c- V* SI/O Based Control
& { [% `* w s3 N% d
' n, a a- K+ d3 v% s! g除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
: L$ Y. h3 ]1 l5 K
" g* N' e X6 W! I5 e9 E/ Z8 j# h3)$ Q' j: j4 q" ^( J+ o2 b
ACPI Structure For P-state7 b+ c n$ D1 t3 t
l
& Q7 C# S3 z3 z0 K2 f* I* U_PTC0 I/ m# N. s: R# r* X* q$ j5 H8 X
0 W6 w0 k0 k- v# I" j& \% [
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:9 F* k1 P. \. _' A S* l
3 b* J. N, I$ b# o5 I, l+ FName (_PTC, Package() 9 c" m" `* \9 p1 s
{ . G3 `' w# Q& M6 e: _
6 w$ p4 R. a3 G/ k- a( _ResourceTemplate(){Throttling_Control_Register},
# U4 `4 `; Y, h& {4 e/ U7 ^//Generic Register Descriptor * E, T' x) }! Z& }4 L$ Y, P
6 m a0 M$ }( K4 ?
ResourceTemplate(){Throttling_Status_Register}& s8 V1 ^5 c; w% i5 \9 q
//Generic Register Descriptor 3 M4 {6 e, @! k' q
}) // End of _PTC4 i3 K0 f+ x# b# M$ G/ }
) F% m9 U/ k3 X' i3 s e
下述是一个sample code:
7 q- q, S3 `+ W% F3 R$ D* E $ E4 X: V0 B _# o* z6 `7 j3 q, _; c
, L. g+ j% A; x- ^+ C. x% z( y: o
//
' ]% p8 n& D( Z# Y
7 U% W/ D6 ?1 d; D' N// T-State Control/Status interface g( r+ I# C0 K; D
4 F) A7 y8 I; [& \- j+ q3 i
// K& ]8 \& Y& p) a7 s
9 K6 Y0 D3 u; hMethod(_PTC, 0)
7 [# o, F3 p* y& b' K. e) E7 M* _, G& Y2 B2 k3 E) L2 z
{( [' m; y \; ~* H9 @$ e+ ?
* Y& ]% Q' S* Z* |5 _! b$ C& m6 J
//# i6 F1 z7 B" T. ]3 i% X% D+ U/ F& ~
0 E+ z- z1 V- K" q8 j
// IF OSPM is capable of direct access to MSR0 j5 j4 ]; C" G" [" K
+ |( k; W$ t7 Q- c4 E//4 g; w/ f, v' U2 g- @- U
Report MSR interface
; R. C- Q6 K$ |+ S# M5 ^
. {7 D) Z* a5 L) O Q* Q// ELSE
- P, {8 r! _: N0 V0 j
1 ~. p9 }; Q+ n2 q, V; C//5 ]8 P9 h! o4 U4 F6 d3 o
Report I/O interface; Q3 k& y* d& [+ N2 r' B# L" T
2 p, r* g( }* ^3 i0 _9 M% e//( G/ q4 b U# V
5 X4 _: A7 G \//& K! `( M7 t7 @; ]+ c
PDCx[2] = OSPM is capable of direct access to On6 V( T$ G$ R/ `/ q. N
2 ?6 O1 o, _2 R( l/ J6 D, k( y5 l
//
1 a8 X$ }% [3 b7 ^Demand throttling MSR+ G4 F2 z+ [$ ^4 b& G6 I4 Z: g# o
: d( n0 x2 T2 k6 i+ R6 D8 D//& _5 |; Q& {- G2 O4 v
0 K7 \1 F3 u K- r) uIf(And(PDC0, 0x0004)) {
, _' y z; w/ Z
' H; o. Z" b9 o$ UReturn(Package() {
: H P5 J7 z4 V! j$ V; `/ h/ b7 D- z( q5 A. z, ?& f
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
* f/ {4 e1 G! `7 d) V, D3 z% M
$ M: k& R1 ^( L5 ~5 p& _ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}8 M, W ^( X8 A0 C9 v- r
$ P; {2 A$ e3 ?
})
7 p1 h) R3 T; Y5 _) ^
% j6 H: O9 p& P. z}
+ r1 z6 {0 ]3 v& _; h* F( w7 O8 P F% O. v: b3 h) G E% g+ m
Return(Package() {
8 }7 g8 P8 u) M/ b9 [
7 A2 N) b2 b% u/ x- B" |! wResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
2 X: z& |# B. \) Q1 }2 z* z
- z; \4 r5 r' R: h a& AResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}8 ^: G; }3 I, I- Y$ ~8 b
. y+ W) F* a1 S: _
})# u {) P# y% @7 R8 z4 M/ B0 Y# x
h$ b, E p" R}1 H* e* ~; Y! E% f! D O
0 f. S3 K5 F+ V2 K, N/ E. |6 S4 v8 e" E: o, q
, B" b* r+ [- F( m2 E1 m% Y. N7 P5 ]
l
7 q& U, u1 h3 J4 s4 i7 t* I& \. b_TSS
; J& _7 i4 `2 z# @( p! T# }: a
" }1 ~. I C# C; t7 _; H, {Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
: ]5 c+ w5 j, R# A. S, y8 O1 |Name (_TSS, Package()
# d. ~% J, T4 Q: d! u$ _{ C4 u6 r0 m7 t6 ?+ t: m! Z1 R
// Field Name. F% F0 B# s$ f. V+ B0 H
Field Type
8 R9 L$ o6 Z! O
1 c" A9 ~. l% g
$ [$ J5 Q2 h+ ^, o) O4 H; B$ s- ~$ @ w5 C& B2 _8 E
Package ()
S4 p O S N8 x* S// Throttle State 0 Definition – T0 - b5 e$ g( d4 i' T% w6 p* C
" h3 T0 g; y4 T! B% e, f{
9 F, O) W# r5 _" r$ s9 q# n5 z
1 Y$ C L4 K9 B8 m# k( Y
+ r0 h/ L# O0 h( X! L) x/ x+ V3 B, UFreqPercentageOfMaximum,
3 S, Y* e7 q& B0 `1 t3 c1 n! v& v// DWordConst 1 [4 R L$ C$ k& \: v
3 D+ h1 d! H: sPower,
' t4 q- W& ?1 K% L! o// DWordConst - [5 b" R5 N& N f
' `$ Z2 Y) K2 G2 o, J
TransitionLatency,0 o& F1 t# R& w; ]! e) @
// DWordConst
: {( G5 c- H/ G& U3 q* w0 j
. A1 o% N! a+ k0 PControl,
1 R! B- {7 C/ I2 \- `- v// DWordConst 8 G. O& _" ^* ~8 g4 H
$ S2 p; {5 v' x% K4 G9 @$ Z
Status
7 m. ~# k6 @- d; ~; P" A/ c$ x// DWordConst
6 m' f& F. r8 k2 N8 G},- r* O9 q/ e- m) B, o$ t9 R
……8 }/ A% o! C, [2 F
}
4 O( Z& T- `3 O. S( C3 ?. }( v. B. r* R+ M
Example code 如下所示:5 [: s+ _, S+ V$ f W
1 E9 @4 X7 _2 I1 D$ S% yMethod(_TSS, 0)" j* p+ W) D4 c
% ^4 }& Z5 O' S' h( @. {# A{
4 g" e# H5 R# q& r# |, F$ ^3 z& Y, `: G! V. H# c3 O% [
Package(){100, 1000, 0, 0x00, 0},' `: q5 Q. k" h8 n
! N0 ` d& p/ B& Q# @5 t& z! VPackage(){ 88,8 W( K4 O- g9 D6 U
875, 0, 0x1E, 0},
5 f; d3 l! x' c: {# L8 E
& e0 |+ k3 y0 b- t: fPackage(){ 75,
9 c' ]3 R1 b/ q9 @( M& ^, q750, 0, 0x1C, 0},5 Y1 T$ s' g* ~& i
& d8 Y5 ?$ H0 r! G& `4 J
Package(){ 63,' s2 @" ^# Y! @! ]1 A
625, 0, 0x1A, 0},' a# [& W2 K- y; ?& P, G
# L& }9 H0 i" e& ?) P
Package(){ 50,0 r A3 m* f: X( f7 q A
500, 0, 0x18, 0},
( S7 D4 C: K) R% k0 U' R5 Z% d' e# Y3 R k8 B' v/ K
Package(){ 38,) [; _2 y- {& ?
375, 0, 0x16, 0},( {; P9 r. B! _: U7 `# E0 _ U- S
$ O' ?( h! e2 Z# c( E. k! v
Package(){ 25,
" D% G' K3 |+ P9 k250, 0, 0x14, 0},
7 f: i% p+ O* O: P8 q2 X# v: F c' A: d7 ~' A0 O$ v
Package(){ 13,
6 W# E+ v& I+ R8 E4 m2 W125, 0, 0x12, 0}
& C0 y" p6 D& q- S/ x
4 ~) ] B) e! g/ p, ^5 d S}) S: ^% @' T4 h i9 @; r
" H, s9 Z; ?4 `: I+ m
9 N% v# z. w- m# l8 N/ Q# K
l9 {! b3 J# a3 W0 h
_TPC0 y+ ~# m) X' I% z
3 d+ W3 ~3 O7 J9 t w
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。: { y$ b' S- V: [$ T
, J J5 g3 G1 r; Q1 ^l
, N; l8 O" L, i7 E_TSD
) q/ q0 H E- Q# @# t 2 b# H" v2 k& F& o* G
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:, y: N' \$ v! {
. q9 p$ ?. k( K3 \+ @2 U. m
Name (_TSD, Package()
9 B6 l0 z! N1 R) S/ j/ ~' J. c( A) R1 k2 R+ @( }+ b
{
& ? T6 O H; G* ^ L2 L+ d6 C; ]/ r2 ]
Package(){5, 0, 0, 0xFD, 2}+ ?6 j; ~" c* z5 F) Q4 N
// 5 entries, Revision 0, Domain 0, OSPM 1 ~1 w0 I a( ~* q$ H
Coordinate, 2 Procs ) z+ n, m5 c) k3 Y
f$ Q7 y. n; J7 j/ k- O" e4 p: p8 P
}) // End of _TSD object
3 y: `* a1 y3 D; v # I8 D9 M- y. K
REFF:
0 @: u: d }6 a1 p0 O1.0 b; j) r& Y. {- E! ?- N9 ]- M
ACPI Spec 3.0
$ i" K4 p) M- ? H3 r2.
3 c/ }% ]" i! B( a: z8 o* c! \5 OIntel Processor vendor-Specific ACPI% D3 I3 N; D. D3 h% j( M
2 K3 o6 c8 v( X$ M5 O8 k# S7 v 2 a' N- ?8 ]& r; N7 K0 Y5 I
That’s all!6 @7 ~7 O$ `, \; j2 @- j& p
8 R9 _9 T# P" J* a, k) p% uPeter
+ R8 I* H% D6 s0 J ' P {6 d2 W! g" {
2010/10/01 |
|