通过将正确的p状态写入寄存器 IA32_PERF_CTL
来改变'm extending the Linux kernel in order to control the frequency of some threads: when they are scheduled onto a core (any core!), the core'的频率,如英特尔手册中所述 . 但是,当调度具有不同频率的不同线程时,似乎所有线程的吞吐量都会增加,就好像所有内核都以最大设置频率运行一样 .
我在不同的负载和配置条件下进行了许多试验和测量,但结果是一样的 . 经过一些CPUFreq试验(没有正在运行的应用程序,我在每个核心上设置不同的频率,最后测量的频率,与cpufreq-info -w相等),我想知道CPU内核是否可以 really 运行在不同的, independent frequencies ,或者是否存在硬件策略或约束 .
最后,是否有一个CPU模型可以实现这种细粒度的频率调整?
我使用的CPU是Intel Core i5 750
4 回答
您无法控制活动核心的各个核心频率 . 但是,您可以控制所有活动核心的频率相同 . 原因在于之前的答案 - 所有核心都在同一个有源电压平面上 . 希望下一代Haswell处理器能够分别控制每个核心 .
我想你错过了一大片图片!
阅读电源和时钟域 . 域内的所有处理器核以相同的P状态(即,相同的频率和电压)运行 . 所有核心将在该域中运行的P状态将始终是请求该域中最高P状态的核心的P状态 . MSR根本不反映这一点,内核公开的接口也没有 .
Anandtech有一篇很好的文章:http://www.anandtech.com/show/2658/2
“这与AMD的Phenom非常相似,但两者的不同之处在于它们如何处理电源管理. While AMD will allow individual cores to request different clock speeds, Nehalem attempts to run all of its cores at the same frequency ;如果一个核心处于空闲状态,那么它只是电源门控而且核心被有效关闭 . ”
我还没有将功率计连接到SB / IB,但我的猜测是行为是一样的 .
cpufreq-info 将显示有关哪些核心需要在其P状态中同步的信息:
至少正因为如此,我建议通过cpufreq接口而不是直接设置寄存器,以及可以在可能具有不常见要求的非英特尔CPU上运行 .
还要检查如何使内核线程坚持特定内核,以避免未经指定的切换,如果你还没有这样做的话 .
我要感谢大家的贡献!进一步调查,我发现了我与社区分享的其他细节 .
如上所述,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等几个页面上做广告