Linux的CPU基准测试工具

我正在寻找一款可在单线程和多线程实例下对CPU性能进行基准测试的实用程序。目前,我有一台装备有双核CPU(E7500)时钟频率为3.6 GHz的旧电脑,现在我考虑将其更换为时钟频率为3.2 GHz的四核CPU(Q9400)。我想看看是否会因额外的两个核心而提高性能(尽管核心速度会降低)。我将使用相同的FSB(400MHz)时钟频率来测试CPU,并且每个CPU的缓存大小相同(1.5MB)。值得一提的是,我有4GB的内存(可以升级到6GB)。
我儿子主要用这台电脑玩TF2游戏(我正在努力让它在Linux下运行),我也用它进行一些视频编码(MP4转DVD)。
我认为更换成四核CPU可能会更好,但任何反馈都将不胜感激。

5有一个叫做Geekbench的工具可以比较CPU性能(已经有关于e7500q9400的测试结果,尽管很多测试是在不同的配置下进行的,因此总线速度等会有所不同)。 - Wilf
5个回答

实际上有一个叫做 sysbench 的工具。

你可以使用以下命令安装它:

sudo apt-get install sysbench

要进行CPU基准测试,您可以使用以下工具:
sysbench cpu run

这将运行一个单线程的CPU基准测试。要使用多个线程,请使用:
sysbench --threads=16 cpu run

11--cpu-max-prime=20000是可选的,默认值为10000。我建议保持默认值,并调整--max-requests(即执行的操作数量)来进行调试。 - MestreLion
23请注意,默认情况下,这是一个单线程测试。如果要测试 N 个核心,您可以使用 --num-threads=N,并使用每个请求的统计输出来比较结果。 - MestreLion
3有没有一个地方可以比较输出以获得相对性能? - jjxtra
@jjxtra 这正是问题所在,所有这些基准测试几乎都是毫无用处的,我可以轻松地编写自己的小型压力测试,没有任何问题,但是没有参考(或者你很难找到它),这使得任何基准测试都变得琐碎无比。 - meow
我刚刚使用https://www.cpubenchmark.net/来获取大致的数据 :) - jjxtra
3在更新的版本中,--test=选项可以省略,只需使用sysbench cpu...。否则,sysbench 1.0.18会打印出:警告:--test选项已被弃用。您可以在命令行上传递脚本名称或路径,而无需任何选项。 - ckujau
3警告:--num-threads已被弃用,请使用--threads代替。 - Madacol
@Madacol:是的,看起来自2016年我发表评论以来,sysbench的CLI界面已经改变了。现在更推荐使用--threads参数,感谢你指出这一点。 - MestreLion
请记住,sysbench在不同系统之间并不是真正可比较的:https://github.com/akopytov/sysbench/issues/469 - kiler129

或者,你可以使用stress-ng。它作为工具的一部分内置了多个压力测试,其中包括CPU压力测试。CPU压力测试包含许多不同的CPU压力方法,涵盖整数、浮点数、位运算、混合计算、素数计算以及各种计算。
安装方法如下:
sudo apt-get install stress-ng

查看与CPU相关的压力测试方法,请使用以下命令:
stress-ng --cpu-method which

要进行基准测试,例如,在4个CPU线程上进行60秒的矩阵乘法运算,请使用以下命令:
stress-ng --cpu 4 --cpu-method matrixprod  --metrics-brief --perf -t 60
stress-ng: info:  [15876] dispatching hogs: 4 cpu
stress-ng: info:  [15876] successful run completed in 60.00s (1 min, 0.00 secs)
stress-ng: info:  [15876] stressor      bogo ops real time  usr time  sys time   bogo ops/s   bogo ops/s
stress-ng: info:  [15876]                          (secs)    (secs)    (secs)   (real time) (usr+sys time)
stress-ng: info:  [15876] cpu              71657     60.00    239.60      0.00      1194.25       299.07
stress-ng: info:  [15876] cpu:
stress-ng: info:  [15876]            885,244,279,148 CPU Cycles                    14.75 B/sec
stress-ng: info:  [15876]          1,289,303,858,968 Instructions                  21.49 B/sec (1.456 instr. per cycle)
stress-ng: info:  [15876]            201,499,961,692 Cache References               3.36 B/sec
stress-ng: info:  [15876]                    790,424 Cache Misses                  13.17 K/sec ( 0.00%)
stress-ng: info:  [15876]            157,689,508,544 Branch Instructions            2.63 B/sec
stress-ng: info:  [15876]              1,232,539,732 Branch Misses                 20.54 M/sec ( 0.78%)
stress-ng: info:  [15876]              5,755,605,036 Bus Cycles                    95.92 M/sec
stress-ng: info:  [15876]            817,296,440,876 Total Cycles                  13.62 B/sec
stress-ng: info:  [15876]                      8,532 Page Faults Minor            142.19 sec  
stress-ng: info:  [15876]                          0 Page Faults Major              0.00 sec  
stress-ng: info:  [15876]                        220 Context Switches               3.67 sec  
stress-ng: info:  [15876]                          0 CPU Migrations                 0.00 sec  
stress-ng: info:  [15876]                          0 Alignment Faults               0.00 sec  

3无法找到软件包stress-ng! - Ehsan M. Kermani
1如果您使用的是旧版本,存档中可能没有stress-ng可用。不过,它们可以在ppa:colin-king/white中找到。 - Colin Ian King
@EhsanM.Kermani :这个软件只能从Ubuntu 15.14版本开始的软件仓库中获取(对于14.04版本,可以使用backports软件仓库)。请参考http://packages.ubuntu.com/search?searchon=names&suite=all&section=all&keywords=stress-ng。 - MestreLion
"--perf: 未知选项 (364)". stress-ng 版本 0.07.11 - rustyx
我在我的ppa中有适用于旧版本的更新版本:ppa:colin-king/white。 - Colin Ian King
http://kernel.ubuntu.com/~cking/stress-ng/ - Colin Ian King
2从stress-ng的manpage中:“stress-ng还可以测量测试吞吐率;这对于观察不同操作系统版本或硬件类型之间的性能变化非常有用。然而,它从来没有被设计成精确的基准测试套件,所以请不要以这种方式使用它。” - Michael Franzl
6作为stress-ng的作者,我最好详细解释一下。stress-ng足够好,可以得出一些比较基准结果,但它并没有经过彻底校准,无法准确说出每个具体压力因素的偏差有多大。因此,我建议运行stress-ng压力测试多次,并观察特定压力测试中的变化程度。如果变化不大,那么可以认为它对于该特定用例是可靠的基准。这完全取决于系统的噪声/繁忙程度、I/O性能如何以及是否发生交换等因素。 - Colin Ian King
4比较stress-ngsysbench,一个告诉我A系统更快(125%),另一个告诉我B系统更快(140%),哪个是正确的? - W.M.
哇。运行 sudo stress-ng 会导致我的戴尔服务器重新启动。不好。 - Leopd
我也重新启动了我的Ubuntu Hetzner服务器!所以请谨慎使用,不要在生产硬件上使用。 - yvess

老问题(尚未选择答案)

但是我最近在寻找一个在多个“发行版”中可用的工具(Termux实际上不是一个发行版),包括Ubuntu,虽然上述提到的软件包是一个常见的好选择,但我在这里读到:https://linuxhint.com/useful_linux_stress_test_benchmark_cpu_perf/ 7-zip有一个内置的基准测试工具!而且7zip几乎可以在每个发行版的软件库中找到。

运行单线程基准测试: 7z b -mmt1

运行多线程基准测试: 7z b

来自我的Pixel 2手机的结果:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs LE)

LE
CPU Freq:  1509  2234  2434  2447  2433  2406  2430  2425  2400

RAM size:    3657 MB,  # CPU hardware threads:   8
RAM usage:    435 MB,  # Benchmark threads:      1

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       1666    99   1631   1621  |      30427   100   2608   2598
23:       1602    99   1644   1633  |      29815   100   2589   2581
24:       1517    99   1644   1632  |      29441   100   2595   2585
25:       1397    99   1607   1596  |      28748   100   2567   2559
----------------------------------  | ------------------------------
Avr:              99   1632   1620  |              100   2590   2581
Tot:              99   2111   2100

3使用选项-mm=*可以很好地运行多个测试。例如,7z b -mm=* - keypress
4这个页面上提到的其他工具在安装时会引入一系列看似无关的依赖,但是7z是自包含的,所以对于我的使用情况来说是一个胜利者。 - Mikael Gueck
1ењЁUbuntu上安иӘ…sudo apt install p7zip-fullпәЊж€–иЂ…ењЁдҢүз”ЁTermuxзљ„Android手жњғ上安иӘ…pkg install p7zipгЂ‚пә€з­”жҰ€дё­жњҒжЏђеЏЉиҢҮ件包еђҚз§°пә‰ - izzulmakin
1太棒了,这正是我所需要的答案。 - Gloat
尽管已经过去一年多了,这个答案仍然非常有效。 - TheGeeko61

phoronix-test-suite

sudo apt-get install phoronix-test-suite
phoronix-test-suite list-available-suites
# Chose one, and run it.
phoronix-test-suite run pts/cpu    

评测了几个现实世界中的CPU密集型应用场景,如压缩、加密和数据库。
请注意,pts/cpu和其他基准测试需要几个GB的磁盘空间。这可能意味着它们具有更真实的工作负载。
在Ubuntu 16.10上进行了测试。

3请解释一下,给我点踩的人 :-) - Ciro Santilli OurBigBook.com
2谢谢。我在使用Phoronix的第一轮测试中被测试选项淹没了,使用了build-suite。 - andersoyvind
1虽然Debian 9中没有,但你仍然可以从https://www.phoronix-test-suite.com/?k=downloads下载.deb文件,并运行`sudo apt install ./phoronix-test-suite(...).deb`。 - hanshenrik
2在描述PTS时,有一件事应该提到的是其基准测试的大小。运行所提到的pts/cpu基准测试会下载大约3GB的数据,并使用大约7GB的磁盘空间(位于用户的主目录中)。 - stefanct
4同意,如果你只是想要一个简单的基准测试工具,那么你不需要使用phoronix-test-suite。它非常庞大,并且会不断要求下载更多的依赖来运行测试。 (当你真正需要这样的工具时,我相信它非常全面) - Jamie Pate

如果您没有root权限(例如,托管的Web服务器)
测量单个核心:
-bash-4.2$ time cat </dev/urandom | head -c 1G | gzip >/dev/null

real    0m43.011s
user    0m42.608s
sys     0m8.819s

测量所有核心:
-bash-4.2$ time cat </dev/urandom | head -c 1G | pigz >/dev/null

real    0m13.870s
user    0m45.988s
sys     0m6.803s

如果你已经有了pv,但又不想安装特殊的基准测试软件,那就更加简单直接了。
a@a-virtual-machine:~$ pv </dev/urandom | gzip >/dev/null 
 149MiB 0:00:04 [37.5MiB/s]
a@a-virtual-machine:~$ pv </dev/urandom | pigz >/dev/null 
 348MiB 0:00:02 [ 173MiB/s]

1太棒了,这正是我所需要的。谢谢! - undefined