|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
3 K6 U4 d% ]2 U: Y* r8 V 3 v$ Y* A" l9 C& Q+ B7 L
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工作时间的占空比)的方式
/ P+ ^, R2 I- ]! v, N! x2 M,影响系统的功耗和温度。7 K" [2 v+ C& h9 ?6 `- L: N
5 _8 H5 f% [* Z0 Y: q5 }, y
2. T-state Control
6 U* t" j) D, ~5 j6 o
0 y S4 ~% M! |9 m! x1)7 b+ a t) [( A2 T3 [$ F7 e
MSR Based Control
1 ]' X. l6 l# B& r8 F2 S6 v m- z
4 f: V: @; C$ K2 {& aBIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
}$ M% m. |: C: |& ?% @# j; q
; U0 h; g! _$ c. _; N2)
) p' ^. R3 |! _. uI/O Based Control" Z0 ~8 G, R; K$ i8 K- o
* t0 k$ ]+ T6 z
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
2 n9 G& i' y/ p% ~
2 r4 g% y) K! k4 m3)% t/ q" a+ i% u8 m, V% W/ Y6 z
ACPI Structure For P-state' s: f+ J! }3 V2 _6 Z5 ~
l9 ^+ h) x. ^2 M" n$ ]' h
_PTC' @9 w' e9 u b C& p
* {) p4 Q# g. o8 ]6 i5 F0 o* L+ G
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:
. N5 g: S6 C9 N3 G* t , [ i; H* F# S( K* _; p
Name (_PTC, Package()
2 k# ? s# }0 f* x& f1 H{ 3 D( H$ T0 ~1 [
' ^, Q% z2 L1 [# w
ResourceTemplate(){Throttling_Control_Register},
6 H. @* H& B1 X1 ^//Generic Register Descriptor & i, R: Z, `4 n) H+ v
+ }5 N$ }5 t" @( N1 O, U. OResourceTemplate(){Throttling_Status_Register}
6 a% ?- C7 ?: |* X4 Y) R2 C6 P& e//Generic Register Descriptor 9 {( `7 O& ]# q! y+ W
}) // End of _PTC
9 E# W$ i2 Z3 n$ N6 ^; M
# K) N/ }' O$ z" i1 N. n0 ^下述是一个sample code:
: @' W/ H8 `: r0 n. b / [ V! J3 `4 a7 A8 \4 [+ I
- h' e. K/ F% K4 x' r+ g//* j! [# _+ }2 Q$ l: q8 X/ {
" J" U" s2 k& q" i& P. v1 b
// T-State Control/Status interface2 P" t9 h- {4 @
/ D" r8 K" n t/ `3 a5 q0 T
//5 s6 g& B5 o$ u. |
) X& K0 }# m9 v- e) k( s- }
Method(_PTC, 0)
. Z/ x' b. c' {" x* Z
% p- W3 Z* G0 `$ R- C{
9 F: N/ S" G$ e7 X2 _7 k% m$ V, E8 m; a0 T: \# L; x
//
# Z8 M1 g2 H% b3 ?1 K6 m: t# u. C* ?7 a) @% ~
// IF OSPM is capable of direct access to MSR
$ n8 D/ ]5 p$ i1 f
; ]4 R B: k* E0 [" j# a//: K2 k% E* o4 x3 B- C
Report MSR interface/ Z6 |! \6 k+ K2 u. ~
9 n% p" p3 \ j7 W- l
// ELSE& t% u. J2 s# |% U% k$ z( A
$ r9 e& }; b2 M0 @9 {1 i//9 O5 h% i* F6 f
Report I/O interface
: G) r7 j2 A2 K6 ]- n7 h
1 k+ x6 h) {/ P: x; C" M( O) W//
7 K0 v3 X" Q+ @+ S" D% p5 H. [
6 y" e8 _8 D p//
! R7 ^0 @ ]. ?$ W( }- \7 V$ b* wPDCx[2] = OSPM is capable of direct access to On
: I! \% X. M- ~% I5 f. N4 T
% k$ h7 w" i' W! @8 O7 o! R/ P//
1 ]& P! P9 ~$ o# S" M& D8 }Demand throttling MSR
* d9 l; n+ O* W) K6 W$ g/ Q, D& y1 s! p: F: o, R
//9 L) n1 D" {: l% Q3 r
% Z; q3 P ^7 E: o M" zIf(And(PDC0, 0x0004)) {5 ^0 z' J8 |% l, q+ u3 u
8 r$ j- `# @) w3 sReturn(Package() {" w0 [# Z0 f. W% {
/ e' L$ N) [8 y, W' S( R: _
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
# R( @ p$ l9 i* h% w1 `! x
2 p5 J: S( N" V* ?6 n- JResourceTemplate(){Register(FFixedHW, 0, 0, 0)} e2 o+ V6 P8 v: e5 {6 S3 @' S; R& Q
7 o7 d1 w8 }2 q& J: V})+ u) P2 d6 w6 u9 H# d1 i
- n, Y" D9 K9 o% a2 ?* d" p
}5 r$ ?: M6 K7 ~
, V' c8 R d0 h0 e0 i2 jReturn(Package() {9 o y5 _: P# s
1 b" I7 j* ~) o: ^+ Q; ?9 A- O' VResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},! b" w" w# B+ O( R+ d/ h
6 T& ]0 a( P. M O( w3 S/ \9 ]ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}2 H- V/ o6 ]# Z% B( i
6 \6 ] p' a3 I) [' R+ y})& w$ H- m" U0 d+ h7 D
2 C: A) w5 H9 h3 b8 h}
9 ^8 s4 u# P7 { s* N/ @ m2 y8 i
3 `% w* s4 X' q$ s( [! A' _
" W8 ?1 e6 h0 @
+ x! B% g1 w9 F3 Bl
7 o# h7 o& D8 a4 T_TSS
! w/ d) P% q) A% Y; A" w# S: u6 [
" D2 y. R+ k: B1 GThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
9 _" _. X( Y( d. ]- ^0 gName (_TSS, Package() # h. J4 t5 E3 t# m$ x: E4 Z
{* u6 \# W; Z+ r$ W, M
// Field Name
% V8 e1 X K7 b& c" T& P( rField Type
& @+ i. U' n3 u7 Q1 C
& _, c. a. n3 P: a
' A6 |, t" A( L+ e1 ?2 I3 A5 c* \" ^6 a+ `: h
Package ()
# i; k0 }8 T2 `+ `// Throttle State 0 Definition – T0
( C3 n- o; e; N5 v& Y* Z7 w" }% p3 z" w+ f8 g, R! L4 T$ A; K
{
* d- `& W7 c2 ~9 p; I; Z" i: p$ r5 D& N+ K& h c' }: a0 _5 s6 J
8 n7 \# ]# I7 GFreqPercentageOfMaximum,) [; f* q. p8 ]5 ^% \2 O. g- l
// DWordConst - Y! g2 [7 O; [- o" K, U' M J3 m6 H
. Q1 v) ~; ?0 s/ Q9 [Power,8 G& e- k0 W8 p" G
// DWordConst 6 i( m9 s4 N7 K8 k* k' X9 m$ Q
m9 ^0 R( k% i0 @5 c
TransitionLatency,
* N4 h! X- j' p- g& f; o4 H// DWordConst ( B, `+ G# w7 |( w
. w- D+ A2 `; s/ W1 a! i. g7 b& n
Control,
1 ?% Y# z! |" {7 u// DWordConst 3 F3 [0 t7 d/ `5 O0 O
) T7 Z4 T* i# {Status
- ?/ D; n" q" ^// DWordConst 0 \) p$ ~8 L, S" V
},% F4 Y. ~4 y1 P+ l! A& Q/ J3 P
……
7 {* O. ?: C$ v4 |} s0 }" K; F1 b. c
% B& _6 c4 r8 p) C: `
Example code 如下所示:
( z0 v( o: U" j( T' R4 b; z. z6 x' ?/ Y# }, |; L
Method(_TSS, 0)/ f7 @# w8 d2 D* a7 {
6 ]1 `3 X( C+ J* a
{
1 l3 g% {- d. M: z$ B, G
% N8 _. w3 ~ x3 B( p- m0 sPackage(){100, 1000, 0, 0x00, 0},
3 _' |4 Z* s7 \1 E+ N/ j
+ u) a, V5 S- I- E: sPackage(){ 88,4 W: Q/ ]! K% S3 G0 R6 B
875, 0, 0x1E, 0},
+ x; L' k3 X4 f( ~! G9 v! ]
c* |7 s( h& y$ z' X0 JPackage(){ 75,
2 S% z( b j, o7 ~750, 0, 0x1C, 0}, ~, {7 U$ V8 a; P+ B
# S5 J& q; E+ m5 L/ S9 E' g
Package(){ 63,
/ s8 M, ?2 @+ ?; p625, 0, 0x1A, 0},
; N# j& Q3 N! H" J
% L( a U+ v5 BPackage(){ 50,
4 P7 u* U4 U, Y5 f) i/ E7 \3 f500, 0, 0x18, 0},; h" i3 p0 h& t8 G) c2 c
# [9 R" u( T0 k% k
Package(){ 38,
. ^! q( h- m7 s; _3 u375, 0, 0x16, 0},6 q6 h7 e8 }* f' g
& ?$ _- k6 D5 ^4 M uPackage(){ 25,, N. ]% v4 b Y. o4 F
250, 0, 0x14, 0},
4 R* z& |0 u9 u! I) L1 f6 E9 i/ D; ^( B* A
Package(){ 13,
2 C7 _) E' V- z' Q% D9 ]) w& y4 x125, 0, 0x12, 0}8 }9 x# w7 v% c4 r, `; \
& G, r2 J( J5 H+ e! d( g" ^: D* Z6 z
}
4 |4 ~4 a1 `% ?" o7 K% }, o1 f: X$ M; Q2 [6 l/ [
, f- C8 g/ z# @
l
& i9 q3 m; z8 q: S. _# r' m% S_TPC9 a. T! |8 x) x) l4 H @5 u
8 u" {6 Q+ q4 T1 ^# a% ZThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
* k& D* D7 \ h& t+ } |
4 o2 ?) ?* A" B7 { P- ~l
1 A; x6 e( q' N1 D% A/ k% b_TSD
) m1 H- C# P: h5 B: Q 5 s; `/ P1 B' `+ d' [! |
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
' N4 h. Y: d' e2 i' Y+ j. T
3 f5 E# d$ Z& WName (_TSD, Package()
7 a5 [0 R1 ~/ y. g+ {
: n5 {$ V" k% q+ E# K6 v' k1 g7 C{ 7 g& {7 K1 W& F) t! S
6 _: q! z7 q* F9 L, _ s5 v4 f
Package(){5, 0, 0, 0xFD, 2}5 Z: t4 c9 [) j3 e* h) l5 ^1 l- b
// 5 entries, Revision 0, Domain 0, OSPM & [: X/ p7 f V- f- b, O2 k4 {
Coordinate, 2 Procs + o }$ n: r. E# |& ~
8 E, W) Q% o7 E( U& W7 ?( k! }7 e( ]/ U
}) // End of _TSD object* v; U8 | h& i$ J7 v: G
( S& }7 Y$ @: l* x0 h _ l
REFF:
5 y# X( |$ `$ j5 O! H1." e7 J. _4 m+ c) ], b
ACPI Spec 3.0
+ u R- j; S+ v. V, s1 O" U2.2 b2 H- u" q- E- L& J( x
Intel Processor vendor-Specific ACPI
! p S u) b0 I , A/ L0 v0 R3 k. \! f0 d1 g. [
8 X1 v, O; |5 }+ r0 N5 W KThat’s all!
3 i5 J/ }9 p R' Q4 _ ; n; Z; A6 ]0 \6 r1 B# T* @+ k
Peter
, u8 J1 C! [4 G, S7 T; ]2 K ; t% Z# q! A5 }3 S$ y4 b
2010/10/01 |
|