我看到我正在查看的 Intel i5 机器上的核心只能以相同的时钟速度运行:/sys/devices/system/cpu/cpu1/cpufreq/related_cpus
列出了所有 CPU。正如预期的那样,设置 cpu1 的时钟速度会更改 cpu0 的时钟速度。
据说我正在运行的 AMD A6-4400M 机器应该能够以不同的时钟速度运行每个核心:/sys/devices/system/cpu/cpu1/cpufreq/related_cpu
仅列出 cpu1。当我使用性能调节器设置 cpu1 的时钟速度并将 1400000 回显到 时scaling_max_freq
,cpu0 的时钟速度仍按预期保持在 2700000。 CPU1 的scaling_cur_freq 读数如预期的 1400000。
然而,cpu1 的cpuinfo_cur_freq
读数为 2700000。从基准测试来看,CPU1 确实仍以 2.7 GHz 运行。我是否遗漏了什么,或者有什么东西坏了?
我正在运行 Linux 2.6.35,并传入idle=mwait
内核命令行。
答案1
这还不是一个明确的答案。相反,这是一组太长的建议,无法容纳在评论中。
恐怕您可能会稍微误解 sysfs cpufreq 参数的含义。例如,在我的核心双核笔记本电脑,related_cpu
两个内核的参数都读取0 1
- 根据您的解释,这意味着内核无法独立切换频率。但事实并非如此——我可以随意设置每个频率。相比之下,affected_cpus
每个核心的参数仅列出各自的 CPU 编号。
您可能需要查看 cpu-freq 的内核文档,以更好地了解affected_cpus
、related_cpus
和scaling_*
等参数cpuinfo_*
。该文档通常与内核源代码包一起分发。具体来说,我建议阅读<kernel-sources-dir>/Documentation/cpu-freq/user-guide.txt
,其中<kernel-sources-dir>
通常代表/usr/src/linux
或/usr/src/linux-<kernel-version>
。 (然而,当我现在自己浏览文档时,我承认我没有抓住一些与频率缩放相关的细微差别。要完全理解这些,可能需要首先对 CPU 架构有一个扎实的了解。)
回到你的问题。我还有一个测试用例:当我更改 的值scaling_max_freq
(使用userspace
或performance
调节器)时,核心时钟会自动切换到新的最大值。您观察到的不同行为可能是以下任意一种:
- 特定于 CPU 上频率缩放机制的硬件实现,
- 由于标准
cpufreq
模块和phc-intel
我正在使用的模块之间存在差异, - 模块的正常行为(如果愿意的话,可以将其称为错误或功能) ,该模块自(我当前的内核版本是)
cpufreq
以来在某个时刻发生了变化,2.6.35
3.6.2
cpufreq
您的 CPU(或整个系列)实现中出现错误的结果,performance
具体到CPU调速器的实现2.6.35
。
您可以采取一些措施来进一步推进调查:
- 阅读
user-guide.txt
并更多地调整其他cpufreq
参数, - 在运行较新的内核时重复测试 - 最简单的方法是启动 liveCD/DVD/USB。
如果您继续遇到意外行为并有更多理由相信这是由于错误造成的(绝对必须检查最新的次要内核版本),请继续报告此问题kernel.org bugzilla。