CPU TechTalk:Power Management and Supply(Ⅰ)

在不同的时间点,人们关注的东西是不一样的。

如果你在1985年问英特尔的销售人员你们这个CPU它省不省电,对方大概率会觉得你是个神经病。那个时代的CPU技术可以说是简单粗暴,整个业界都将更快的运行速度做为第一目标,为追求速度而浪费的那一点点电力更不值得一提。

站在2020年的CPU销售柜台前,虽然运行速度依旧是人们关注的主要方向,但已经不是全部,毕竟发展了这么多年,大家的速度都没慢到哪里去,即使是低档产品,也足够普通用户使用了。与此同时,随着移动端应用的增加,无论是个人用户还是企业级用户,都开始琢磨同一个问题:我手里的这颗CPU足够省电吗?

速度和省电就像是矛与盾,二者相互依存却又此消彼长。为了最大程度的平衡运行速度和运行能耗的天平,单单依靠CPU硬件已经远远不够,还必须得到操作系统和BIOS的配合,经过不断的尝试和改进,高级配置和电源接口(Advanced Configuration and Power Interface),简称ACPI,在1997,由Intel, Microsofe, Toshiba联合制定并推出。在此基础上不断改进迭代版本规格,截至到2011年12月,已经是第五版ACPI了。

ACPI的本质是为OS提供了可以用来进行系统电源管理的硬件抽象和接口(Method)。为了方便调控,围绕电源管理,上到整个System,下到CPU的每一个Core和每一个Devcie,ACPI根据定义了不同层级的State,在不同的工作点,OS通过ACPI提供的接口设定系统各个部件到合适的State,从而达到性能和节能的统一。需要提前说明的是,ACPI并不是这期内容的主角,大家有兴趣可以自行翻阅ACPI Spec,但是我们需要ACPI定义的这些State做为背景知识方便后面的叙述。

ACPI定义的State共有六种:Global States(全局状态),Sleeping States(睡眠状态),C State(CPU状态),Performance State(能效状态),Throttling States和Device States。它们之间的关系可以用下面这张图来诠释: 

先看绿色圆圈内和G-State相关的部分,最中间的是G0,代表计算机的正常工作状态,操作系统和应用程序都在运行,CPU在正常执行指令。当位于G0状态的计算机在特定的时间内都无事可做,OS就会通过ACPI接口调度整个系统进入G1睡眠状态。

G1睡眠状态细分为S1到S4四种子状态,就和人睡眠也分为深睡眠和浅睡眠一样,这四个子状态随着标号的增大代表计算机睡眠程度就越深。但这里S1并不是睡眠程度最浅的,最浅的睡眠不就是醒着嘛,应该是S0。S4也不是睡眠程度最深的,最深的睡眠不就是关机嘛,应该是S5。所以ACPI把S0等同于G0,而S5则放在G2里,在G1里我们只讨论S1到S4。

S1:最耗电的睡眠模式。处理器的所有寄存器被刷新,并且CPU停止执行指令。CPU和内存的电源一直维持着,一些设备如果没有被使用那么久会被停止供电,最典型的就是显示器屏幕。由于这样的睡眠模式其实并没有省多少电,较为鸡肋,所以一些新式的计算机甚至都不再支持S1。

S2:一个比S1更深的睡眠状态,具体表现为把CPU的电源切断。不过这个模式所以通常并不被采用;

S3:也被称为“Suspend to RAM/STR”,在不同的OS上叫法可能不同,有的称为“待机Standby“,有的称为“睡眠Sleep”。在S3下,主存(RAM)仍然有电源供给,在进入S3前,操作系统和应用程序的工作状态都会被存入到主存中。出S3后,再从主存中把计算机状态恢复到睡眠之前的样子。

S4:也被称为“Suspend to Disk”,在OS中,一般被称为“休眠Hibernate”。在S4下,内存中所有的内容会被存储到硬盘中,包括应用程序和打开的文档这样的信息也不例外。这表示当计算机从S4恢复后,用户可以回到原来的工作状态。S4相较与S3最大的不同在于,当计算机进入S3之后,如果一旦发生异常断电,主存上所有的数据就会遭到破坏,无法再回到原来的工作现场。而S4下由于所有数据都会保存在硬盘中,不会受异常断电的影响。

接下了是G2,也就是S5,或者是Soft Off。在G2下,整个系统的供电单元已经不会再为CPU和其他绝大部分的部件提供电力,但此时供电单元本身的电力供应还没有切断,一些不受操作系统开关控制的部件还是有电的。G2状态下的计算机可以被PS2键盘鼠标/网卡(Wake on Lan)/USB等部件唤醒。对照实际情况来说,就是主板ATX Power的AC电源还插着,机械开关还在打开,Core Power已经掉了但是Suspend Power还在。

G3比G2关闭的更为彻底,又被称为Mechanical Off。在G3下,整个系统的供电单元本身的电力供应都被切断了。主板ATX Power的AC电源被拔掉或者机械开关被关闭就对应这个状态。

还有一种情况,那就是计算机系统并没有运行操作系统,比如就跑了个DOS,或者操作系统禁用了ACPI,这种状态被定义为Legacy。

当计算机系统工作在G0状态但是又长时间无事可做,OS可以让系统进入S3/S4,但是CPU的工作频率相对于系统中其他部件来说实在是太快,虽然同样在G0状态,有的部件可能忙到飞起,但CPU很可能一直idle着。于是在G0状态下,为了节省CPU的能耗,又衍生出来了CPU State,简称C State,包含C0,C1,C2,C3……Cn。就是上面那张大图中右下角的这个部分

C0:就是CPU正常工作时候的状态;

C1:ACPI SPEC规定必须实现,对于X86 CPU来说,在收到“HLT(Halt)”指令后,就进入了C1状态。但这是一个不怎么严谨的说法,事实上在8086的时代,发出HLT指令后,CPU确实会进入idle状态,不会执行任何指令,但是并没有多省电。在后来的CPU研发过程中,Intel的工程师们发现可以在此时做些什么用来省电,比如说关闭处理器核心时钟,所以准确的说,应该是收到HLT指令+关闭CPU核心时钟=进入C1状态。后来在关闭时钟的基础上,再进一步调低电压,这就是C1E状态(Enhanced C1)。

C2/C3:ACPI SPEC并未强制规定要实现。从486开始,Intel CPU增加了一个STPCLK(Stop Clock)引脚,当STPCLK Assert,就会停掉CPU的时钟信号。这听起来和C1很像,不过C1是通过发出HLT指令进入的,而C2确实通过toggle STPCLK实现的。C3和C2类似,区别是在C1/C2的时候虽然核心时钟被关闭,但是内部BUS和APIC时钟不会关闭,以响应外部中断,C3连这两个也会关闭。C3 mode也被称为Sleep Mode。需要注意的是,ACPI SPEC规定在C1/C2/C3下,Cache一致性是要得到保证的,往后可就不一定了。

C4:C1/C2/C3都是通过关闭处理器时钟的方式来降低功耗的,C3已经关停了处理器内部所有时钟,所以这样的办法已经没有更进一步的空间,只能通过降低CPU核心电压来实现降低功耗的目的。C4就是在CPU进入C3后再降低电压实现的。C4 mode也被称为Deeper Sleep Mode。

C4E/C5:在一些比较特殊的处理器上存在另外一种C4,该模式会在关闭L2 Cache之后再降低电压,这种模式有时候也被称为C5.或者Enhanced Deeper Sleep Mode。

C6:处理器进入C6 mode的时候,需要将完整的处理器状态信息保存到一个特定的SRAM中,该SRAM使用独立供电。保存完毕后,允许处理器内部电压被降低到任何值,包括0V。当处理器被唤醒的时候,会从刚才提到的SRAM里加载状态信息。C6 mode也被称为Deep Power Down Mode。

然后问题就又来了,G0状态下的计算机系统,CPU即使在C0下,难道就没有机会省电了吗?

有啊当然有了,这时候就需要聊聊P-State和T-State了,如下图所示,它俩都是CPU工作在C0 mode时候的概念,如下图所示

先说P State,和上面的那些State一样,分为P0,P1,P2……Pn,P后面的标号越大,就越省电。不同的P State对应不同的处理器工作电压和频率,标号越大,电压和频率就越低。至于功耗与频率/电压之间的关系我们下期内容再分析。在C0状态下,即使CPU还在执行执行,OSPM还可以根据负载动态切Pstate的方式,以此来降低平台整体的功耗。

P State之外还有一个T State,T State也是将CPU频率降低来达到降低功耗(以及发热量)的方法之一。P State与T State虽然都可以降低CPU工作频率,但是二者的技术理念却有所不同。究其原因,T State是由Intel率先提出的技术,实现原理总结下来就是让CPU一段时间工作一段时间不工作;而 P State是由AMD首次提出的,降频的方式是直接调整CPU工作频率到Target Value,二者的差别如下图所示

同样是把频率降低到原来的50%,P State是真的把频率放慢成原本的50%,而T State是把一半的Clock都gating掉。当Intel发现P State的方法更加省电并且还能降低芯片的发热量,就一并把P State也收入囊中。所以Intel的CPU可以同时支持P State和T State,而AMD的CPU只支持P State。

最后一个遗留问题就是Device State,就是最一开始右上角那个,如下:

对于计算机系统里的各种类型Device来说,也会根据工作负载的不同被OSPM切换到不同的Device State,主要分为以下几个状态:

D0:正常工作状态,所有支持的功能都可用,功耗最高,所有设备都必须支持;

D0active:Devcie完成配置,随时可以开始工作;

D1/D2:介于D3和D0之间的中间状态,D1比D2消耗更多的电能,保存更多的设备上下文,D1和D2是可选的,很多设备没有实现这两个状态;

D3hot:Device进入了D3,但是工作电压Vcc还在,设备可以被软件枚举

D3cold:设备完全切断电源,重新上电的时候系统需要进行完整的设备初始化动作。

需要说明一下的是,P State并不是CPU特有的概念,Devcie工作在D0的时候,OSPM也可以通过预设值切换Device的P State来降低能耗,比如说硬盘在不同的P State下提供的是不同水平的最大吞吐量,如果系统当前的数据吞吐量比较小,那么可以调低硬盘的P State。

本期的内容结束了,下一期我们将继续介绍CPU Power Management相关的支持。

        

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值