多核处理器中,是什么负责改变核心的负载和频率?

10

在查找多核设计的描述时,我发现有几个图表,但所有这些图表都看起来像这样:

multicore design

从查看i7z命令输出我知道不同的内核可以以不同的频率运行。

这表明关于将新进程分配给哪个内核以及更改内核本身频率的决策是由操作系统或内核控制块自己执行的。

我的问题是:是什么控制每个单独内核的频率?将READY进程与特定内核相关联的工作由操作系统完成,还是由处理器内部的某些机制完成?


1
@xmojmr 我已经尝试了您提供的链接中的几个PDF文件。它们都有3-9图,但没有您描述的那个。您能告诉我您指的是哪一个吗? - v010dya
1
打开http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf(_Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B 和 3C _),按Ctrl+F查找“提取处理器频率的算法”。 - xmojmr
1
@xmojmr 所讨论的所有模型(如图表中所示)都涉及单核处理器。因此,这并没有真正帮助到你。 - v010dya
1
您应该考虑更改您的流程图,并使用英语文本。 - styvane
2个回答

2
将进程/线程调度到核心完全由操作系统决定。硬件不了解等待运行的任务。维护操作系统可运行进程列表与等待I/O的进程列表完全是软件的事情。
将线程从一个核心迁移到另一个核心是通过内核代码在原始核心上将架构状态存储到内存中,然后新核心上的操作系统代码恢复该保存的状态并恢复用户空间执行来完成的。
传统上,频率和电压的调整决策是由操作系统做出的。以Linux为例:这个决策代码被称为调节器(同时这个Arch Wiki链接在谷歌上排名很高)。它会考虑诸如进程在当前核心上有多频繁地使用了它们的整个时间片段等因素。如果调节器决定CPU应该以不同的速度运行,它会编程一些控制寄存器来实现变化。据我所知,硬件会选择合适的电压来支持请求的频率
据我的理解,每个核心运行的操作系统独立做出决策。在能够让每个核心以不同频率运行的硬件上,决策代码不需要彼此协调。如果在一个核心上运行高频率需要高电压芯片范围内实现,硬件会处理这个问题。我认为DVFS(动态电压和频率调节)的现代实现是相当高级的,操作系统只需告诉硬件它想要N个选择中的哪一个,板载功率微控制器负责编程振荡器/时钟分频器和电压调节器的细节。
英特尔的“Turbo”功能可以在最大可持续频率以上机会性地提高频率,决策是由硬件做出的。每当操作系统请求最高广告频率时,CPU利用Turbo(如果功率和冷却允许)。
英特尔的Skylake更进一步:操作系统可以将DVFS的完全控制权交给硬件,可选限制。这使得它可以从微秒到微秒地反应,而不是毫秒级别的时间尺度。这确实允许爆发工作负载中更好的性能,因为在有用时可以获得更多的Turbo功率预算。一些基准测试足够爆发,例如一些浏览器/JavaScript测试(如果我没记错的话)。
在2015年的IDF大会上,关于Skylake新的电源管理进行了全面的讨论,请查看幻灯片或存档的网络广播。那里也详细描述了旧方法,以说明差异,因此如果您想要比我的摘要更详细的信息,真的应该查看一下。(其他IDF演讲的列表在这里,感谢Agner Fog's博客提供链接)

好的。我相信这将是一个被接受的答案,但让我花点时间来吸收你提供的所有信息。 - v010dya

1
核心频率由施加到核心“振荡器”的给定电压控制。
如果CPU温度过高,操作系统可以更改此电压,但BIOS本身也可以更改该电压。

1
我已经给了你一份赏金,因为你回答了大部分的问题。但是能否请你解释一下。操作系统想要向振荡器发送命令,实际上发生的是将该命令加载以便执行。它需要加载到将被更改的核心中吗?还是任何核心都可以(任何核心都可以向另一个核心的振荡器发送命令,或者操作系统将命令加载到特定的核心以供执行)? - v010dya
Volodya,很抱歉我不确定这个问题的确切答案。然而,基于我对PC硬件结构的了解,我的猜测是任何内核都可以完成这项工作。 - Daniel Molina
1
@v010dya 这些进程是完全独立的,因此任何核心都可以执行它们。实际上,答案并不简单,因为有很多事情正在发生。操作系统生成一个“请求”,然后通过驱动程序传递给相应的控制器。然后控制器会“做它们的工作”。但是频率也可以在没有操作系统干预的情况下进行更改。例如(简化)-“BIOS”(它不是BIOS,但为了简单起见...)根据核心的负载更改频率。在这种情况下,操作系统确实加载了核心,但对CPU没有真正的控制等等... - j.kaspar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接