什么是在多核处理器中改变核心负载和频率的原因

v01*_*dya 10 operating-system multicore processor

在寻找多核设计的描述后,我不断寻找几个图表,但所有图表看起来都像这样:

多核设计

通过查看i7z命令输出,我知道不同的内核可以以不同的频率运行.

这表明,关于哪个核心将被赋予新进程以及用于改变核心本身频率的决定可以通过操作系统或核心本身的控制块来完成.

我的问题是:什么控制每个核心的频率?是将READY进程与特定核心关联在操作系统上的工作,还是由处理器内的某些东西完成的工作.

Pet*_*des 2

将进程/线程调度到内核完全取决于操作系统。硬件不了解等待运行的任务。维护操作系统的可运行进程列表与等待 I/O 完全是一个软件问题。

将线程从一个核心迁移到另一个核心是通过将架构状态存储到内存的原始核心上的内核代码完成的,然后新核心上的操作系统代码恢复已保存的状态并恢复用户空间执行。

传统上,频率和电压缩放决策由操作系统做出。以 Linux 为例:决策代码称为调控(这个arch wiki 链接在 google 上也出现了很高的排名)。它会查看进程在当前核心上使用其整个时间片的频率等信息。如果调速器决定 CPU 应以不同的速度运行,它会对一些控制寄存器进行编程以实现更改。据我了解,硬件负责选择正确的电压来支持所需的频率

据我了解,每个内核上运行的操作系统独立做出决策。在允许每个内核以不同频率运行的硬件上,决策代码不需要相互协调。如果在一个内核上运行高频率需要整个芯片范围的高电压,则硬件会处理这一问题。我认为 DVFS(动态电压和频率缩放)的现代实现相当高级,操作系统只是告诉硬件它想要 N 个选择中的哪一个,板载电源微控制器负责编程振荡器/时钟分频器的细节和电压调节器。

英特尔的“Turbo”功能会适时地将频率提高到最大可持续频率以上,并在硬件中进行决策。每当操作系统请求最高广告频率时,CPU 都会在电源和冷却允许的情况下使用睿频。

英特尔的 Skylake 更进一步:操作系统可以将对 DVFS 的完全控制权交给硬件,可以选择有限制。这使得它能够从微秒到微秒做出反应,而不是在毫秒的时间尺度上。这实际上可以在突发工作负载中提供更好的性能,因为在 Turbo 有用时可以提供更多的功率预算。一些基准测试的突发性足以观察到这一点,例如一些浏览器/JavaScript 的 IIRC。

IDF2015 上有关于 Skylake 新电源管理的完整讨论请查看幻灯片和/或存档的网络广播。那里也详细描述了旧方法,以说明差异,因此如果您想要比我的摘要更详细的信息,您应该真正检查一下。(其他 IDF 会谈的列表在这里,感谢Agner Fog 的博客提供链接)