我正在扩展Linux内核,以控制某些线程的频率:当它们被调度到内核(任意内核!)上时,通过将适当的p状态写入寄存器IA32_PERF_CTL来改变内核的频率,就像英特尔手册中所建议的那样。但是,当调度具有不同“自定义”频率的不同线程时,似乎所有线程的吞吐量都会增加,就好像所有核心都以最大的设置频率运行一样。
我在不同的负载和配置条件下做了很多试验和测量,但是结果是一样的。在对CPUFreq进行了一些试验之后(没有运行的应用程序,我在每个核上设置了不同的频率,最后用cpufreq-info -w设置的频率是相等的),我想知道CPU内核是否真的可以在不同的、独立的频率上运行,或者是否存在硬件策略或约束。
最后,是否有一个CPU模型使这种细粒度的频率缩放成为可能?
我使用的处理器是Intel Core i5 750。
发布于 2012-11-19 22:59:44
不能控制活动核的单个核心频率。但是,您可以控制所有活动核的频率是相同的。原因是在前面的答案-所有的核心是在相同的有源电压平面。希望下一代哈斯韦尔处理器能够单独控制每个核心.
发布于 2012-09-26 16:02:36
我想你漏掉了一张大照片!
阅读电源和时钟域。域内的所有处理器核心在相同的P状态下运行(即相同的频率和电压)。所有核心将在该域中运行的P状态始终是请求该域中最高P状态的核心的P状态。MSR根本不反映这一点,内核公开的接口也不反映这一点。
Anandtech在这方面有一篇很好的文章:http://www.anandtech.com/show/2658/2
“这一切都非常类似于AMD的”现象“,但两者的不同之处在于它们处理电源管理的方式不同。虽然允许单个核心请求不同的时钟速度,但Nehalem试图以相同频率的运行所有核心;如果一个核心空闲,那么它只是电源门控,核心实际上被关闭。”
我还没有把电度表连到SB/IB上,但我的猜测是这种行为是一样的。
发布于 2012-07-13 01:04:55
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上运行。
此外,检查如何使内核线程坚持到特定的核心,以避免意外的切换,如果你还没有这样做。
https://stackoverflow.com/questions/11100522
复制相似问题