标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2232] 作者: Snowy 发表于: [2018-12-19]
本文共 [407] 位读者顶过
CPU中的电源管家:PCU [出自:jiwo.org]
计算机的发展可谓一日千里,还记得小的时候潜入母亲的办公室,按下圆圆的电源按钮,等待泛着绿色的CRT显示屏亮起时期待的心情。电源键旁边大大的Turbo按钮和绿莹莹的显示着33MHz的小窗,总在勾引我毫无例外的按下Turbo键,满意地看着小窗变成66MHz。同时心里在怀疑会有哪个傻瓜会拒绝更快的速度呢?
是啊,那是一个简单而直接的年代,更快的速度总是人们追求的第一目的,而浪费的电力相比昂贵的计算机却显得那么的微不足道。 时间很快跨过千禧年,数GHz的主频和高达上百瓦的功耗让CPU在这个强调节能的时代看起来十分不合时宜。CPU的各种省电模式也一样样的被发明和得到广泛应用。这其中就包括EIST、CState、睿频和Speed Shift等等省电模式: CPU的电源管理越来越复杂,尤其是睿频、Speed Shift和Package CState的引入让简单的纯硬件电路的电源管理变得越来越不太现实。终于在Nehalem架构中,一个统一的中央控制器件被引入,并从此驻留在CPU中,再也不曾离开。 就如我在上文的结尾中那个问题: 你知道它在哪吗? CPU中的电源管家在哪里? Nehalem CPU中,一个叫做PCU(Package Control Unit)的器件被引入CPU的封装中:
我们可以看到它控制着CPU内核的PLL,从而可以掌控各个内核的频率;它还控制着Vcc,可以关闭各个内核的电源;它还连接着内核中的温度传感器,可以读取它们来作为决策的依据。 PCU实际上是个单独的微控制器,有自己的执行代码,叫做pcode。在最开始pcode相对十分简单,就是按照操作系统的指示,将不用的内核关闭,进而尽量进入Package CState来节省电力。但是随着睿频和Speed Shift的引入,PCU开始管理整个CPU的Power Budget,即能耗的预算,从而可以如我们前文所说: 让CPU功耗可以瞬时超过TDP的天花板,来让我们的CPU响应更快。那么PCU是如何管理CPU的Power Budget呢? PCU的电源管理算法 那为了节省能耗,是不是就是低频慢慢干就好了呢?答案是否定的。我们排除浪费时间等因素,只从能耗上考量,如果我们衡量干完某件事需要消耗的整体能量,实际上有两种策略: 1.保持固定频率,将事情干完,然后CPU进入休息状态。 2. 加速干事情,忍受短时功耗上升,尽快干完事情,尽早让CPU休息。 这和人一样,有些人是慢性子,徐徐图之;而有些人性子急,希望早干完早休息。很难判断哪种好,这就需要量化分析了,好在Intel的工程师已经为我们找到这个平衡点:
在这个平衡点附近,按照工作量(workload demand)被分成Low Range和High Range,PCU采取两种策略。
策略一 在Low Range的区间,CPU的主频低于Pe就没有任何意义了,PCU总是让内核工作在Pe频率上,尽快干完事,进入休眠状态(CState)。这就是有时计算机比较清闲,我们打开任务管理器时,会发现有些CPU既不是工作在最低主频上,也不是工作最高主频上的原因。
在High Range中,提高内核频率尽管可以让任务完成的更快,但是因为能耗和频率f是3次方的关系,对能耗比来说并不合算。这就需要操作系统来提示支持Speed Shift的PCU,采取激进的高频高功耗模式,来提供更好的相应;还是保守的能耗优先模式。 尾声 PCU的引入让CPU的能耗管理变得智能而有趣,但也给许多电脑爱好者带来了一些困扰和疑惑。希望本文能够对大家理解CPU的电源管理带来些帮助。 另外需要说明的是虽然PCU的主要功能是电源管理,但它还有些别的功能,这里就不详述了。详细随着CPU智能管理的需求,PCU的功能会越来越多。本文的图片均出自Intel IDF。 |