|
|
楼主 |
发表于 2010-10-1 20:46:32
|
显示全部楼层
T-state
1. Overview
/ ]$ }; Y) c; }) [ 2 U- v. e( O' d2 L3 w4 `% W
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工作时间的占空比)的方式7 |, e( n$ W9 _: J/ u) z; t
,影响系统的功耗和温度。
' h4 C3 t8 f) \. |
% V. o, |4 s; e) H. S$ O7 c0 a2. T-state Control
7 `8 E% X9 j6 k9 [
# k7 O. Q0 r% d9 T1 C0 X, s N y1)
+ m, @( c/ G6 O; Y0 d0 K) e- NMSR Based Control* L S9 N. L! h
6 z4 y7 e6 Y5 [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 M+ N, k+ }1 I$ i/ G3 l 7 X1 c$ O8 K/ U) H. Q: ^/ b( C& D
2)
0 w: d0 F. G. j$ I) K; L6 TI/O Based Control8 [2 o: P; s2 p/ a1 ?% G
7 Q/ O- ~- H7 W1 w5 k0 Q8 Y( H
除了基于MSR的Clock Modulation,新的CPU也支持IO emulation 的Clock Modulation如果系统没有宣告 _PTC,则OSPM将会使用SystemIO 的方式支持Clock Modulation,OSPM将会通过PROC_CNT register bit4:0做T-state的转换。
1 ]0 \! Q e3 D # n& ]' z% p& x* V
3)8 @ H" J, K- D5 _. b
ACPI Structure For P-state
" @7 J5 a) m$ l6 o9 j3 r& fl6 M+ G8 [2 y2 `2 o& @* S
_PTC
( E6 _% Z e8 R% e, g
5 r0 C7 z" ]) Q) T5 a& P! mProcessor Throttling Control,该method用于告知OSPM使SystemIo还是MSR的方式调整 Clock Modulation的方式。它的格式如下所示:' d" T' U9 J1 U7 o4 S
2 M/ y2 ~! n1 ]% _! @
Name (_PTC, Package() . N& x( z& B, z( E1 o3 A0 f, W5 @
{
v: }) Y3 W: {# F
8 a1 N2 g! H' r0 `7 kResourceTemplate(){Throttling_Control_Register},
- F8 Q2 V$ W E" H( a& b2 l# W//Generic Register Descriptor
5 h' L- O2 @; @7 X
9 G, b6 j$ z! v4 uResourceTemplate(){Throttling_Status_Register}8 L! R7 _( ~/ p1 p. ^& a
//Generic Register Descriptor
% }- z# a; a& Q, z9 V( w- e! N) x}) // End of _PTC
6 W6 I. O. l6 w u4 a+ [: ~1 w
( o0 ]. y+ @$ f% r/ J0 @. \* i下述是一个sample code:" V! E) G0 D" |1 b8 Y5 o" N
) o$ S' t! x# }. a6 j4 k! U
' R: a l7 X& A
//. D M; S) U& [7 g, ^. m8 b
; c4 Q4 ?4 y7 ]( F- [' r" j
// T-State Control/Status interface( j" s8 @ j# O( Y
, o2 I* @4 M' t9 m' F: T/ V//% @8 ~7 M2 {( e8 ^
" k5 X& N" d* n6 |' R; MMethod(_PTC, 0)
* z1 m+ M1 A( f# N0 v) Q3 j @7 O0 o; S: H+ Y
{3 g a; a% z* s1 [
3 h# x0 A$ D9 _" A' r. w
//
. v. J8 Y5 n) C8 T; `4 T; M/ e$ P5 Q9 `' S
// IF OSPM is capable of direct access to MSR. y$ w; y2 N9 V. z4 _3 [# t1 l
% C2 N* q) D2 ?. K7 C9 T//
; i% S3 z: A4 y+ v9 F8 D" S" rReport MSR interface
5 u" W0 a, J8 p: [) }1 M5 |% }
6 f% t3 P6 I8 n o& z" d% K// ELSE. P W4 v; U$ Q5 S3 [. X7 @2 M
7 _& x; p3 p" H2 m7 D# E//
- |( A% Q8 z* z6 H" bReport I/O interface
9 _# a% Y" ?4 l, [' p9 L# u. y8 |* P) P2 P: T/ X5 m7 u+ n
//
) p& S4 @* {: G& N1 R/ w6 ~$ y: a& r9 s6 M9 `: z) Z$ N& g
//
- B ]1 u e5 ?2 T6 O) MPDCx[2] = OSPM is capable of direct access to On
& S" G' w8 o& \% z# C; _) g7 l% e4 v
//
& O. Y2 J$ x6 ^7 c- R, A$ zDemand throttling MSR# }. ^$ u; B/ k+ K4 {: d C
9 {- Y+ ~% i$ R: \1 X2 K) ?//$ |7 r0 J' {0 |9 Y5 s# `% g+ d
: Z! |* o% H/ b) _+ aIf(And(PDC0, 0x0004)) {
) ~$ x; d. F% _' Z) N/ I0 H/ `7 M# g1 G% E
Return(Package() {+ X2 _3 a1 V: [4 G. c
' l }6 p" R0 b: R" A2 |- KResourceTemplate(){Register(FFixedHW, 0, 0, 0)},
( {8 {+ u7 z5 _' o
; ^ p# O6 f: I" HResourceTemplate(){Register(FFixedHW, 0, 0, 0)}
' P4 {+ O$ F; R1 _! I/ y+ c6 k8 S6 w$ l2 j' Z# L
})
4 N3 c, p5 F/ ?3 {0 \9 f$ x/ C
" g. |" O1 W3 b! b; p6 H- W}
, q8 ~. y$ z0 Z9 f4 y$ g! K
$ L( L* U$ u6 j) h9 |Return(Package() {
; U, R2 `! h" A) I+ x: [
: e1 L" R/ B0 f" ]( R. ]: GResourceTemplate(){Register(SystemIO, 4, 1, 0x410)},
+ c f8 K) \$ Q$ {9 K9 p" e# R2 n) ?0 v, D
ResourceTemplate(){Register(SystemIO, 4, 1, 0x410)}" b/ s9 {4 M* d
1 e! F2 x5 w' l: [) J) {+ i})0 G+ u7 i( c& {: {
8 d0 E9 ?4 l0 |9 e- u
}
- M \: ^1 D: a$ R7 L" v1 ^
+ V; X6 G0 j2 _0 j' f. ^% d5 `& x! l8 O
0 z$ x: w5 D% {# c ol4 L* Y' k* O" |! ^$ K
_TSS+ z% G2 k9 d2 g& q2 c; A. f
! U4 U( I9 R, W* tThrottling Supported States用于告知OSPM该平台所支持的所有的T-sates,格式如下所示:1 ?' o3 C! W3 b! {
Name (_TSS, Package() . x& f1 F( ?; X( h. n6 h
{* _- t+ d( S, W( L& E, {
// Field Name# U5 O* b N" A" [, l8 X
Field Type 0 }8 m! R( g1 ~" x6 o* R3 _
, a% C: R3 D8 U( K1 |
% }" t9 ~, ]+ G9 ~" K
2 g# V# x% g* \. y8 cPackage ()5 D$ l& Q) H: e/ {& g" T
// Throttle State 0 Definition – T0 . p" s6 s$ }+ P) P0 [: p5 Z$ i) |3 t( B
, Z2 V3 X* |( e7 |9 S{
O$ b7 J( c$ i9 [1 E5 l1 O3 n, e
9 Q9 a* E2 d7 C( R+ \2 p& P o
; v( } v: A3 m% J2 x' g( O, VFreqPercentageOfMaximum,( n9 {6 W _* D
// DWordConst
" H* l) q6 D N! J# f2 ^8 C7 F. S- U2 N% U1 H; D% g$ h8 J
Power,
6 R' \* W) _1 I) _; u: o// DWordConst ; i* a8 r& D% r
, c6 L: B2 W2 v/ m
TransitionLatency,( _4 W1 h2 d4 @( }
// DWordConst , c) b6 l7 b# h
/ j9 m/ U% {) n6 O
Control,8 S/ b6 L/ \$ M% }. a" s6 m
// DWordConst
2 y- A: M4 b( G5 C* x9 B& x# ~- l9 P7 x! \0 {# I
Status5 T) F' n3 q$ U
// DWordConst 0 F5 U' B4 A k7 `# v+ i% r
},
+ a, V' Z* d" ?" h, s- g* Z4 I……
4 _+ B* ~0 j e$ `+ y7 C}
. ^# j4 t$ I5 A V, p4 G3 G" ?: ]/ Q) z0 s$ ~: ^" e
Example code 如下所示:9 K- E: [' i1 I2 c% l X4 J
: A+ e& `& v) p
Method(_TSS, 0)' Z! |) i0 n: T2 p
+ q4 y" P# q' E1 v. _: M7 f0 M0 W
{
' f0 m3 ?+ i, u6 d! \
* d7 `5 Z$ |- f. j) Y3 H4 UPackage(){100, 1000, 0, 0x00, 0},& G: h/ N$ z) f% j
; R! O# y, C6 H+ g' y: CPackage(){ 88,
5 c, W }, a5 H8 W$ p1 t- @5 i: J( w% U875, 0, 0x1E, 0},
: y0 a- i/ O; L% e+ _
) b0 ?, G, A3 |( k7 vPackage(){ 75,
; _" ?% T" X- i# N- N! c750, 0, 0x1C, 0},
+ K) A3 R: m3 U5 H
- U4 t8 Q9 S/ | `& FPackage(){ 63,
/ w# R: Q0 O: W1 U4 O! t625, 0, 0x1A, 0},6 d0 S1 }( s7 X# y" @3 R
& \* O3 o: |$ D+ F$ W
Package(){ 50,4 Q) {8 q" ]* b% ~2 E
500, 0, 0x18, 0},
, N) M% R0 u9 [, e( S7 {; v7 L) l7 j1 ~% B
Package(){ 38,
" X8 q( g" j4 b9 m/ j0 R* t375, 0, 0x16, 0},
4 W: }, I3 M* K% X) a* A5 U' y
' Z% h! h; p* D3 ~" s9 vPackage(){ 25,- {' b6 [# `- ^. A3 I$ d" {
250, 0, 0x14, 0},! o4 c6 ?2 R' M" G2 G2 m
& E0 V% H* {* i; d0 k0 bPackage(){ 13,
1 h i0 L& g: \ s: d125, 0, 0x12, 0}
8 l" l/ k9 ~* n) }$ F7 e+ B
8 ~* R6 s! z7 C5 e}
7 `* }6 P o0 R2 O3 e; F1 D @; S) q! F
$ T( m& p4 y, Y+ `5 Q% v2 S
l
. I$ Y# B' S7 M- E7 |_TPC
% C% _ X% [' p+ o/ a
- ^; h. I8 B$ q" W, N" mThrottling Present Capabilities,用于动态的通知OSPM该平台所支持的T-states,0表示支持所有的T-state,1表示支持[1,n],2表示支持[2,n]依此类推。为支持动态通知OSPM,当某些条件满足时可以通过通知Processor Object 0x82的方式促使OSPM重新评估_TPC。
$ t7 e, n! |1 ]1 H$ Z- o
) p* P$ P$ {/ }* b. Zl7 R8 n, @+ b3 x" D R2 c1 s4 f
_TSD
+ e: n8 Y0 W5 T2 r* Y! { |+ a + W5 d2 s7 c5 j1 [
T-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的T-state,其它的核需要进行的动作等,下述是sample code:
6 r( R0 w: b8 `! M7 Y# S - _9 S# O8 t1 `/ l( p) q7 w, r% E
Name (_TSD, Package()
; c: ~) S& K8 s/ M6 j i) q! ?
x& f# {3 J) A{
# `3 S! M9 U; p: C ]7 [+ e2 q( {3 K- z/ t2 n
Package(){5, 0, 0, 0xFD, 2}
- u9 W9 J6 q1 s9 r+ v// 5 entries, Revision 0, Domain 0, OSPM 7 E, W8 i0 J# Q: U( v
Coordinate, 2 Procs
2 I! J+ J6 W( t8 d8 j6 i9 k( h, Y/ q7 M
& w. k, v6 Y* `0 U) `7 s% F
9 } Q* k6 G6 G: z6 D: @8 s5 _% O}) // End of _TSD object
1 A7 y% e! D3 f5 }; j
& M1 G3 P8 F" J* w9 ~% K+ uREFF:
3 F9 [" U0 P+ T1.. q6 s' d9 g' u$ D, Y
ACPI Spec 3.01 p8 W" d" R5 X# J1 U, Y
2.
' o7 W& T7 g0 ?% S( i9 r$ @Intel Processor vendor-Specific ACPI) U) X$ [, A4 k
4 N; h l% W* i! f. h0 Q, B
" p, K: V# u L9 ^2 nThat’s all!
# j: Z8 _+ E$ u, X . c8 i, o* T: c7 c
Peter
4 N+ v, R1 P7 O1 F
* S) z4 B1 Q- g2010/10/01 |
|