cpufreq-info 与 /proc/cpuinfo 不同吗?

cpufreq-info 与 /proc/cpuinfo 不同吗?

我有一台服务器,我想确保它始终以最大速度运行,而不是处于节能模式。我尝试了一些策略(除了重新启动并更改 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。内核中有两个值:

  1. scaling_cur_freq 是 cpufreq 驱动程序认为它已请求的频率。/proc/cpuinfo 包含此值。它调用 cpufreq_quick_get() 函数。

  2. 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 更新。

相关内容