![cpufreq-info 与 /proc/cpuinfo 不同吗?](https://linux22.com/image/662072/cpufreq-info%20%E4%B8%8E%20%2Fproc%2Fcpuinfo%20%E4%B8%8D%E5%90%8C%E5%90%97%EF%BC%9F.png)
我有一台服务器,我想确保它始终以最大速度运行,而不是处于节能模式。我尝试了一些策略(除了重新启动并更改 BIOS 中的设置,对于几百台服务器,我必须这样做),但我得到了奇怪的结果cpufreq-info
。例如:
root@主机:~# cpufreq-info -c 0 cpufrequtils 007:cpufreq 信息 (C) Dominik Brodowski 2004-2009 向以下机构报告错误和缺陷[电子邮件保护], 请。 分析CPU 0: 驱动程序:acpi-cpufreq 以相同硬件频率运行的 CPU:0 需要通过软件协调频率的 CPU:0 最大转换延迟:10.0 us。 硬件限制:1.20 GHz - 2.20 GHz 可用频率步进:2.20 GHz、2.20 GHz、2.10 GHz、2.00 GHz、1.90 GHz、1.80 GHz、1.70 GHz、1.60 GHz、1.50 GHz、1.40 GHz、1.30 GHz、1.20 GHz 可用的 cpufreq 调节器:保守、按需、用户空间、省电、性能 目前的政策是:频率应该在2.00 GHz和2.20 GHz之间。 调速器的“性能”可能决定使用哪种速度 在此范围内。 当前 CPU 频率为 1.20 GHz(通过调用硬件断言)。 cpufreq 统计:2.20 GHz:6.50%,2.20 GHz:0.24%,2.10 GHz:0.34%,2.00 GHz:0.05%,1.90 GHz:0.04%,1.80 GHz:0.03%,1.70 GHz:0.03%,1.60 GHz:0.03%,1.50 GHz:0.03%,1.40 GHz:0.03%,1.30 GHz:0.03%,1.20 GHz:92.66% (8080636)
请注意,最小速度显示为“2.00 GHz”,并且调节器设置为“性能”,但当前 CPU 频率为1.20 GHz。但是,如果我只查看 /proc/cpuinfo,那里的值始终是 ~2.2 GHz:
root@host:~# egrep 'MHz|Xeon' /proc/cpuinfo ; cpufreq-info -c 0 型号名称:Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz CPU MHz:2200.000 型号名称:Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz CPU频率:2201.000
以下哪项是正确的?我相信哪项?除了更改 BIOS 之外,还有其他方法可以保证最大性能模式吗?值得一提的是,这是 Ubuntu 12.04,其内核如下:
Linux host 3.2.0-76-generic #111-Ubuntu SMP Tue Jan 13 22:16:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
答案1
我几乎确信您的 BIOS 将 CPU 限制为 1.20 GHz。内核中有两个值:
scaling_cur_freq 是 cpufreq 驱动程序认为它已请求的频率。/proc/cpuinfo 包含此值。它调用 cpufreq_quick_get() 函数。
cpuinfo_cur_freq 是实际编程到 CPU 中的频率。cpufreq-info 正在使用此值,如“通过调用硬件断言”所示。(它最终调用 __cpufreq_get()。)如果 cpuinfo_cur_freq 不可用,它将回退到 scaling_cur_freq。
+1 关于 Matt 对大规模 BIOS 更新的评论。例如,HP Proliant DL 级服务器允许您在线更改电源调节。也许您的硬件具有类似的功能。
答案2
BIOS 更改是保证峰值性能的最佳方式,但一些硬件控制的频率缩放是不可避免的(热节流)。
这是英特尔的一篇帖子设置 CPU 频率。在一定程度上,CPU 频率可以在用户和操作系统级别进行控制。以下是一些附加信息来自 Arch Linux 关于频率缩放你可能会发现很有价值。
在 BIOS 方面,可以使用独立管理接口(例如专用的智能平台管理接口 (IPMI) NIC 或可编写脚本的 KVM 系统)对一组服务器进行大规模 BIOS 更新。