CPU电源管理(P-state)
背景
计算机系统需要电力来执行各种活动,比如CPU需要从内存获取数据和应用程序、执行指令、显示输出结果,同时它也通过各种接口与用户通信,如使用网卡与网络上的其他计算机交互。这些功能是计算机系统中的各硬件部件协作来完成的,而每个部件都需要不同的电力去运作。
一项数据中心的电力消耗研究表明,近50%的输入电力被空调和电力传输子系统消耗,而服务器本身占用了剩下的50%电力。试想一下,如此大的一个数据机房,一天要损耗多少电费??
我们把计算机系统各个部件的损耗,进一步分解为下图所示的各个元素。
可以看到,服务器中处理器所消耗的大约30%的电能,本文主要针对CPU部分相关的功耗管理技术。(其他部件暂不做分析讨论,其实我也没去研究过)
那么,如何让CPU不损失性能的情况下,达到功耗最小?
Demand Based Switching (DBS) 按需调节
DBS是由Intel公司开发的一种电源管理技术,该技术将微处理器的电压和时钟速度保持在最低的必要水平,以实现所需操作的最佳性能。一个支持DBS的处理器会尽可能的让CPU处于一个较低的电压和时钟速度工作,直到系统需要更多的处理能力。
如何实现?
这其实是通过监视应用程序级工作负载对处理器的使用来实现的,比如,在CPU空闲时就降低CPU速度,而在负载增加时提高CPU速度。该技术作为Intel®SpeedStep®技术引入服务器市场。通常,没有启用DBS的处理器总是以额定速度运行,并消耗相应的功率,与工作负载无关,即使处理器有能力以较低的工作电压和频率方式运行。因此,当工作负载级别较低时,我们就有机会降低功耗。
在讨论DBS技术之前,需要了解一下intel的2个状态: C-state、p-state。
C-state:是CPU的睡眠状态。
处理器c状态是处理器进入各种低功耗空闲状态的能力(具有不同的唤醒延迟)。基于Intel体系结构的处理器有几个c状态,表示可以关闭这些c状态以节省电能。C0是操作状态,意味着CPU正在做有用的工作。C1是第一个空闲状态:运行处理器的时钟是门控的;也就是说,时钟被阻止到达核心,时钟被关闭。C2是第二个空闲状态:外部I/O控制器集线器阻塞对处理器的中断。C3 C4 C5...等等。
P-state:是CPU的运行状态。
P-state:处理器P-state是处理器在不同电压和/或频率级别下运行的能力。通常,P0是导致最大性能的最高状态,而P1、P2等将节省电能,但会对CPU性能造成一些损失。
处理器性能状态(p -state)是一组预定义的CPU频率/电压,图2中表格给出了处理器不同p-state的例子,该处理器拥有5个P-state,P0-P5,每个P-state level定义了该level下对应的运行电压、运行频率及功耗。处理器可以在这些频率和电压组合下正确运行,但性能水平有所不同。频率越高,性能越好,但是为了达到这个目的,电压也需要更高,这就使得处理器消耗更多的电源(电力功耗与电压平方和工作频率的乘积成正比)。
功耗计算公式:P=C×V²×F (可以参考intel手册)
图2的流程图表示了处理器从P0状态到P4的变化过程。在DBS使能的情况下,不断观察当前CPU利用率,如果CPU利用率有所下降,那么对应降低CPU电压,下降过程中CPU freq不断降低,随之处理器温度也慢慢冷却,机房的冷却系统的耗电需求也随之下降。
从数字上看,当处理器以最低的性能状态运行时,相对比P0状态(最高性能),可以节省35瓦的电能。
为什么用P-state表示,而不是cpu frequency?
在十几年前,单核,也没有超线程的世界,事情相对简单。你基本上可以将P状态映射到某个你会得到的“频率”上,就像销售告诉我们的,更高的频率意味着更高的性能。
今天,事情变得复杂,intel 处理器一代又一代,发生着巨大的变化。与10年前不同……CPU有了C-state,无论您请求的是哪种P状态,当处理器处于空闲状态(C状态)时,其频率通常为0,CPU frequency是个变数...。
所以,事实上P状态是一个数字,是操作系统告诉硬件它希望在某个cpu上看到多少性能,P状态请求是具有前瞻性的。并不是设置了P-state就能看到对应性能,这跟当时的运行环境密切相关。另外要记住,CPU frequency是处理运行时的状态,如果CPU在睡觉,那么它没有频率。
另外一方面,由于硬件原因,在当前的Intel处理器上,一个package中的所有核心共享相同的电压。而且,由于在一定电压下以低于可能的频率运行是低效的,所以所有核心在任何时候都将共享相同的时钟频率。
举一个一个简单的例子:
一个系统,两个CPU核心(核心a和核心B,它们最初都很忙)。Core A希望有一个在1Ghz频率的时钟,而Core B希望有一个在2Ghz频率的时钟。1Ghz和2Ghz的最大值是…2Ghz,因此Core A和Core B都将运行在2Ghz下,尽管Core A只要求1Ghz。
一段时间后,在X时刻,核心B处于空闲状态。因为一个空闲核的频率是0,而0和1Ghz的最大值是1Ghz……Core A现在运行的时钟频率为1Ghz。
这里的一个关键:核心A得到了一个可变的CPU运行行为,和它所请求的CPU p-state级别无关,而是在于核心B在做什么。
换句话说,CPU上P-state的设定,似乎是一个期望值。实时的p-state状态和运行负载、硬件电压、兄弟核、温度等等都有一定联系。对于用户来说,我们熟知的CPU主频,同样也高度依赖系统各个内部部件。
CPU frequency driver
硬件提供了动态变更CPU性能,对应到linux操作系统,是由CPU frequency driver来完成处理器performance动态变化的。linux中有一套ACPI cpufreq driver,这种适用于大数平台及架构。
而在linux-3.9内核中,intel为P-state引入了一个新的控制器驱动程序,原因很简单,因为之前的10多年的算法已经不再适用了,变化太大了。同时intel在自己硬件上做了特殊节能优化,Intel cpu通过MSR寄存器公开了很多power manager相关的状态信息,方便驱动程序访问。p-state驱动程序特定生成于intel CPU,同时实现了p-state选择策略和调优算法,据说比通用的算法做得更好(30%以上)。
当然intel平台也同样支持使用通用的ACPI cpufreq driver。
上面所描述很多东西在intel一代一代之间是有很大不同的……也许,在接下来的几年里,处理器将发生更大的变化。但我觉得这对于一些对PM感兴趣的人,理解一些基本概念已经足够……
再来介绍下turbo boost(超频)。
turbo boost也是intel的一项性能提升技术,官方上也有一些描述文档。
有些人称之为“超频”,但它并不是超频,它完全运行在硬件规格之内。Turbo之所以存在,是因为在多核系统中,单核的运行速度可能比购买处理器时盒子标签上的频率更快。这与你的电源功耗有关,当你买了一个35瓦的TDP cpu, cpu不应该使用超过35瓦。因此,如果你有4个核心,这意味着每个核心本身可以使用不到9瓦来满足。
那如果处理器中单一核心被限制在9瓦,而不是完整的35W,那么即使其他核心是空闲的,active CPU也只能工作在9瓦范围内,许多潜在的性能没有被激发……。
那么我想,你应该知道turbo技术是什么了吧,也就是单一核心可以超过9W运行,而不是局限在一个固定的平均值。所以当处理器中其他核心idle的情况下,某一个active cpu才可以发挥出更大的潜能(当然和当前的负载有关),那么这个时候,意味着CPU超频了……。
P0:最佳性能状态,代表CPU处于turbo状态,最大频率运行。(由硬件控制)
P1-Pn:硬件提供了可用的P-state范围,可由OS来管理。
在我们的x86环境下,可以通过turbostat工具来看到cpu的turbostat boost能力:
关注最后4行,当只有1个核是active的时候,那么这个核可以达到2.6Ghz;而当有3个active核时,
这3个核可以达到2.5Ghz,那如果4个核或4个核以上active时,那么只能达到2.4Ghz。
turbostat很强大,是intel专门对自己硬件上做的性能监视工具,不仅可以看turbo,还可以看到CPU的各类性能状态,如C-state(进入C1、C2、C3的占用时间),cpu frequency,功耗,处理器温度等信息。
P-state驱动的意义:在不损失性能的情况下,尽可能的降低功耗。
如上图,当你打开一个类似于Photoshop这样的图片处理软件,在对图片进行处理,和静止状态下,CPU的使用需求是不一样。对应到下图任务管理器,可以看到CPU的performance在不断变化,有负载需要CPU参与时,则不断调整p-state来满足应用程序需求,而随需求下降,p-state也随之降低。
说到最后,cpu frequency,p-state、c-state,一切为了节能,减少电费。同时电源管理对于移动设备更为重要(电池供电),一项好的powersave技术会变得非常有价值,这对于电子工程师来说,是很有挑战的,但对消费者来说,当然你也可以选择带着充电宝。
CPU电源管理(P-state)相关推荐
- linux查看电源模块,基于LINUX的电源管理cpuidle模块研究及应用
赵婉芳 摘 要:本文主要针对LINUX嵌入式系统的电源管理部分,分析了目前存在的主要的电源管理技术,重点研究了LINUX系统中当系统处于空闲状态时负责电源管理的CPUIDLE模块结构特点以及接口核心编 ...
- Intel处理器电源管理技术(1) - 概述 - 8086/286/386SL/486SL APM ACPI
History & Overview Intel的8086与80286处理器并没有集成任何的电源管理技术.但是80286的确有一个全静态CMOS版本实现,主要用于电池供电的设备中,由富士通与I ...
- [PCIe]LTSSM与电源管理
1. LTSSM LTSSM全称是Link Training and Status State Machine,有以下11个状态: Detect, Polling, Configuration, Re ...
- AMD GPU电源管理
GPU有的子IP的电源管理是可以由FW独立完成,有的是需要FW和Driver配和完成的.比如:Video Codec的Enter/Exit DeepSleep的电源管理工作,一般都是由FW独立完成不需 ...
- S3C2440时钟和电源管理:空闲模式:电源管理模块断开CPU时钟FCLK,而只给外设提供时钟,CPU不耗时钟,故而减少功耗,任何中断请求都可将CPU从空闲模式唤醒。
七.时钟&电源管理 概述 时钟&电源管理模块包含三部分:时钟控制,USB控制,电源控制. 时钟控制逻辑可以生成三种时钟信号,CPU使用的FCLK,AHB总线外设使用的HCLK,APB总 ...
- 华为服务器bios配置性能,高级电源管理配置 - 华为服务器 Brickland平台 BIOS 参数参考 30 - 华为...
介绍通过高级电源管理配置界面,对处理器的供电进行配置. 通过该界面,技术支持工程师和系统维护工程师可以对处理器的供电进行高级配置.具体参数说明如表5-13所示.高级电源管理配置界面如图5-14所示. ...
- Windows CE设备驱动开发之电源管理
4.7电源管理 电源管理模块管理设备电源,从而全面改进操作系统的电源使用效率:它所有设备的电源使用,同时能与不支持电源管理的应用程序及驱动程序共存. 使用电源管理可以有效的减少目标设备的电源消耗,同时 ...
- Linux电源管理(10)_autosleep
Linux电源管理(10)_autosleep 作者:wowo 发布于:2014-9-18 23:42 分类:电源管理子系统 1. 前言 Autosleep也是从Android wakelocks补丁 ...
- Linux电源管理(5)_Hibernate和Sleep功能介绍【转】
本文转载自:http://www.wowotech.net/pm_subsystem/std_str_func.html 1. 前言 Hibernate和Sleep两个功能是Linux Generic ...
最新文章
- tenantid拦截php,实现领域驱动设计。为什么在所有版本库查询中都包含TenantId?...
- Cpp 对象模型探索 / 虚继承带虚函数的基类的子类的内存布局
- Learning to rank基本算法小结
- android导出apk文件_Android测试工具入门介绍(三)
- java异步处理_Java编程开发好入门吗 消息队列的用途有哪些
- icesat-2 数据产品
- uni-app调用wifi接口
- oracle基本操作语句大全
- 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点
- 【专题6: 其他知识】 之 【2.1.关于择业和就业_嵌入式学习路线和方法】
- getResource和getResourceAsStream
- 【C++】实现一个日期计算器
- 单位根检验urdf_R语言时间序列函数整理[转]]
- 2022最新性能测试面试题(带答案)
- P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序
- 江苏学生考计算机要多少分录取,江苏高考多少名可以上211 最低要考多少分
- vue 能拿到对象 打印对象 但获取不到具体属性 属性 undefined
- sublime markdown环境下画图 (使用Graphviz)配置教程
- 没有修复计算机,电脑没有声音怎么修复?一键修复电脑没声音的解决办法 (全文)...
- cyclone IV 系列轻量级FPGA 芯片ep4ce6e22c8 引脚分布图