|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
- ~0 {# i; y& n5 Q# y8 N
7 x/ c: K7 ?. |8 W3 [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工作时间的占空比)的方式
, t) I; ^" T, S: O1 M2 C6 S,影响系统的功耗和温度。
5 `) k& R+ W+ z" q- o; P/ ^8 u1 \
+ r6 ?# J- F. M6 o7 x j2. T-state Control9 y$ b5 R, f' W( U. A
4 E% j8 K& L. q9 V1)
7 f, r- a% @- O- P1 t! f( f, j+ jMSR Based Control
& A) W2 a$ m4 g1 s8 M! O 9 z% y0 h+ z0 N+ f7 ~+ D" N
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。 9 T0 t7 n `. g" z3 O: V& y/ S
. _0 W8 B) U% @! G% ^
2)
! ^/ B; u6 J. W' x2 e# w: qI/O Based Control# O" Z" ?+ z* m8 T5 [0 D2 Q% }& b
( L3 s& h T, a# Y6 V# j4 I# Y
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。2 Q7 V2 E- J) q0 y& Z8 Z+ f' q
" f- B+ H! h# g' J5 ~ b* [; ?2 b/ |( ?4 T3)7 O( L% W7 b% F# K# p3 h
ACPI Structure For P-state) K6 P* O( c$ Y
l
8 R* L6 I' W: \& r_PTC
( ^" h9 t. g4 ]( y 6 [) T* q8 P$ y2 M+ R! p
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:+ v- b" _4 Q1 E8 [
+ k7 _2 ~# \ p$ w8 s, U. ~
Name (_PTC, Package()
& C; g0 A1 {: X- g$ G' n) q( P{
" K5 Q$ ]3 D+ l5 V4 q/ x& k$ q8 `& a4 q8 Y
ResourceTemplate(){Throttling_Control_Register},6 v, i/ l! u0 o5 s& @
//Generic Register Descriptor
+ R8 c( [6 V7 X- v
0 _% R* T' [ N! o. n* I: N1 OResourceTemplate(){Throttling_Status_Register}% ^2 _$ j. { K* W6 G h4 E$ m
//Generic Register Descriptor
. b9 y- n; T2 ], @2 r7 t6 `% `}) // End of _PTC
/ e p* X3 E7 Q1 K ) m5 H! O, v+ Z2 M+ u, @
下述是一个sample code:
1 k& d, y' b7 Z' {, ]$ A" \5 z : i. Y v' G$ L9 ?7 f# X
$ A; V9 T! o" \
/// M# n% m3 g, ^( e: v, t' ~1 t
- l* E7 ^# u( C" n// T-State Control/Status interface+ D# }* n1 t; u; A
1 d9 q/ T( `6 q- j. q5 \+ e, h
//" l: I! Z& k8 S9 `
% g# h6 H) `9 F$ _6 C! O4 Z4 GMethod(_PTC, 0)7 C" F. t+ M" n' t) \
1 N4 Z/ |: b% y0 A$ G0 C
{3 L- A4 Q3 Z# @- a
}7 \ a8 y4 D
//
& N2 V9 p9 `: n4 [$ ]
2 Z6 f% }7 j" |, g// IF OSPM is capable of direct access to MSR# y- k2 j, }5 `$ b
( a; o4 O- d5 W$ U1 c% W//
5 a8 J# e" E2 L* T2 zReport MSR interface
" Y1 A; v# a1 c7 V# N2 b5 |$ Y" f2 {
// ELSE( X) p7 g( @5 m" `1 [$ Q% g
* T# j. X" z: V1 a4 \
//
; ^/ y. _) P/ \: B; Y: jReport I/O interface
8 a8 E% Z1 }% c3 x5 B9 O* ]2 H: I4 G& S
//
! o$ z) o; v8 p
. R3 A, L" S3 y) s" }//
7 B% ^1 W2 I" k; B7 q# |+ cPDCx[2] = OSPM is capable of direct access to On
+ Z4 m9 S0 l4 T/ b7 E3 {, j6 J" V/ h
//- ?% E! e5 I) ~) [% B# @6 r* U
Demand throttling MSR8 W1 f; E% Q: y( D. \: K
; h- H/ Y9 m# |& G$ t//, h: |$ Y3 c* V3 J
) ^6 Z/ H$ i' ?9 {If(And(PDC0, 0x0004)) {
1 f# a2 b$ R. J) T; F; r3 B1 N4 l
Return(Package() {
7 d8 s' \" L3 C& Q8 B+ P* v2 e7 c: y% m( F9 r# w
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
) \& x$ K# E8 ?" g) e% k1 B4 T7 |* k: Z8 q$ W2 v4 D o# X9 _8 `
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)}. E# p9 y9 Y" a
+ x. z9 [# ~. I9 f. m7 S$ J})
7 W/ E1 D7 H; |- U3 [8 T! f$ q* a
2 x/ |- ^6 Q$ r- @/ E5 O3 K6 K}
5 A- Q& M" ^" ]% N% \% O- M8 ~4 t# L2 k
Return(Package() {+ p0 x; u6 G4 e8 g7 ]/ Y
6 Q* }. E' ~) N8 W# W( o4 [ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
3 j E& b% a$ M. N. H! M9 L; p% D0 y9 q+ c, ]& Q$ \
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}
& e2 B& m! w! g: D5 M
) u. S3 A# U W4 f})
# |% v6 [5 _9 P3 C
( G' W* V# L+ g/ W" @! ]: ~}
- g- |2 `* H! d q: x
! \- o. L8 ?) `3 E$ M# _# {! b% m; K
2 {1 x$ K; y& I. M! ^# A! y" Q( F3 i
$ {8 e7 f% ?& G H% v9 E; r6 {l4 U( y3 p+ l5 I7 Y$ p( t5 R
_TSS% t% H0 b4 P0 B5 l4 R& i2 S/ V
Y& O; \! O8 @1 n0 M& D- X
Throttling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:5 F% q9 U- w0 o0 ?* h% J$ Q
Name (_TSS, Package() 9 n5 v5 H0 T1 B4 ^/ \7 ?9 _
{8 w. f" w) ~8 S# V
// Field Name
1 g9 [5 w& N; N' m+ |Field Type
6 h/ e' ^4 E4 w$ c: k! m: l3 z2 Y$ u" a; X
M& J1 C) T! K2 [, y2 x* M* v, T2 s" Z" w: v5 o9 B
Package ()
0 t% u# h$ y$ q) }' ~5 \// Throttle State 0 Definition – T0 8 J$ V- U8 ^- q8 H
$ f2 y7 m9 @, {9 x/ [{
# i; K, G5 @/ W! N2 F" d7 b
* `9 J2 m" i F6 v$ G
0 f: P- m$ m4 \1 }8 ]" CFreqPercentageOfMaximum," r0 \" {( {4 P3 P0 U0 J. R$ O
// DWordConst + T# J5 N2 b I
. _# F' g- R+ `Power,
4 @: x5 w- {! i% J7 i4 _. |3 A// DWordConst
9 j3 t6 x8 `2 \6 Z$ [ R/ j p' H1 x6 w4 {1 E# }
TransitionLatency,) b" t( S# S$ d+ i7 q$ g/ c
// DWordConst ) Y3 P7 P/ t2 O
3 C' F/ ?8 n+ I& a. _# a7 XControl,
6 W# h# ?; z O) W: D// DWordConst
/ h$ m. b- }! ?% f# c
+ l7 d/ w& f) I# P* hStatus
! ?* f: i4 u$ R- x# t) i// DWordConst
A5 ]( \6 t2 M3 S. N" G; a, a9 o},' f( B' ?3 ~' A3 f! O% f
……
' u) d' b- B; c+ B$ k3 K: B4 z" M}' B% H& p( I" N8 z
1 S, z: ]" F/ }8 _. p3 |
Example code 如下所示:
0 m- l/ m [# h! }; B0 w2 P) f _: E- W4 r3 k! S. E
Method(_TSS, 0)9 G! H3 r+ x) A# A v( W
" f, d, o3 E! d& S. p. \! s ?- a{0 i3 W+ R; I, p5 U+ r6 s0 E
' _) H/ H' ^4 _6 Q3 B/ ?/ zPackage(){100, 1000, 0, 0x00, 0},
0 Y+ r0 i" |; w, o& f" h' b) z* T; U! @* {. K a
Package(){ 88," m5 d" n# L3 F8 t# {+ ^+ q
875, 0, 0x1E, 0},' B0 Y- _/ w4 v( K+ Q, y7 w& [
+ t* k" ~3 j& _
Package(){ 75,. \$ Q/ o6 a' `! Q
750, 0, 0x1C, 0},
" K3 L( `" Y( Z5 y0 t8 d* f8 d5 ^# ^/ I. t- s" _" f' A
Package(){ 63,
8 C$ v" T2 N4 F0 l, x) N625, 0, 0x1A, 0},4 R4 {: ]0 ]. n2 V0 Y! x
7 u& [1 g4 c' }Package(){ 50,
% p# W: y$ O+ i4 D9 S500, 0, 0x18, 0},
( o) I+ \+ u1 C2 c5 G6 q
6 d" r5 e5 [+ X, q8 g$ o0 b( t0 fPackage(){ 38,: O3 O7 q9 `% O. `0 {. [& s+ s- ?
375, 0, 0x16, 0},, y7 a' G5 M7 E
' ]' e& A% ?' i; G! W7 S
Package(){ 25,3 J: h7 @0 @5 g# w
250, 0, 0x14, 0},
6 _4 g; Q' H# P* ^" w2 u' u+ ^. g) c4 O/ M" l
Package(){ 13,, O9 ~& Z3 r4 Z' v6 j
125, 0, 0x12, 0}
a8 I, C" J1 x5 [! W/ [& M0 x9 k7 t0 E- N
}' a; E# N5 g7 ^. i7 D
" Q0 |$ R, b+ p5 O0 u6 M
3 {6 w1 v! z: y* ol8 S% \3 \$ h. W! D0 {- O
_TPC* s3 X: [: `4 q; _
% \9 R) s7 B, K7 j0 k
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。+ {) O& [1 y, a J4 v: E& z
" i* |+ s# G" ^- S9 R. O7 Xl/ y, d x: d: @. B; P
_TSD
: e# H4 E" ~- N+ C % O4 T; P7 c2 e/ G I
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:, x! U0 r9 T; p m3 h* r* R
) L: a4 s5 r( l
Name (_TSD, Package()
+ d, l0 b# R" V7 t+ m/ [: N3 N' u* f, T- ~! w. M
{ 3 W8 b+ D% a) C
4 G% M1 b4 p( `' {Package(){5, 0, 0, 0xFD, 2}
+ K L, `( Z' S. X! V6 @' ~// 5 entries, Revision 0, Domain 0, OSPM , {0 F2 P4 x3 y7 k" L4 L% j
Coordinate, 2 Procs
$ y% T$ U0 a7 ~" I
3 r* g u. I; `1 _0 T
6 Q8 i+ T% S5 r9 ~2 U}) // End of _TSD object T2 ^8 f+ ^' j
; x& ~; V- {$ K; G/ t4 l+ Z( Z
REFF:
7 i9 ^# W: ?& |2 }9 C- ^1., i7 ]* m# k. \ R% U, A
ACPI Spec 3.0
# H# C, ? K; t( j" V2.5 J, ~$ I7 w2 g7 `7 L5 L% |
Intel Processor vendor-Specific ACPI
& Z9 u8 K, E0 u 1 j3 s6 [5 r+ X6 X3 ~
( @$ @! [! R" l0 i6 p* g
That’s all!" w9 c9 P8 w5 z4 [
: Y7 w0 g' U# cPeter
, x/ h3 }" C2 R
" e% u9 Q0 F5 u* A9 o6 D: b+ e2010/10/01 |
|