了解 cat /proc/cpuinfo 的处理器频率部分

了解 cat /proc/cpuinfo 的处理器频率部分

我正在查看我的 Ubuntu Linux 11.10 系统上的处理器规格。

以下是 cat /proc/cpuinfo 命令的输出结尾:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
stepping    : 2
cpu MHz     : 933.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 2
cpu cores   : 2
apicid      : 5
initial apicid  : 5
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
bogomips    : 4256.47
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

我不明白的是标​​记的行:

model name  : Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
cpu MHz     : 933.000

这里的处理器频率在第一行是 2.13 GHz,在第二行是 933 Mhz。哪一个是正确的?2.13 GHz 是指核心频率的总和吗?

最后,哪一个频率可以告诉我系统时钟每秒所花的周期数/每秒时钟滴答数?

编辑:在 Bruno Pereira 的精彩回答的一个小扩展中,我发现让处理器在运行过程中以不同的频率运行也是动态频率缩放或 CPU 节流。以下是两个可能感兴趣的网页:

http://en.wikipedia.org/wiki/Dynamic_frequency_scaling

http://en.wikipedia.org/wiki/SpeedStep

答案1

Linux 使用调节器来设置你的 CPU 将以哪个步进方式运行(如果你的 CPU 支持步进设置)。

通常这些设置为按需默认情况下,这意味着当不频繁使用时,CPU 的频率将会降低。

cpufreq-info是一个实用程序,用于检查 CPU 可用的步骤、每个 CPU 核心当前正在使用哪个内核调控器以及有关 CPU 功能的更多信息。
它返回类似

cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to [email protected], please.
analyzing CPU 0:
  driver: powernow-k8
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 8.0 us.
  hardware limits: 800 MHz - 3.00 GHz
  available frequency steps: 3.00 GHz, 2.30 GHz, 1.80 GHz, 800 MHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 800 MHz and 3.00 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 800 MHz.
  cpufreq stats: 3.00 GHz:10.45%, 2.30 GHz:0.29%, 1.80 GHz:1.72%, 800 MHz:87.55%  (28605)

有关如何从命令行检查和设置 CPU 步进的更多信息,我已经创建了另一个问题的答案,解释了如何执行此操作here, 看一看。

你的 CPU 最大频率是 2.13Ghz,但除非你的内核调节器设置为表现在大部分空闲时间内,您的系统会降低该频率。

933Mhz 是您的 CPU 可用的最低步进,这可能意味着您的系统目前没有承受太大的压力,或者它正在使用节省电力州长。

您可以测试在系统负载下是否获得相同的结果,如果频率没有变化,则您正在使用节省能源调速器,使你的 CPU 频率始终保持在 933Mhz。

答案2

933 MHz 是该 CPU 核心的当前频率(由于系统处于空闲状态,它可能以较低的速度运行),而 2.13 GHZ 是最大频率。另请参阅程序的输出cpufreq-info

答案3

由于 turbo 和 c 状态,CPU 频率变得更加复杂。

当处理器空闲且处于 c 状态时,它将报告该处理器的最低频率,通常如 available_scaling_frequencies 中所见。

因此,即使您选择性能调节器,您也会看到两种速度,即最小速度和最大速度 - 但最小频率实际上毫无意义,因为 CPU 处于 c 状态而没有执行任何事情。

这些值实际上与一组寄存器 msr 0x199、0x198、0x1a0 和 0x1ad 直接相关,如果您好奇的话,可以通过 rdmsr 实用程序直接读取它们。

更令人困惑的是,调节器请求可用的最大频率,并且有足够的散热空间,内核可以超频,并且不会在 msr 0x199 或 cpuinfo 中报告。需要使用 aperf/mperf 实用程序来确定您的 CPU 是否以高于保证速度运行。

模型信息值是保证速度。这意味着在适当的冷却条件下,芯片应该始终能够以该频率运行。在这个例子中,该频率为 2.13GHz。

寄存器 0x​​1ad 显示可用的 Turbo 频率。在 8 核 EE 芯片上,您的寄存器可能如下所示:1b1b1c1c1d1d1e1e

每个字节表示当时可以激活的CPU数量+1,以获得频率。

在这种情况下,如果有 7 个或 8 个内核处于活动状态,则最大倍数为 0x1b 或 27。倍数通常为 100MHz,尽管另一个 MSR 指定了这一点。因此,此 EE 部件能够以 2.7GHz 运行,而保证频率为 2.2GHz。随着更多 CPU 处于 c 状态/空闲状态,涡轮增压比可以上升到最高 30,如果只有 1 个或 2 个内核处于活动状态,则最高可达 3.0GHz。

由于这些 CPU 是超标量的,并且可以执行无序操作,并且由于 CISC 中的宏指令可能需要多个周期,因此时钟速率并不是周期的有意义的指示。

Bogomips 基本上是一个基于一个周期内的无操作数量的任意指示,但是有太多变量无法简单地基于 CPU 频率来执行性能。

更有趣的是实际指令性能本身。您可以使用 perf 工具来监控这一点,并以更有意义的方式跨工作负载计算指令和其他操作。

一般来说,如果您在热性能方面是安全的,并且您知道您的 CPU 受限但 CPU 爆满,并且您不关心功耗,那么您可以使用性能调节器并保持 c 状态启用。C 状态的节能效果明显高于 p 状态带来的任何节能效果。无论如何,许多工作负载也受益于在 c 状态下竞争等待。

相关内容