7

我正在扩展 Linux 内核以控制某些线程的频率:当它们被调度到一个内核(任何内核!)上时,内核的频率会通过将正确的 p-state 写入寄存器来更改IA32_PERF_CTL,如 Intel 的建议手动的。但是当调度具有不同“自定义”频率的不同线程时,似乎所有线程的吞吐量都会增加,就好像所有内核都以最大设定频率运行一样。

我在不同的负载和配置条件下做了很多试验和测量,但结果是一样的。在使用 CPUFreq 进行了一些试验后(没有运行应用程序,我在每个内核上设置了不同的频率,最后用 cpufreq-info -w 测量的频率相等),我想知道 CPU 内核是否真的可以以不同的独立频率运行,或者是否存在硬件策略或限制。

最后,是否有一种 CPU 模型可以使这种细粒度的频率缩放变得可行?

我使用的 CPU 是 Intel Core i5 750

4

4 回答 4

4

您无法控制活动核心的单个核心频率。但是,您可以将所有活动核心的频率控制为相同。原因在前面的答案中 - 所有内核都在同一个有源电压平面上。希望下一代 Haswell 处理器能够单独控制每个内核。

于 2012-11-19T22:59:44.697 回答
3

我认为你错过了一大块图片!

阅读电源和时钟域。域内的所有处理器内核都以相同的 P 状态运行(即相同的频率和电压)。所有内核在该域中运行的 P 状态将始终是请求该域中最高 P 状态的内核的 P 状态。MSR 根本不反映这一点,内核公开的接口也没有。

Anandtech 对此有一篇很好的文章: http ://www.anandtech.com/show/2658/2

“这与 AMD 的 Phenom 非常相似,但两者的不同之处在于它们处理电源管理的方式。虽然 AMD 将允许单个内核请求不同的时钟速度,但 Nehalem 试图以相同的频率运行其所有内核;如果一个核心处于空闲状态,然后它只是电源门控,核心被有效地关闭。”

我还没有将功率计连接到 SB/IB,但我的猜测是行为是相同的。

于 2012-09-26T16:02:36.360 回答
2

cpufreq-info将显示有关哪些内核需要在其 P 状态下同步的信息:

[root@navi ~]# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0 1 <---- THIS
  CPUs which need to have their frequency coordinated by software: 0 <--- and THIS
  maximum transition latency: 10.0 us.

至少正因为如此,我建议通过 cpufreq 接口而不是直接设置寄存器,并且可以在可能有不常见要求的非英特尔 CPU 上运行。

还要检查如何使内核线程坚持特定的内核,以避免意外切换,如果你还没有这样做的话。

于 2012-07-13T01:04:55.273 回答
0

我要感谢大家的贡献!进一步调查,我发现了我与社区分享的其他细节。

正如建议的那样,Nehalem 将所有内核放在一个时钟域中,以便将所有内核中设置的最大频率应用于所有内核;某些工具可能会在空闲内核上显示不同的频率,但运行任何应用程序以将频率提高到最大值就足够了。根据我的测试,这也适用于 Sandy Bridge,其中内核和 LLC 切片都位于相同的频率/电压域中。我假设这种行为也发生在 Ivy Bridge 上,因为它只是一个“滴答”的迭代。相反,我相信 Haswell 将内核和 LLC 切片放置在不同的单一域中,从而实现每内核频率。这也在几个页面上做广告,比如 http://www.anandtech.com/show/8423/intel-xeon-e5-version-3-up-to-18-haswell-ep-cores-/4

于 2014-12-22T12:40:09.470 回答