|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
0 E5 e( K7 c" n+ C* l! T
4 N9 l# \: ?1 DCPU在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工作时间的占空比)的方式
3 T/ H( j) r( U6 w9 h) m% p,影响系统的功耗和温度。. Z. c6 ~, _( J3 t
, z, p/ K1 p" I2 s2. T-state Control* Y9 _* A1 `! N! H5 C7 _ g
% I1 k0 E: P6 J$ b6 J/ ^
1)# j& P, ^8 \% f
MSR Based Control1 j* I: X1 N3 \3 x. N# m
8 z0 N# L* W3 GBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 2 G- n. }) I p% Y+ C8 C
. W9 Q4 a& R& A
2)' A- g2 U2 h: C7 z
I/O Based Control [8 H" d5 U! }2 j
0 G$ T" R- r+ [除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。. q9 D6 [$ u8 p7 o2 S( V3 F
! Y# { E( ?8 W2 z) n5 w) z: J6 @( L3 z# q3)
# Q; }- V) v2 m# TACPI Structure For P-state
& v ]& F6 N e3 `l
/ t7 L- d" j, e' b! a4 D7 j_PTC. Q5 b( ^( g7 D/ X# Y Z
- W1 t4 p K# u6 s- t- [Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
" a1 N9 G0 a+ ^) _* N- a9 w ) R; z! H4 L" Z
Name (_PTC, Package() ; _& P& M% [- G3 O
{ . U2 A4 K! J7 M8 _* y
. g/ k7 e3 C# ?! d6 t+ E e0 B2 @4 K6 V0 qResourceTemplate(){Throttling_Control_Register},: |6 ?. D, }1 R% y5 Q
//Generic Register Descriptor - p- [" [" n0 J. j9 H) i
. H& b4 n) E6 G2 P' u) c6 u
ResourceTemplate(){Throttling_Status_Register}
* o8 V! n2 k' ?/ l: G//Generic Register Descriptor # u: P9 w7 v# M, n
}) // End of _PTC" l2 r; U0 v# |* I! }6 B
! b& i) T3 v" ]5 k- F7 X% g2 c
下述是一个sample code:( P* w' ^2 q ^) s9 r! u7 v5 G
0 R R% P8 r0 Y' m
/ `. u* [" V8 k//4 A0 g/ r% ?9 N5 y% f5 g& }5 y
4 ~- I+ ~5 j- \6 M// T-State Control/Status interface }+ a/ y6 L( m `
$ y3 O4 N+ U% H
//" e+ O7 P0 m) t
( ~3 _7 s$ @2 s) |5 J2 mMethod(_PTC, 0)
1 U e( [. S5 h( n7 n
/ ]' y( j4 C! r! e4 S H$ g+ v{
1 H* _: a0 x( Y9 o* L$ ~
/ J7 L6 o" k2 D//
$ ? ]7 v9 J( N3 I8 ~4 k7 l3 b' d3 S) S1 p8 v; u+ o
// IF OSPM is capable of direct access to MSR( X9 n( M6 E* g6 P+ H) C- L" c
1 l6 {1 G) l9 }* b. B) e9 }: b
//
% Q. _* \# I* f+ f* O8 I5 }Report MSR interface
# v% W; Y) ?3 h1 ]7 N
7 _* U6 Z! S* l( D1 |: G// ELSE2 `6 l0 t8 \; R! h. g
6 `, e/ u5 ]" S# M1 A3 y
//4 a7 S, U' [5 O
Report I/O interface. h* C& z6 x" ^5 B4 e! W$ ~
8 h |! f, A4 \: m5 h2 S// E7 d7 }% r- ]5 `3 O. R, a, n
* U+ r# `# Z u; U& F//4 f4 D, N, B% b
PDCx[2] = OSPM is capable of direct access to On$ V( z7 _: n f! j( V' K, T7 V
8 z# X4 A, O2 j6 w//
8 U. |2 R+ d0 a5 ~: x6 l# |Demand throttling MSR
: i5 o. H, J7 D1 u
' D# `" H3 s0 ]//: E. M+ C h! w+ Z8 c( K
: P: N9 g5 z& K0 I! j! O% W
If(And(PDC0, 0x0004)) {
( F3 r8 u" U; B7 I, U( ~4 `
# ^2 X9 ?1 ?/ Y' c" I- [4 }4 QReturn(Package() {
$ ^; V& j6 c0 ^, m* b- ?3 P& y) R8 C& C8 ]5 A
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},0 ~8 t/ R2 Z. u* k. E
$ F1 N9 P o. a: AResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
$ a6 B$ k$ |$ |3 B, n" \
$ K5 ?% W7 D2 k7 y3 {9 o4 I% u})
" X$ V# `1 [' u- U
1 k7 G4 Z# A, p6 u D/ `}' n6 x+ U1 I6 f
2 ~$ W& `- c* i7 u8 g& x3 k, |; h$ q9 AReturn(Package() {
2 ?5 s: S: S! m# i4 M- A; J# W2 q* K! ~9 b$ {# I4 z1 d: u$ M* c: b
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
2 `2 [6 W! D6 }* H* @2 M9 h
, `6 j; g/ Z3 F: p. i' u- uResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}. [' v" v$ u3 J
. @( R+ M% w4 o" K0 E$ l+ S4 f})
. @, z3 u b& H: J( u2 q$ c$ q K) ~% `7 R I. `+ a4 r
}
; _0 U, _6 e7 E7 R0 K- a7 R
, N3 g( V' z" Y }7 t$ n) |
! z& f' B; z& v, T2 Z& @: t, }: P$ o& U
l
3 _. _! D; ^3 }3 J9 W, j; N7 R8 e% f0 }_TSS# u* u# S# V+ H4 R$ A8 U- s
" \3 P2 R" m7 ?/ l# k; U, \) }
Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
& k( ^7 j; G4 ^ n9 B: u0 ^% ZName (_TSS, Package() & I9 c% F, h" J% B" \% J& G; B
{& U6 D% z0 ^( B [( {/ ?4 P
// Field Name2 q: u" J7 C% `' j
Field Type + k/ d1 [" |8 N+ F: u9 V S
" m! H j9 W2 p7 J9 K
3 f7 V: ?* {2 R4 H+ ?# O8 F1 x3 A
. T: C' u( C# V2 `Package ()
' E; N$ ` k# s4 y1 `7 l// Throttle State 0 Definition – T0 3 A8 H- z- w( E. H) F
8 L" l5 j( ?! V4 u" D9 `/ `
{
3 B" u" b5 n8 T% N1 q
+ Z* }2 Q/ g' W2 X
5 w5 E6 a: f# |: o7 R6 ?. zFreqPercentageOfMaximum,
0 l B7 K( r1 H9 K! L// DWordConst
( B; e0 f, A' G' V1 m- U( q( v9 i& b; N
Power,
% x. Z+ l1 Z+ Y4 p1 f// DWordConst ! N- b$ Q1 [- P$ n. @3 ]
: T6 N" @" v4 m* j" ZTransitionLatency,* e# l) _9 q2 R8 j' i" E3 w, }9 |
// DWordConst
0 J. ^4 K# {4 k# H, E' i6 R" S8 u! e3 R' `6 _! ~
Control,8 L# v& a# Y. K: \
// DWordConst 8 O9 \, `8 R* f7 ~7 c
. x- d5 h) G3 Y8 M2 \9 P1 P
Status# D q, t1 z& o2 J2 L/ g: Q
// DWordConst
& ?3 p0 z& k7 W. a1 [},
; c6 U( o/ d# Y0 u3 g: ], j0 \……6 n- I Y1 G" O( @. h9 S; E# s
}8 l! b+ @# B, q! K& _7 l
! H9 G5 [! e* ^" }( v! z: P0 g
Example code 如下所示:
. l! M* ^) U4 L! j- ?
& p5 p: h& e6 s& q$ s% [7 A& n6 nMethod(_TSS, 0)
7 @0 \# m5 d a) ]; m/ v" Y3 N
( I! c# H4 O2 t) p8 x{0 B$ E& G5 S; R; w
. }9 b% t+ I" h1 G* F9 `
Package(){100, 1000, 0, 0x00, 0},- P! R# ~0 k: r, h6 D% g T
. m# C% ]6 T s5 [; UPackage(){ 88,
$ }$ E, \3 k0 f3 L875, 0, 0x1E, 0},/ f/ {6 W- W; T9 n6 t- A
/ j/ o0 W& L0 p$ E* U, x2 H6 G5 gPackage(){ 75,# c# C' q# _1 R# G- l/ v* D8 v
750, 0, 0x1C, 0},( m5 r# q. ?. [1 T* N) n
1 v) R+ S; ]6 rPackage(){ 63,* K: I X8 E, g* `: `1 R& E6 |7 G1 ~
625, 0, 0x1A, 0},
( W. Q1 @# G( ?* d; l( R1 H
, L' V4 Q# [; bPackage(){ 50, G; Y9 C7 R/ r( m
500, 0, 0x18, 0},$ {8 p$ H4 ^+ k9 [& U( T! V: Q
& H7 `& D/ U1 \% p4 z* W$ S' m2 @& D
Package(){ 38,2 Z+ Z. _' ^! a; ^& h
375, 0, 0x16, 0},
- L) `( a7 C9 {5 C9 T: A0 y
# ?+ F# \% O5 k( Y9 R) N) Z6 nPackage(){ 25,
; o& B& y* x" e250, 0, 0x14, 0},
( N0 J9 e2 X' O) ~+ Y
- e2 W/ T. e7 NPackage(){ 13,
S, | ]4 d# c& p/ }9 S% n125, 0, 0x12, 0}
. L/ j& R3 i) c. e: r7 Q
( ^1 s+ }& P) w4 C+ }6 d T4 ]9 m$ k) z}" F4 m: r* R1 C: V' d
, `- p9 j- g u3 F }2 E
# `$ n/ Y" i5 ?# q* Zl9 g) S f7 t: G; D
_TPC
; y8 F a# v1 A$ l: x- B5 j + j, A- u( h2 f! J& r
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。0 V s) q. J$ c. h
0 _6 Z7 F# u3 t2 D; Cl
# Z) D: c, l# ^; p3 ~/ v' E% e+ B_TSD& F! E( g$ t, h/ i" N+ ~
) u7 x+ q. s! J2 L* x3 N
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
) E4 Q* R" u' r3 p$ B. e& a, l
5 L: `& G: l g- Y; v3 R. T/ b" T6 TName (_TSD, Package() + l2 _$ q& E3 T
% V& g: x. _7 M/ w+ f0 y) s6 a
{
+ N0 \- {0 H' j/ `
& Z, k, E" [) i6 UPackage(){5, 0, 0, 0xFD, 2}/ Y# p8 A! m" R* i8 J* v/ I
// 5 entries, Revision 0, Domain 0, OSPM U- T" V; W& _; e% j" N9 y7 J7 H
Coordinate, 2 Procs
2 s2 B! Q4 {" T5 Q% x
: x+ S; v$ e/ G8 {% P8 I( i
" }! c5 c6 N+ Y. W- F- ]: a}) // End of _TSD object
3 I' a0 |) u, j3 d* f+ E% H1 o/ X) i ( y8 s4 h4 \( |$ g- T- k5 v+ T* B
REFF:! H' U( N. T, t$ E
1." F$ j# F% W; H0 ~0 H
ACPI Spec 3.0
8 J. A# l0 K2 ^3 W5 t2., K* ~/ j: Q* J& n w7 Q1 ~8 U
Intel Processor vendor-Specific ACPI
; g1 j2 {8 }, Z: \* d* U Q 7 i" ]" y3 J. e1 H8 r p7 T( k/ f- J5 z
) E! T% i, N y; C
That’s all!- n4 k. T0 [; \: t+ r
3 T2 _" L% L v0 r. \$ L
Peter. D. v3 J! U. d7 {+ U
4 z2 D! @' C5 j& L$ H5 K- A* Q2010/10/01 |
|