每线程的英特尔MSR频率调整

时间:2012-06-19 12:04:38

标签: linux linux-kernel intel frequency

我正在扩展Linux内核以控制某些线程的频率:当它们被调度到核心(任何核心!)时,通过将正确的p状态写入寄存器{{}来改变核心的频率。 1}},如英特尔手册中所述。 但是,当调度具有不同“自定义”频率的不同线程时,似乎所有线程的吞吐量都会增加,就好像所有内核都以最大设置频率运行一样。

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

最后,是否有一个CPU模型可以实现这种细粒度的频率调整?

我使用的CPU是Intel Core i5 750

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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

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

"这与AMD的Phenom非常相似,但两者的区别在于它们如何处理电源管理。 虽然AMD将允许单个内核请求不同的时钟速度,但Nehalem尝试以相同的频率运行所有内核;如果一个核心处于闲置状态,那么它只需要电源门控,核心就会被有效关闭。"

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

答案 2 :(得分: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上运行。

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

答案 3 :(得分:0)

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

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