加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

P-state

发布时间:2020-12-15 01:39:55 所属栏目:百科 来源:网络整理
导读:P-state 1. Overview ? CPU在C0状态时会执行指令,但是即使在C0状态下OSPM仍然可以通过调整CPU的工作电压和频率的方式,以此降低整个平台的功耗。P-state 在Intel平台上通常指的是EIST (Enhanced Intel SpeedStep Technology),EIST允许多个核动态的切换电

P-state

1. Overview

?

CPU在C0状态时会执行指令,但是即使在C0状态下OSPM仍然可以通过调整CPU的工作电压和频率的方式,以此降低整个平台的功耗。P-state 在Intel平台上通常指的是EIST
(Enhanced Intel SpeedStep Technology),EIST允许多个核动态的切换电压和频率,动态的调整系统的功耗。OSPM通过WRMSR指令写IA32_PERF_CTL MSR的方式调整CPU电压和工作频率。
?

2. P-state Control

?

1)??????? Detect & Enable P-state

?

BIOS可以通过CPUID function check CPU是否支持EIST,如果不支持就没什么事了。如果支持的话,后续就要做一大堆乱七八糟的事情去开启P-state的support,其中主要的步骤就是使用WRMSR去写IA32_MISC_ENABLES开启P-state。
?

2)??????? Supported P-states

?

当BIOS Enable CPU EIST以后就需要计算出该CPU支持的MinRatio(MaxEfficiencyRatio) 、MaxRatio、RatioStepSize、NumStates,所有这些信息都可以通过CPU MSR直接或者间接的获得,其中MinRatio MaxRatio都可以从PLATFORM_INFO中获得(不同的bits),NumStates就是二者的差,有一点需要注意的是如果NumStates > 16,RatioStepSize就会加1直至NumStates <= 16为止。CPU的工作频率 = BCLK * Ratio,旧架构的CPU BCLK通常是由clock gen给出的,通常上是100/200 MHZ。新架构下CPU clock gen是内置的,BCLK固定是100MHZ。
?

MinRatio = PLATFORM_INFO

MaxRatio = PLATFORM_INFO

RatioStepSize = 0x01

NumStates = (MaxRatio – MinRatio) / RatioStepSize + 1

?

If(NumStates > 0x10)

{

RatioStepSize += 1

NumStates = floor((MaxRatio – MinRatio) / RatioStepSize) + 1

}

?

3)??????? Turbo Mode

?

Turbo Mode是新的CPU架构下引入的一个新的功能,通常被作为IPS的一个sub function。在Turbo Mode模式下 CPU能够访问到与之相关的thermal、current、power的信息从而根据这些信息动态的增大CPU以及IGPU的frequency。CPU可以工作在[Max Non-Turbo,Max Turbo]ratio之间的任意频率。BIOS 可以enable/disable Turbo Mode,当Turbo Mode存在时,它会作为EIST最高的Performance State P0 report给OSPM,另外Turbo Mode的Ratio是通过MSR TURBO_RATIO_LIMIT获得的。Turbo Mode受限于thermal、current、power的门限值,BIOS可以通过设置这些参数影响Turbo Mode的Performance。
?

4)??????? Over Clock

?

某些Stepping的CPU具有Over Clock的功能,BIOS Detect并Enable Over Clock的功能以后,Turbo Mode所支持的 Max Turbo Ratio就会取决于FLEX_RATIO,而具有功能OC的CPU则可以通过调整 MSR FLEX_RATIO影响Max Turbo Ratio的值,当然FLEX_RATIO也是会有一些其它的限制(参考相关的spec)。
?

5)??????? ACPI Structure For P-state

?

l???????? _OSC & _PDC

?

_0SC(Operating System Details) & _PDC(Processor Driver Capabilities)在功能上比较接近,基本上供OSPM调用和BIOS传递一些关于P-state是否支持和实现方式的一些设定;另外关于_PSD Coordination Type也是有_PDC提供的,BIOS可以依据OSPM的参数回报相应的ACPI Structures。
?

l???????? _PSS

Performance Supported States用于回报OSPM 该平台所支持的Processor Performance States的数量 并且通过一个packaged list的形式回报出该P-State的internal CPU core frequency、typical power dissipation、control register values、status register values。第0个package表示该平台所支持的最高的P-state,第n个package表示最低的P-state。Packaged lists的格式如下所示,其中需要说明的是关于Control和Status这两个参数,其中Control表示要写到 MSR IA32_PERF_CTRL中的值,Status用于当OSPM通过WRMSR 写完IA32_PERF_CTR之后再读取IA32_PERF_STATUS中的值并和Status做比较 以确定P-state切换是否已经完成。
?

Name (_PSS,Package()

{?????? // Field Name????????????????????? Field Type

?

??? Package ()????????????? // Performance State 0 Definition – P0

??? {?

??????? CoreFreq,????????????????????????? // DWordConst

??????? Power,????????????????????????????? // DWordConst

??????? TransitionLatency,???????????????? // DWordConst

??????? BusMasterLatency,????????????????? // DWordConst

??????? Control,?????????????????????????? // DWordConst

??????? Status????????????????????????????? // DWordConst

??? },

??? .

??? .

??? .

}) // End of _PSS object

前面Supported P-state中已经提到如何计算MinRatio、MaxRatio、RatioStepSize、NumStates的值了,我们就可以将这些值天道_PSS packaged lists之中了下面是一个_PSS的具体的例子,这个例子中MinRatio = 0x0c、MaxRatio = 0x10、RatioStepSize = 0x01、NumStates = 5。
?

Name (_PSS,Package()

??????? {

??????????? Package(){1600,21500,10,0x0010,0x0010},// Performance State zero (P0)

??????????? Package(){1500,14900,0x000F,0x000F},// Performance State one (P1)

??????????? Package(){1400,8200,? 10,0x000E,0x000E}? // Performance State two (P2)

Package(){1300,0x000D,0x000D},//

Performance State one (P3)

??????????? Package(){1200,0x000C,0x000C}? // Performance State two (P4)

??????? }) // End of _PSS object

?

另外当该平台支持Turbo Mode时 P0将会report为Turbo Mode。
?

l???????? _PCT

?

Performance Control用于将P-state MSR interface Report给OSPM,OSPM通过_PCT report出来的PERF_CTRL MSR 切换P-state,在新近的CPU架构下_PCT通常report native mode也就是FFH的方式,下述是一个sample code,OSPM透过_PCT得知是native mode,当系统切换P-state时,它应该就会通过MSR IA32_PERF_CTRL和IA32_PERF_STATUS的方式来进行。
?

Name(_PCT,Package ()????? // Performance Control object

??????? {

??????????? ResourceTemplate(){Register(FFixedHW,0)},???? // PERF_CTRL

??????????? ResourceTemplate(){Register(FFixedHW,0)}????? // PERF_STATUS

??????? }) // End of _PCT object

?

l???????? _PPC

?

Performance Present Capabilities用于动态的告知OSPM该平台当前所支持的最高级别的P-state,它返回的值就是_PSS中的Packaged lists中的entry num,如_PPC return 0表示支持_PSS中report的所有的P-state [p0,pn]; return 1就表示支持[p1,pn]之间的P-state。下述是一个sample code。当系统的电源状态发生改变,我们希望支持不同的P-state时,我们只需要Notify(/_PR.CPU0,0x80)的方式通知OSPM重新解析_PPC method,进而获得当前平台所支持的P-states。
?

Method (_PPC,0)?????? // Performance Present Capabilities method

??????? {

??????????? If (/_SB.DOCK)

??????????? {

??????????????? Return(0) // All _PSS states available????

??????? }

??????????? If (/_SB.AC)

??????????? {

??????????????? Return(1)????? // States 1 and 2 available

??????????? }

??????????? Else

??????????? {

??????????????? Return(2)????? // State 2 available

??????????? }

??????? } // End of _PPC method

?

l???????? _PSD

?

P-state Dependency用于告知OSPM 该平台的logical processor之间的依赖信息,简单来讲就是当其中的一个核进入某一级的P-state,其它的核需要进行的动作等。
?

REFF:

1.??? ACPI Spec 3.0

2.??? Intel Processor vendor-Specific ACPI

?

?

That’s all!

?

Peter

?

2010/9/24
发表于 @ 2010年09月24日 11:43:00 | 评论( 1 ) | 编辑| 举报| 收藏

旧一篇:C-state | 新一篇:T-state


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hgf1011/archive/2010/09/24/5903082.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读