确定时钟速度

san*_*lio 8 cpufreq frequency

我的意思是确定时钟速度。我在下面发布了此处列出的各种命令的输出。

对于最大频率,我看到 4 个不同的源,有 2 个不同的值:

  1. CPU max MHz: 3300,0000lscpu
  2. capacity: 3300MHzlshw
  3. capacity: 3800MHzsudo lshw
  4. Max Speed: 3800 MHzdmidecode

对于当前频率,我看到 4 个不同的源,大约有 3 个不同的值:

  1. CPU MHz: 2100.000lscpu
  2. cpu MHz : 1691(由我平均)从cat /proc/cpuinfo.
  3. Current Speed: 2600 MHzdmidecode
  4. Detected 2594.332 MHz processorcat /var/log/dmesg

我的观察:

  1. 对于最大频率和当前频率,获得的输出存在很大差异。如何理解这一点? 例如,lshw带或不带 会给出不同的结果sudo这是预期的吗?哪个应该被认为更可靠,为什么?
  2. 4 个处理器的时钟速度甚至不同。如此大的变化是预期的吗?

注意:正如@hobbs的适当要求,这个OP的动机是需要理解“时钟速度”(无论对应哪个变体)、CPU频率规格和内存速度规格之间的关系(这里也可能有多个值,请参见例如dmidecode 显示内存模块电压:DDR3 RAM 为 3.3 V)。


输出

$ lscpu | grep "MHz"
CPU MHz:                         2100.000
CPU max MHz:                     3300,0000
CPU min MHz:                     1200,0000

$ cat /proc/cpuinfo | grep "MHz"
cpu MHz         : 1753.417
cpu MHz         : 1200.000
cpu MHz         : 2212.235
cpu MHz         : 1600.000

$ lshw -c cpu | grep capacity
WARNING: you should run this program as super-user.
       capacity: 3300MHz
$ sudo lshw -c cpu | grep capacity
       capacity: 3800MHz

$ sudo dmidecode -t processor | grep "Speed"
        Max Speed: 3800 MHz
        Current Speed: 2600 MHz

$ cat /var/log/dmesg | grep "MHz processor"
[    0.000000] kernel: tsc: Detected 2594.332 MHz processor

$ cat /var/log/kern.log | grep "MHz processor"
Run Code Online (Sandbox Code Playgroud)

Art*_*ild 7

以下推论完全是基于我自己的实验和推断。此外,部分推导是将这些数字与 CPU 制造商报告的官方时钟速度进行比较。

此命令显示每个处理器核心的当前时钟:(所有后续命令在 Intel Atom C3558 CPU 上运行)

$ cat /proc/cpuinfo | grep "MHz"
cpu MHz         : 1260.714
cpu MHz         : 1070.646
cpu MHz         : 1124.995
cpu MHz         : 1234.689
Run Code Online (Sandbox Code Playgroud)

此命令显示内核之间的当前“平均”时钟(根据我自己的观察,纯粹基于试验)CPU MHz和最大正常时钟(CPU max MHZ)。

$ lscpu | grep "MHz"
CPU MHz:                         1181.650
CPU max MHz:                     2200.0000
CPU min MHz:                     800.0000
Run Code Online (Sandbox Code Playgroud)

请注意,当前时钟速度(平均时钟速度和每个内核的时钟速度)随时间变化很大(可能每秒多次),因为系统通常会连续限制 CPU 时钟以实现节能(低至CPU min MHZ)。我相信 CPU 核心之间的差异也是正常的。

此命令还显示最大正常时钟(capacity- 应与上面相同CPU max MHz)。

$ lshw -c cpu | grep capacity
WARNING: you should run this program as super-user.
       capacity: 2200MHz
Run Code Online (Sandbox Code Playgroud)

然而,对于我的Intel Atom CPU,只有在没有sudo(2200 MHz) 的情况下才能正确报告。使用 时sudo,它会报告更高的数字(在本例中也是 3800 - 这可能是最大提升时钟,但我不确定在 Atom CPU 的情况下):

$ sudo lshw -c cpu | grep capacity
       capacity: 3800MHz
Run Code Online (Sandbox Code Playgroud)

对于Broadcom ARM CPU(在 Raspberry Pi 4 上),无论是否使用 sudo,该值都是相同的 (1500 MHZ)。我猜这是因为 Pi Arm CPU 没有 boost/turbo 模式。


Lui*_*ado 5

更新了答案:有什么方法可以检查我的处理器的时钟速度?

但总而言之:

上面的所有命令还将为您提供当前的 cpu 赫兹,这意味着,如果您希望在 lscpu 上看到相同的频率,并且在执行 cat /proc/cpuinfo 时这几乎是不可能的。您可以比较最大值,因为对于您可以分析 CPU 的任何方式来说,它都应该显示相同的结果,但在您执行它时,电流始终是字面上的“当前 CPU 赫兹”。

最后请注意,dmidecode 从 ACPI 表中读取信息,这并不总是与其他工具完成的实时信息相同。

所以你有几种方法来获取当前的真实CPU,然后你还有方法来获取ACPI表注册的内容(在我的例子中这是非常错误的)。

这就是为什么如果多次运行 lscpu,当前速度总是会改变,/proc/cpuinfo 也是如此。但对于 dmidecode 它将(在许多情况下)保持相同的值,即使该值是误报。