基准测试
所谓基准测试,就是通过一个统一的流程来测试性能,并将其结果和其它系统测到的结果或一个被广泛接受的标准相比较的行为。这种计算系统性能的统一流程可以帮助解答一些问题,比如:
- 系统是否发挥正常?
- 用哪个版本的驱动可以达到最佳性能?
- 系统能否胜任某任务?
许多工具可以测试系统性能,下面列出可用的工具。
安装 unixbenchAUR,在终端中运行 ubench 开始基准测试。
另请阅读:
- https://github.com/kdlucas/byte-unixbench
- https://github.com/kdlucas/byte-unixbench/blob/master/UnixBench/USAGE
interbench 旨在测试 Linux 的交互性能,设计用于测试修改 Linux 内核设计或系统配置(包括 CPU、I/O 调度器、文件系统及其参数的变更等)后的效果。
可通过 AUR 获取 interbench:interbenchAUR。
另请阅读:
fio包(Flexible I/O Tester)是一个实用工具,可以帮助模拟多种不同的工作负载(比如多个线程使用异步 I/O 发起读请求)。fio 会生成一些线程或进程执行用户指定的 I/O 类型。英文文档
示例用法:
# fio --filename=/mnt/test.fio --size=8GB --direct=1 --rw=randrw --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
ttcp(Test TCP)测试任意网络连接的 P2P 带宽。所测试路径两端的设备都需要安装该程序。
可以在 AUR 找到不同版本的 ttcp:
iperf 是一款易用的 P2P 带宽测试工具,支持 TCP 和 UDP。它的输出格式非常好,且带有并行测试模式。
time(1) 命令通过显示某条命令从调用到终止之间的时间,提供命令运行的耗时统计信息。time包 包含了 time 命令,某些命令行解释器也提供了 time 作为内置命令。
$ time tar -zxvf archive.tar.gz
hdparm(hdparm包)可用于存储介质的基准测试。-Tt 选项用于测量顺序读取的速度,此方法不受分区对齐影响!
# hdparm -Tt /dev/sdX
/dev/sdX: Timing cached reads: x MB in y seconds = z MB/sec Timing buffered disk reads: x MB in y seconds = z MB/sec
图形化基准测试工具 gnome-disks 可通过 gnome-disk-utility包 安装,可以美观地展示最小/最大/平均读取速度以及平均访问时间。此方法不受分区对齐影响!
# gnome-disks
然后通过图形界面开始基准测试(其他分区选项(▶⃞) > 测试分区性能(B)… 或 驱动器选项(⋮) > 测试磁盘性能(B)…)。
kdiskmark包 是一款具有非常友好的图形用户界面的 HDD 和 SSD 基准测试工具。KDiskMark 凭借其预设和强大的图形界面,调用 fio 并处理输出,提供易于查看和解读的全面基准测试结果。
$ systemd-analyze plot > boot.svg
上述命令会把启动顺序画成一个详细的图,包括:内核用的时间、用户态时间、每个服务占用的时间。样例
dd 实用程序可用于测量读取和写入速度。此方法受分区对齐影响!换句话说,由于是在通过文件系统在已挂载分区上进行读取和写入,没有正确对齐分区导致的性能下降会在此处显现出来。
首先,进入一个至少有 1.1 GB 可用空间的 SSD 上的目录(需要有读、写、执行权限),然后写入一个测试文件,用于测量写入速度,也用于之后从该设备读取:
$ dd if=/dev/zero of=/SSD/上/的/目录/tempfile bs=1M count=1024 conv=fdatasync,notrunc status=progress
1024+0 records in 1024+0 records out v bytes (w MB, x MiB) copied, y s, z MB/s
接下来,清除缓冲区缓存,以便直接从设备准确测量读取速度:
# echo 3 > /proc/sys/vm/drop_caches $ dd if=tempfile of=/dev/null bs=1M count=1024 status=progress
1024+0 records in 1024+0 records out v bytes (w MB, x MiB) copied, y s, z MB/s
现在该文件已经重新存到了缓冲区,重复该命令就可以测试缓存速度:
$ dd if=tempfile of=/dev/null bs=1M count=1024 status=progress
1024+0 records in 1024+0 records out v bytes (w MB, x MiB) copied, y s, z MB/s
最后,删除该临时文件
$ rm tempfile
dcfldd 不会像经典的 dd 那样以 MB/s 为单位打印平均速度,但借助 time 可以解决这一问题。
测试清除磁盘所需时间:
# time dcfldd if=/dev/zero of=/dev/sdX bs=4M
18944 blocks (75776Mb) written.dcfldd:: No space left of device real 16m17.033s user 0m0.377s sys 0m51.160s
通过将 dcfldd 命令输出的数据量(单位:MiB,注意 dcfldd 将 B 输出为 b)除以时间(单位:秒)来计算速度。在此示例中:75776 MiB / (16.4 * 60 s) = 77.0 MiB/s。
7z 基准测试命令可用于测量 CPU 执行指令的速度(MIPS),也可用于检查内存缺陷。只需安装 7-Zip 并运行以下命令。更多详细信息可参阅 [1]。
$ 7z b
peakperf-gitAUR 是一个微基准测试工具,可让 x86_64 CPU 达到峰值性能。某些问题,例如 CPU 散热不佳,可能会降低 CPU 应有的性能。peakperf 可用于检查 CPU 是否发挥了其全部能力。
CPU 理论上应达到的性能可以自行计算(以 GFLOP/s 衡量,参见 [2]),然后将其与 peakperf 给出的实测性能进行比较。如果两个值相同或非常接近,则说明 CPU 运行正常。
cryptsetup 基准测试可用于测量进行各种加密算法的速度。
$ cryptsetup benchmark
libkcapiAUR 允许用户空间访问 Linux 内核加密 API。该软件包提供了多个可执行文件,其中 kcapi-speed 可用于对哈希、对称加密算法、AEAD 加密算法、基于哈希或加密算法的随机数生成器进行基准测试。
列出可用的加密算法:
$ kcapi-speed -l
使用 AES-NI 进行 AES 基准测试的示例(ECB 模式,128 位密钥,测试 3 秒,处理 1024 个块):
$ kcapi-speed -c 'AES(AESNI) ECB(ASM) 128' -b 1024 -t 3
输出分别为解密和加密的测试结果:
AES(AESNI) ECB(ASM) 128 |d| 16384 bytes| 5.41 GB/s|330631 ops/s AES(AESNI) ECB(ASM) 128 |e| 16384 bytes| 5.47 GB/s|334185 ops/s
bonnie++包 是Bonnie 基准测试套件的 C++ 重写版本,主要测试硬盘和文件系统性能。
另请阅读:
IOzone 可用于对供应商的计算机平台进行全面的文件系统分析。
以下命令可以近似模拟 CrystalDiskMark(一款流行的 Windows 基准测试工具)的若干测试结果:
- 顺序 1 MiB 读写:
iozone -e -I -s 1g -r 1m -i 0 -i 1 - 顺序 128 KiB 读写:
iozone -e -I -s 1g -r 128k -i 0 -i 1 - 随机 4 KiB 读写:
iozone -e -I -s 1g -r 4k -i 0 -i 2 -i 1
结果以 KiB/s 为单位,因此除以 1024 即可转换为 MiB/s。
另请参阅论坛帖子:iozone to evaluate I/O schedulers... results NOT what you would expect!。
hardinfo2包 可以收集系统硬件和操作系统信息,进行基准测试,生成 HTML 或纯文本格式的可打印报表。HardInfo 会测试 CPU 和 FPU,并有简洁的 GTK 界面。
Phoronix 测试套件是目前最全面的测试和基准测试平台,它提供了一个可扩展的框架,可轻松添加新的测试。该软件旨在以简洁、可重现且易用的方式有效进行定性和定量的基准测试。
Phoronix 测试套件基于 Phoronix.com 自 2004 年以来进行的大量测试和内部工具,并得到了主流计算机硬件和软件供应商的支持。该软件是开源软件,采用 GNU GPLv3 许可。
Phoronix 测试套件最初是为 Linux 自动测试而开发的,后来增加了对 OpenSolaris、Apple macOS、Microsoft Windows 和 BSD 系统的支持。Phoronix 测试套件包括一个轻量级处理核心(pts-core),每个测试都由基于 XML 的配置文件和相关资源脚本组成。从安装基准测试到实际进行基准测试,再到重要硬件和软件组件的解析,整个过程高度自动化且完全可重复,用户只需要确认操作。
Phoronix 测试套件与 OpenBenchmarking.org 对接,后者是一个协作式网络平台,有集中存储测试结果、共享测试配置文件和结果、高级分析等功能。Phoromatic 是一个企业组件,具有远程管理功能,可协调多个系统的测试执行。
可通过 phoronix-test-suiteAUR 安装该套件。另外也可以通过 phoronix-test-suite-gitAUR 获取开发版本的套件。
I/O 基准测试套件 S,是一个小型的用于测量存储 I/O 性能的脚本集。
下载或克隆该项目,安装其依赖,并以 root 身份运行(需要更改磁盘调度器的权限)。
s-tui 是一款美观实用的 curses 风格 TUI 程序,能以图表展示 CPU 频率、利用率、温度、功耗,内置有压力测试工具。
sysbench包 是一款全面的多线程基准测试工具。它使用 C 和 Perl 编写,可直接在命令行中测试文件系统、内存、CPU、线程调度器以及 POSIX 互斥锁的性能,也可作为 Lua 脚本解释器对任意复杂的工作负载进行基准测试。它还提供了一系列用于数据库基准测试的脚本。
geekbenchAUR 是一个闭源的跨平台基准测试套件,通过模拟各种真实工作负载来测量 CPU、GPU 和内存性能,跑分可以上传到 Geekbench 网站上,(同一版本的跑分)可用于与其他系统进行比较,无论是你自己的还是别人的。
Geekbench 不适合作为独立的客观性能测试工具,因为它给出的分数与任何单个具体任务无关,也无法反映一台电脑在某一项或多项任务中的实际表现;不过,它可以粗略地反映一台计算机相对于其他计算机的性能水平,或者同一台计算机在不同操作系统/发行版或不同条件下的表现。正因如此,它常被用于 CPU 基准测试对比图表中。
可通过 iozoneAUR 来量化性能。持续读写的测试数据可能与 I/O 繁重操作的实际用例相关,但经常不是这样,例如在系统更新时解压并写入大量文件。在这种情况下可以考虑使用小文件的随机写入速度。
该示例使用 4 KiB 记录大小测试读写一个 10 MiB 文件:
$ iozone -e -I -a -s 10M -r 4k -i 0 -i 1 -i 2
...
random random
kB reclen write rewrite read reread read write
10240 4 661 649 5802 5822 3892 624
Basemark GPU 是一个跨移动和桌面平台的闭源评估工具,用于分析和评估图形 API(OpenGL 4.5、OpenGL ES 3.1、Vulkan、Microsoft DirectX 12)性能。Basemark GPU 通过提供高质量和中等质量模式,同时面向桌面和移动平台。高质量模式针对尖端的桌面工作负载,而中等质量模式则针对等效的移动工作负载。
如果使用 AMD GPU 并同时安装了多个 Vulkan 实现,在“Tests”页面的“Graphics Device”列表中这些不同的 Vulkan 实现会显示为独立的 GPU。
Basemark GPU 可通过 basemarkAUR 获取。
Blender-benchmark 会收集系统信息,如操作系统、内存、显卡、CPU 型号,然后进行系统性能基准测试并记录数据。之后,用户可以在 Blender Open Data 平台上在线分享结果,或将数据保存在本地。
Blender-benchmark 可通过 blender-benchmarkAUR 获取。
furmarkAUR 会显示一幅能造成极高图形负载的图像并显示其帧率。虽然可以用作 GPU 性能的基准测试工具,但它的主要用途是充当压力测试,旨在将 GPU 使用率推向极致——这使其既适合评估满负载下的系统稳定性,也适合评估显卡的散热性能。
GFXBench 是一款高端图形基准测试工具,可跨所有平台地测试硬件在下一代图形技术上的表现。作为名副其实的跨 API 基准测试,GFXBench 支持所有行业标准和厂商特定的 API,包括 OpenGL、OpenGL ES、Vulkan、Metal、DirectX/Direct3D、DX12。
Vulkan API 测试目前正在开发中,仅对其企业合作伙伴开放。
GFXBench 可通过 gfxbenchAUR 获取。
glmark2 是一款 OpenGL 2.0 和 OpenGL ES 2.0 基准测试工具。
glmark2 可通过 glmark2包 获取。
glxgears 是一款流行的 OpenGL 测试工具,可以渲染非常简单的 OpenGL 测试并输出帧数。虽然 glxgears 可以测试图形驱动程序能否进行直接渲染,但它已经过时,不能代表 GNU/Linux 图形显示的现状和 OpenGL 的整体能力。glxgears 仅测试了游戏中会用到的 OpenGL 功能中的一小部分,因此使用 glxgears 测试出的性能提升可能无法在游戏中得到体现。更多信息请参见这里。
glxgears 可通过 mesa-utils包 或 lib32-mesa-utils包(multilib 仓库)获取。
GpuTest 是一款跨平台(Windows、Linux 和 Mac OS X)的 GPU 压力测试和 OpenGL 基准测试工具。GpuTest 带有多项 GPU 测试项目,包括一些来自 Windows 世界的热门项目(如 FurMark 或 TessMark)。
GpuTest 可通过 gputestAUR 获取。
intel-gpu-tools 能用与 top 命令相似的格式显示集成显卡的实时信息,在诊断 GPU 加速问题时非常有用。
intel-gpu-tools 可通过 intel-gpu-tools包 获取。
参见 MangoHud。
Unigine 公司基于他们的图形引擎制造了多个现代化 OpenGL 基准测试,特性如下:
- 像素动态光照
- 普通和视差映射
- 64 位 HDR 渲染
- 体积雾和光
- 强大的粒子系统:火焰、烟、爆炸
- 可扩展着色(GLSL/HLSL)
- 后处理:景深、折射、辉光、模糊、色彩校正等。
最近,Unigine 基准测试开始被超频用户使用。尤其是 heaven 被用于超频的初始稳定性测试。
可以在 AUR 找到这些基准测试:
- unigine-sanctuaryAUR (2007)
- unigine-tropicsAUR (2008)
- unigine-heavenAUR (2009)
- unigine-valleyAUR (2013)
- unigine-superpositionAUR (2017)
vkmark 是一款可扩展的 Vulkan 基准测试套件,提供针对性的、可配置的场景。
vkmark 可通过 vkmark包 获取。
xmrig包 是一款高性能、开源、跨平台的 RandomX、KawPow、CryptoNight 和 GhostRider 统一 CPU/GPU 挖矿程序,是 RandomX 基准测试工具。
如果使用 Radeon GPU 且使用开源 xf86-video-amdgpu包 驱动程序,需要安装 opencl-mesa包 和 rocm-opencl-runtime包。对 GPU 进行压力测试:
$ xmrig --stress --no-cpu --opencl