英特尔功耗管理架构调研

最近阅读了几篇关于英特尔功耗管理架构(sandy bridge和skylake)的论文,我总结出了以下一些内容。

功耗管理算法

在skylake中英特尔使用EARtA算法进行动态调频调压。该算法的主要内容是下面的公式: $$ E_f=(t_c+t_m)(P_c+Pl)=(\frac{t{c0}}{f_c}+tm)(P{c0}F(f_c)+P_l) $$ 这个算法认为能耗可以时间乘以功率,时间可以分为CPU阻塞运行时间和内存阻塞运行时间,功率也分为CPU功率和系统中除了CPU以外的其它部分功率。其中CPU阻塞运行的时间和CPU功率和频率有关系。

如果与频率为f0时的能耗对比,上述公式可以写为: $$ \frac{Ef}{E{f0}}=(SCA\frac{1}{f_c}+1-SCA)(CPRF(fc)+1-CPR) $$ 其中 $$ CPR=\frac{P{c0}}{(P_{c0}+Pl)};SCA=\frac{t{c0}}{t_{c0}+t_m} $$ ![2020-09-14 22-28-04 的屏幕截图](/home/jiafan/图片/2020-09-14 22-28-04 的屏幕截图.png)

实际功耗和频率的关系正如上图绿色曲线描绘的那样,会存在一个最低点。

英特尔的功耗管理架构

EARtA算法

![2020-09-14 22-42-45 的屏幕截图](/home/jiafan/图片/2020-09-14 22-42-45 的屏幕截图.png)

上图是英特尔CPU的功耗管理架构,其中PCU负责收集CPU、核显和LLC的性能计数,计算出上文算法中的CPR和SCA;PECI是嵌入式的功耗管理控制器,依据PCU的统计结果以及操作系统的指令计算出最优的频率,SVID是电压管理模块,负责具体执行调频调压。

至于架构中最重要的内容,PCU收集什么样的性能事件,文章中并没有说。但文章中透露出的信息表明,CPU核的功耗是通过采样的方式由电压和电流数据计算出来的,而内存等待时间等数据是由队列的信息来推断的。

Turbo Boost技术

Turbo Boost技术是指CPU或核显从IDLE状态恢复工作的时候,提高其频率,使得它的瞬时功率大于芯片的TDP,因为此时芯片的温度尚低,所以超频工作并不会使芯片受到损害。如下图所示:

![2020-09-15 10-08-05 的屏幕截图](/home/jiafan/图片/2020-09-15 10-08-05 的屏幕截图.png)

Turbo Boost技术也使用PCU收集到的能耗信息,由PECI控制。文章指出Turbo Boost技术可以使计算机的性能得到大幅度提升。

工作计划

我觉得一步到位去模仿英特尔的硬件功耗管理是不现实的,应该分两步走。首先是在芯片中实现类似于英特尔中的PCU模块,可以精确得预测CPU和整个芯片的实时功耗,再配合软件进行动态调频调压。等到PCU得到充分验证之后再引入硬件控制模块。

参考文献

Energy Aware Race to Halt: A Down to EARtH Approach for Platform Energy Management

Power-Management Architecture of the Intel Microarchitecture Code-Named Sandy Bridge

Live, Runtime Phase Monitoring and Prediction on Real Systems with Application to Dynamic Power Management