|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
1 R, w/ u3 B0 A/ [ 7 t4 B1 c8 v5 E1 N' g
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工作时间的占空比)的方式
) I: ]0 V# c3 o8 K/ j+ G8 s6 t0 N,影响系统的功耗和温度。" C6 }9 y' |- Z1 A
( B) u7 i2 b& o' N
2. T-state Control
% c$ c6 g9 @- Y( K ) Q9 z! A9 ~, F1 E+ I7 h% g& Y
1)
6 o; W, Z& S+ P6 {MSR Based Control9 Z- U4 }" F3 x% @& e) z, X
! O7 \% b$ r7 s2 |
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 8 [* D: q7 {. @9 E8 c2 B$ z7 B7 v
1 R5 j$ A7 {3 [# e4 I/ M2)* w, {3 O3 d$ @5 l
I/O Based Control* Z/ k! r8 m" N0 r; E
, X8 @$ _8 H# V
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
1 w7 I) t2 _8 M: b2 W9 p H
( M- A" _ ? O) S3)
$ C' ^, n4 P$ G1 I$ fACPI Structure For P-state
7 w4 g) O4 a1 D7 t* ml
9 W8 R" W6 s. e$ v4 k_PTC5 o, i6 Q. J1 f- W! F- s
% F6 Q7 r% H2 w h9 S( {' T) fProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
% ^9 z% f" ?* O 6 t2 A; \$ o; K% A
Name (_PTC, Package() % u6 C. w6 l/ o9 v' g
{ - P x" }4 c; }+ s1 r1 O, U4 v
8 Z8 |$ O$ R M# j3 y7 a
ResourceTemplate(){Throttling_Control_Register},
0 K9 i! S% I+ h: ]' O1 D. n' ]//Generic Register Descriptor
4 g: |/ ~1 j/ Q( R+ _; b' b+ i5 `( R, ~! I5 }- I
ResourceTemplate(){Throttling_Status_Register}/ M P. c9 c+ o) q
//Generic Register Descriptor
5 w$ V0 j3 F5 @; _3 f: ?}) // End of _PTC
. m l f2 y- d" h# T9 Z 1 O6 G" @: m+ g& k2 x- H
下述是一个sample code:2 d. I' S: F, `+ M; e9 |1 Z
& C, W& S# c* ] f. s V$ ?
; U1 L" a# q$ v, S& o0 U; ~
//
5 l" i9 g& S( h0 N
0 s% m/ W8 G0 y: }( o* T1 T! h; j// T-State Control/Status interface
' ^8 b, |! u) ~$ b3 ^
: \) F0 K9 c0 R5 \0 L//% t6 `& p+ o& Y7 K7 b& `, O
- x, z* |7 l6 n$ v0 f6 tMethod(_PTC, 0)
+ ?6 G: Y2 w+ L/ v q2 H! N# R- L
{
4 T: v$ G4 b! O, i
8 D1 M! N, O# j1 t* h//
" Y0 G* J4 w: f4 V# h" s" @! h% U
( Z- a* y4 @6 l% ~// IF OSPM is capable of direct access to MSR# O' O+ J# \% l, O) F' G q: f
. }& N& E* U( B5 ], L//
4 j5 o6 C( d! [Report MSR interface
/ V9 ^$ q1 v7 v2 z3 T+ o- F" `3 Y3 W$ X8 y" y
// ELSE
U1 U% D# t+ D- x
, C3 a2 Q5 ]' W k" G5 r//
2 @# t( ^4 y5 @ r" LReport I/O interface t9 }, L+ o, ?# k& D0 w: C
2 t1 {) F# F& D6 T. i" F+ ?; O
//. L% k- W& z2 H+ K2 C
X; C: k3 A6 ^5 _& W
/// D: V9 `6 K- _9 D& q" D
PDCx[2] = OSPM is capable of direct access to On. C7 w, j& o! x0 Z5 I2 \$ E! `
8 Q4 y' X7 m4 E }5 ]//
0 s- I) J y' n* a( |( F- }4 CDemand throttling MSR
: [ _0 \5 k" Y. J, P/ u, M4 Z% \ E3 d. N/ p
//
. u/ K+ O( m" w% n
W& p/ c) Z5 q* @( M3 C5 `6 QIf(And(PDC0, 0x0004)) {
2 W1 h$ D9 T3 p2 X! Q
7 [8 h Q* `, t3 x- D+ A3 q0 D- ZReturn(Package() {
1 d: R8 i/ a+ d) i: I* N" K4 s! j3 C: O P% H! e- u4 z( e4 }9 g
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
6 Q9 U' K$ k/ C ]9 k& o0 J2 s7 Y7 s& p V8 U
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
( L0 J$ A& D7 G% e4 h3 y
( ?" N) |: e0 X& D0 Y9 y6 ? ^4 R})
1 Y# P1 L) n7 k/ \* m( \
0 D/ r) r" Q+ r( h7 u}
. ^: D6 l& }" z0 u5 m: R6 M/ a9 x Z" Q0 V0 l+ r4 t# k
Return(Package() {
F% [: F* I' ?& T R! d: W$ v% w
9 `) _' `% o- D {% I, Z+ t; `% IResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},7 M, a5 n4 X* O) |: p
7 b0 j: R$ `5 ?5 ~' t, t; p
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
" H2 K. r8 z6 ~) }( o1 P, j8 [8 h# A4 c( ~# t1 \' c1 {5 t. u
}); ?7 _4 X& U4 w; S2 g5 n
1 a( i! S5 a! C! N- j" I
}8 }0 T6 i* n0 r- z. H! i
3 u7 D+ g: E4 \% S& n3 T
" J3 W7 f! {5 k5 B
3 |0 T4 E7 m$ Q8 s. z* Sl
7 j* _, c% v& P, N( w/ s_TSS
! t: x2 Q* P% z# G . o& E' ^/ [6 e$ B1 c
Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
d5 b% L! l. F2 rName (_TSS, Package() * y5 _3 _% C# I1 J% y' s
{# a, k4 P) x: Y: _, E
// Field Name
4 X4 t0 @% ~" W( W; k4 BField Type * v+ K8 n; H |- G
( f0 V; E- N h" |6 g5 _& I8 ]6 b' Y! P) K& \! P8 o
- d5 c/ v1 h' _9 k0 JPackage ()6 I7 H8 p8 G0 Z) u
// Throttle State 0 Definition – T0 # s; H4 k8 s h" h6 H( |4 E; A
& `, x0 W5 G, f9 P% q, ~
{
, l+ d) R$ i/ \
$ {) S+ y$ W3 ^3 E0 v, Q" A
# f. r- M& I2 m3 ]' SFreqPercentageOfMaximum,7 t5 d/ x( r) O/ b' x3 [
// DWordConst
}& d2 ?9 j, n9 ]
9 ]# n$ ?6 u N! m! o8 {Power,
8 K) X0 ? k$ J4 Z) B5 Q+ j z// DWordConst
9 V$ ]% e# `6 Q' g9 M' l+ l8 {$ @7 d
9 }: p6 Q1 r d( ITransitionLatency,+ E, G0 r1 \7 `+ ^
// DWordConst & a& i4 `: y* D! g
& R. d0 J. a: x. |) B/ ]" [Control, }7 r: I) B9 H% K1 x$ C* y
// DWordConst
6 \" y5 V- R8 q+ e$ {
6 t. H& L- e# a$ |Status. Y( y; r8 H0 y1 K8 ~# B
// DWordConst ) {/ P8 P+ w; v/ a
},
) X/ Q; F# [& S' ?……1 x. m r9 |' w' }+ \8 h
}
A' d8 u' N6 s! A# A% ^0 o: c3 J
; `6 i& L5 Y9 O: b& R3 l8 y: uExample code 如下所示:% M% {. P. K; m- r7 B) Y- v1 x
4 j( {4 v2 K' s; v% d+ t7 FMethod(_TSS, 0)$ Q7 d. y# X8 k$ {' p7 i
! z* Q- B+ ~1 |! b
{
+ ?* K( t8 @8 w0 `$ ?5 |! s2 Z
) L/ x: e& A. mPackage(){100, 1000, 0, 0x00, 0},
% |/ h- y) r d3 a. C0 r b0 d. o: H/ T% K5 i( s
Package(){ 88,& _0 n [# g. G" ^& O/ J
875, 0, 0x1E, 0},9 | C6 I! H- Q' Y
0 c- U) L8 |7 v& D3 e% Q! `9 J+ _) MPackage(){ 75,; v3 o. N, A( A4 r
750, 0, 0x1C, 0},
: l4 G" t6 \: z4 H8 r( X9 s1 y) F4 f3 p
Package(){ 63,& s5 a9 J2 C. ]7 a. q
625, 0, 0x1A, 0},
3 p7 A3 D! d$ L6 ^6 A1 J# W) J! j0 _4 C% }8 l: Z
Package(){ 50,
. B8 U& X5 H. R/ V5 s# X% O- z/ h500, 0, 0x18, 0},
3 f4 b V, t5 ~7 R- W9 C. o3 e* u6 _, ?9 B. u9 g3 G1 x' `
Package(){ 38,
7 P! J% j7 v3 u375, 0, 0x16, 0},
9 y9 r) z t* {
% K2 l) _& _, h% s6 |+ JPackage(){ 25,
. I; }1 v% g" [* h$ Q3 Y6 a250, 0, 0x14, 0},
; o# Y4 }4 r0 K: q! N4 ~0 Z& l) Q$ S! k, p
Package(){ 13,
B9 G# R; V$ B# `) Z* v125, 0, 0x12, 0}; E+ P* G. c; s
2 `* L2 z) h' h5 j8 E) i+ P
}. t1 m( l% \! z V" V9 K V
: U6 X% Q! A6 h' Q" J& y9 x( C I3 O8 }& B, C2 g6 F
l4 v$ m5 {/ t! u* o# D" x6 R
_TPC
% {# o5 P8 K* [4 y0 A
! Y5 a% q4 }( c3 w' D8 E/ N6 [4 FThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。, t+ Z1 ?" l2 f ^
3 h4 a- s' {. j* O
l
+ B6 U2 ^4 D f, [& H- U. g_TSD5 d" E# k; I% n
E! |: F8 h4 `0 N, d* `4 N7 N1 P
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:2 i+ I! j: `, R u5 F" d3 N Z
6 F' q' |( r$ A! F' _
Name (_TSD, Package()
+ [$ t* j4 ?" p. u& R- i5 v7 N8 C4 j6 K" V, X- e! C3 B! _
{ , E2 ]* j! i3 O3 T1 R
7 d1 [6 }6 L) Q$ m' h, h# ^Package(){5, 0, 0, 0xFD, 2}. e5 e _* a& F6 W) y( Y* d
// 5 entries, Revision 0, Domain 0, OSPM ) I$ v- Y- f6 g, V) Z! m$ V
Coordinate, 2 Procs
5 v: H. m+ j. n# _4 l0 `& C- I- \
; C0 Z8 \# O% ^6 e
- J. T8 @8 U# F& z2 o! r, i s) ?' S}) // End of _TSD object, c& f- p: A8 c0 j7 o
$ X* Z+ K! B. e$ e" a2 U
REFF:
4 f' n& W8 s/ v' s1 F( M2 d6 J1.. J4 H, W5 ~" L! [& K& C" f3 |1 F1 P
ACPI Spec 3.0
: l+ n& f2 I5 q3 `* B8 p2.
& K! Y) P: p. G: B7 A: _Intel Processor vendor-Specific ACPI
6 B9 s4 q; R s1 _3 u
3 J0 B1 ]6 g- ^7 @# _
2 U& j; e* d. w. e( xThat’s all!
* ~8 P1 T; [( A9 o/ e8 ^: \
( ^" h+ y6 m1 O% i, x2 KPeter2 j' c% o1 q( k
8 S! { S& K4 g2010/10/01 |
|