|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
2 |; o$ n/ U' `; h6 D; U 6 L0 r- Z: p% D. k3 T
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工作时间的占空比)的方式. M4 _+ f: X) g4 K
,影响系统的功耗和温度。& Y5 g' H, U! `! G
( G6 j7 ~' _* Z0 p
2. T-state Control
6 W, o4 o% \8 a) }
# f, q* v. U9 r( H3 C& t- e1)
) V, X5 o; O4 V$ QMSR Based Control) `" |' l3 d" ]
: v! f& n& [3 j( r$ o0 w: `" D* ?
BIOS可以通过IA32_CLOCK_MODULATION去Enable/Disable clock modulation,而且也可以通过该register的bit0:3 设置CPU Clock Duty Cycle。当FFH在_PTC中被使用时,OSPM就会使用MSR IA32_CLOCK_MODULATION做T-state的转换。
3 @4 A1 w3 e5 _4 T+ X3 X
( G4 t# T$ x# z( r2 v% r" ?$ k3 K2)
* u8 ]6 h+ s% @I/O Based Control
7 o) y; @8 @* z& U. z
! q5 S( i2 F8 R1 ~5 n# v除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。: i) X. N4 m; C
4 E- d# M3 T5 R$ U
3)
; @6 }3 K( D# D- O b( L% JACPI Structure For P-state
' \; @* D9 u+ B' e# ?4 d# kl
; }& E- W) f& L1 ]/ [6 j6 K_PTC! u( u0 M; D E$ n
# Q. Y0 S5 V6 q0 P3 G
Processor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:7 u1 b' J! b8 w; p) `( K
c. G, g* @0 ?3 j8 T% F4 q
Name (_PTC, Package() ' x7 k5 X2 W/ h% G( e6 I5 j
{
3 j; n& {1 F3 N. X0 d4 k* o4 f) w9 p- i% l
ResourceTemplate(){Throttling_Control_Register},1 V, P& M8 G3 w5 u& S7 m7 q
//Generic Register Descriptor
: {3 j( y4 C$ ]' k7 n: B7 i
7 i6 h! [ L& H* Z; a, F& O+ a& w- RResourceTemplate(){Throttling_Status_Register}! |6 d& M# y& J E, j
//Generic Register Descriptor
* S( m6 R: @& H5 n1 F}) // End of _PTC! P5 D, |1 G8 a. G; d2 N7 X
- w( m4 A$ Q# F( ?9 ]: M: ?
下述是一个sample code:' V @" g2 ?8 q5 C9 [2 k- X$ l
+ R" v* ^2 h! C7 ~% f
$ ^# ?( z; O% e* e//
- w5 s% r8 ~4 B9 ~& Y! Z* d7 N: O' P* H P1 N" {' _/ S% ^
// T-State Control/Status interface
! T! A6 g8 j7 t" U( B5 z
5 ^3 b" o9 ?9 }* I# I" l7 \" K//
0 A$ b/ [% j. e, j% v$ c- v4 T* s8 R4 Z8 m3 r; h
Method(_PTC, 0)
1 z, D5 x$ e9 G' U( R% u/ I! F5 b D0 d# x; i
{' u% Y( v# n% J1 w, R4 o
: V( ]5 f( Y' f. V8 b, z/ `+ `3 K//- H5 K( e+ e5 i) q6 _* b
! q5 g# a! p+ a1 q j// IF OSPM is capable of direct access to MSR
! G1 H* A7 }* `" q$ { a, _
, d, _* R5 K& \. @$ {) n' J# |% j//
3 ]( @: S& E0 }2 l. uReport MSR interface, E1 g5 g8 Y3 Y; b% \9 R L
, N* V8 j, H' b7 y/ U
// ELSE
/ Z7 ]1 \( X3 M, N' o N4 Y6 Q+ Z3 c1 T& F% P$ j- S4 T4 R
//. _' z& D7 {9 R$ F$ D1 I9 n. S
Report I/O interface
" Q" W) t4 _& C3 C( w# `' e, G- j9 `; i( q5 ~" x/ h- E$ m' O
//+ E$ {5 H) I( q3 I, P! l
3 R- e7 I+ U7 A& p3 |//) ~" G* p# ]$ I( U$ L- h
PDCx[2] = OSPM is capable of direct access to On
$ q3 q, v( ?2 e( T/ ]
( ~: l. |& B+ h. e1 I' V//
, _6 u# M' e; l2 P8 IDemand throttling MSR0 K/ P7 \. e3 _: `' B
0 X$ ^& _0 y; h. h# d//1 X# K+ |. N5 `; K! p+ a2 x9 J
9 r% B& F' M( z8 hIf(And(PDC0, 0x0004)) {
# k, h0 `8 U# \! e" I
2 s: Y8 w. L1 S" M% `Return(Package() {
3 r8 q7 d9 Z/ c) `1 y0 u8 ~. ?' W! }/ _5 }( E! D& l( n0 X( @& k6 B* {
ResourceTemplate(){Register(FFixedHW, 0, 0, 0)},: X7 P R9 g( O, x1 _. [: v' g
# L+ Y0 B7 o- {: ]: G9 D6 UResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
* S M# N, S+ u# ~( _- n: n2 i# K8 M2 S2 v# f
})# B9 b* E' l( _. {5 T8 p; L7 s
" _1 C9 `; W4 E: i0 r! F}3 z+ x. y( E& Q# {% s W4 o
' h: |5 O: D( {8 B. eReturn(Package() {$ K. L$ h- w Y1 K) O& [- ?* r
J' }+ g! [! s) Z+ o! x6 v6 _3 G
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
) o/ A6 F5 K7 M3 [0 q4 I Y. \; U, i9 b0 g) G0 T S
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}- T: o& C" `/ e' m4 _& u, b
% u" f% P" y! z8 W: b) F})
0 Y! W5 z/ z* q/ K1 |( d; f9 L( Q; i0 \
}1 Z# @# D8 C. X+ a) J$ S
" g% w: ]2 ~ [
/ o5 V1 m. t7 p" J6 |* o: v& z* d: I* Z! ]- e$ e
l8 F( L$ G) a X* M* P
_TSS
( A$ l4 K5 W9 w5 o& P$ f* F7 a0 [
# |" j& W, ?( @6 i! E+ PThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:
; ?+ M/ g* L# x( R& q5 Y2 xName (_TSS, Package() ! ~6 t# j! Z9 \% ^
{( Q; Z# @2 e4 Z5 p
// Field Name3 r7 a. g. \& U4 E+ h- n" n
Field Type 0 p% W' ]$ L' g# }! D
) F, k+ n. h8 y; E
' ^ a- {0 [+ e9 J' Z6 g1 h
0 }0 ^$ S. q$ |
Package ()
8 r6 B5 C3 R9 y: E A! p// Throttle State 0 Definition – T0
0 g2 Z# M( d/ p! Z7 N: R* J5 z% Z2 W
{+ s) `8 O' m% ~( E" _& ?
X4 t* t p( ~! W
; x! Y) j% v7 M: H) L! X1 }6 j' {FreqPercentageOfMaximum,2 T# O$ v5 Z9 {) f
// DWordConst
/ C2 P2 ~6 M5 c9 Z1 O% V! I+ X4 }+ Z0 t7 ~: Q5 p0 X
Power,( s9 K/ m0 g0 A' `1 r7 p0 e
// DWordConst : z$ [0 N& F1 L, S
5 O- J2 k- |) o" ~TransitionLatency,
, F( U8 y- G, d: W7 D// DWordConst
+ s1 U4 ~+ y2 y8 L o: l$ t5 @3 {& F% c5 d& n/ R: L3 Z9 _
Control,
9 I l9 p/ a2 }4 _// DWordConst 8 g9 m3 I. N7 E- u; N2 B. t& E
$ z6 ?. F w7 G8 x/ j$ ]+ sStatus" d6 H1 K8 s* F
// DWordConst . q% k; ^* a# y" b8 }/ h2 X
},
) n6 H+ X- Q8 H9 y x……1 N# _1 S5 T7 r' d
}; |- H/ }# H7 P. B1 k" J
! g- l1 D" L& c, Z+ M* V
Example code 如下所示:8 D( `$ G% T2 f8 ?" J5 b
( o* R5 t" z; B4 W
Method(_TSS, 0)% `- s7 o# S: k7 ~
$ q8 l8 U( M) G8 D) ^9 {
{
* i# h' Q1 J1 R* z, g' M6 b, E& T* a1 g$ @ M4 w8 Z+ @
Package(){100, 1000, 0, 0x00, 0},3 O% E8 V3 R: g( N7 B8 b
0 e( R5 n" d' j0 ~1 @- gPackage(){ 88,! S, B4 D6 m, |! i* w9 h
875, 0, 0x1E, 0},' Q6 j1 B! ]) u$ b
: ?! R G/ p/ q) F( Y
Package(){ 75,
5 I# w ]! W5 x6 g* N5 x750, 0, 0x1C, 0},
% Z- x, O( C/ |6 N/ c1 Q1 z/ {$ K3 z
' ?; i: \3 G# S9 I/ K( y4 o2 g9 A' mPackage(){ 63,7 A E1 G- j0 q0 c0 T& u; ]8 K3 u& W% Q
625, 0, 0x1A, 0},
1 `3 q4 W& e( [$ [3 O2 C
2 c- D8 W6 K2 ~" }Package(){ 50,
+ a4 y' v! p, y- s/ {# N500, 0, 0x18, 0},8 N# u4 |$ f9 X3 r4 t" n8 P; j
/ v. m* O- q, z, B6 u" e
Package(){ 38,
' U" _: Y b9 u: y375, 0, 0x16, 0},
% j# S6 H M8 F8 }$ i1 Y* z2 S2 w' v% j+ b% ?
Package(){ 25,
5 _; ~$ K$ O( D250, 0, 0x14, 0},
% f1 d& |- w) p6 [ [
, q6 `' b- W. S/ _4 I: f/ m4 I4 bPackage(){ 13,
/ \/ V8 Q% d; U( M0 w; Q125, 0, 0x12, 0}
) y! Z/ t( J, {4 e- ?; Z% C8 K& b8 R5 m
}
, ]2 D! p0 g+ X% O! N5 p1 w1 H8 U% ?0 v" y! p0 O
9 y: d& X* u$ i+ Q& Y0 p! ?
l
6 l. e9 s L0 c; ~, K4 K5 P4 n2 {* S_TPC9 Z( Y6 Q8 A0 K: V1 D) |3 l
3 d# M- b$ R7 g! T+ J( h( P& s
Throttling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。7 ?6 S _3 A- G4 _ }$ D
7 a: F9 @ o; s/ A9 e1 x: Z! G/ a+ G" il! T; s1 x' i& i/ D! P& I- q
_TSD0 M5 }4 D! d. G4 P
3 [) O2 ~0 }0 a: G1 a/ P
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
8 k: j; o4 ]0 B# F+ F9 |1 D . e2 C. H, l+ Q; J% a
Name (_TSD, Package()
1 N; {$ x* {% v# T. H, N" r/ D. R
2 L: E! s3 g3 E! g/ f2 B{
) _" ~/ c7 v3 M* [4 A* `' O' F2 X% V0 G. i- Y
Package(){5, 0, 0, 0xFD, 2}
: w. E1 i- T. \) k// 5 entries, Revision 0, Domain 0, OSPM
# g& ?! n; W6 ~; JCoordinate, 2 Procs ) @' |' O# Q0 b- ^
& ~2 G( L' X* i
3 O- l1 a, ^9 j$ R2 w; I}) // End of _TSD object& i0 N4 i _& X2 K# d
6 |. ^$ w( ?! D$ l( q3 {2 M+ ]
REFF:9 E2 X/ k% x# P7 w% A5 _9 d: y
1.
8 C4 O9 c- i" I1 a7 lACPI Spec 3.0
: ~% K9 ]; {6 h! D1 r r9 e2.
: [2 R" s+ u3 w7 FIntel Processor vendor-Specific ACPI, D6 ?+ p. m; _4 O
5 C9 ]2 R2 S" A$ J
& l9 g( E% }7 G3 o9 u# _
That’s all!
+ @6 C9 a; L) j6 [ O# Z& {
, s; g! s7 |* t5 GPeter
7 B; g2 E7 a7 G3 P. Z: u9 O% F ! i6 C4 K- F; _& B' E# i. K9 h
2010/10/01 |
|