如何在 Linux 中测试实际 CPU 时钟速度

如何在 Linux 中测试实际 CPU 时钟速度

我有一台新的基于 Core i7 的 Sandy Bridge 机器。系统构建者对这台机器进行了超频,因此当单核负载时,它应该以 4.6Ghz 的速度运行。

然而,供应商给出的确认方法是运行 Prime95 和 CPU-Z - 这些是 Windows 应用程序,而我使用的是 Linux(Ubuntu 11.04)环境。

在互联网上搜索了大量信息之后,我仍无法找到一种规范的方法来确认 Linux 中单核负载下是否发生了“涡轮增压”。

这对我来说非常重要,因为我正在机器上运行计算物理计算,并且需要它尽可能快。

答案1

经过大量的搜索、论坛帖子和死胡同,我终于发现了“TurboStat”工具,它能够读取 CPU 频率。它是源代码形式,链接在这里:https://github.com/torvalds/linux/blob/master/tools/power/x86/turbostat/turbostat.c

我尝试过但未能使用的其他工具:cpufreq、cpupowerutils

答案2

使用 MPrime。它与 prime95 相同,但适用于 Linux。请参阅这里了解更多信息。

答案3

你应该能够使用以下命令找出当前的 CPU 速度

more /proc/cpuinfo | grep MHz

请记住,4.6GHz 的速度是当您最大限度地利用一个核心时的速度,如果您的测试程序使用多个核心,您可能不会看到那么高的速度。

答案4

该文件/proc/cpuinfo(另一个答案中推荐)列出了读取文件时每个核心的当前 CPU 频率。如果启用了动态 CPU 频率缩放(例如 turbo boost),这可能无法反映程序执行期间的整个 CPU 频率。

跑步perf stat将报告程序运行时的平均频率,计算方法是将测量的 CPU 周期数除以总用户+系统时间。(周期数和用户+系统时间均在所有线程上相加。)这是一种非常好的方法,可以确定程序运行的核心上实际的 CPU 频率。

例如,在 ThunderX2 上运行perf stat单线程、高 CPU 密集型的命令 ( ):md5sum

$ perf stat timeout 5 md5sum /dev/zero

 Performance counter stats for 'timeout 5 md5sum /dev/zero':

          5,000.82 msec task-clock:u              #    1.000 CPUs utilized
                 0      context-switches:u        #    0.000 /sec
                 0      cpu-migrations:u          #    0.000 /sec
               133      page-faults:u             #   26.596 /sec
     9,814,860,071      cycles:u                  #    1.963 GHz
    11,687,517,078      instructions:u            #    1.19  insn per cycle
   <not supported>      branches:u
           199,612      branch-misses:u

       5.001897254 seconds time elapsed

       4.931454000 seconds user
       0.069996000 seconds sys

相关内容