UnixBench性能测试
UnixBench性能测试工具 始于BYTE UNIX benchmark suite,多年以来由很多人更新和修改,提供了对Unix系统对基本性能度量,用于对比不同系统对性能。测试结果会和一个基线系统进行对比生成一个index值,也就是有一个打分。一系列index值最后被综合起来形成整个系统的观测值(overall index)。
UnixBench测试也包含了一些非常简单对图形测试(2D和3D),并且能够针对多处理器复制足够的副本进行多处理器性能压测。即首先运行一个单任务测试单个CPU性能,然后按照系统的处理器数量调用相应的多任务并发测试:
运行一个单一任务测试系统性能
运行多个任务测试系统性能
从并行性能获得系统实现性能
备注
UnixBench测试不仅关系到系统硬件,也和操作系统,库甚至编译器相关,所以测试对比不同硬件到性能应该确保操作系统、库和编译器一致,而测试操作系统( Kernel )性能,则应该保持其他变量(硬件、库和编译器等)一致。
编译安装(release旧版编译)
编译环境准备
CentOS:
yum install gcc gcc-c++ make libXext-devel
对于Debian/Ubuntu,则使用如下命令安装依赖编译库软件包:
sudo apt install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules make git
下载源代码:
wget https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz tar xf v5.1.3.tar.gz
编译:
cd byte-unixbench-5.1.3/UnixBench make
编译安装(git版本安装)
备注
在 Ubuntu Linux 22.04 这样的主流新版本中编译 UnixBench 非常流畅,不过对于 CentOS 7 这样古老的系统,我实践发现操作系统自带的 gcc 4.85 无法正常编译,所以需要先完成 升级CentOS 7 GCC
首先确保gcc使用较新版本,在 CentOS 7 我执行: 升级CentOS 7 GCC ,升级到 gcc 10.5 版本才能正确编译UnixBench git版本
下载编译UnixBench:
git clone git@github.com:kdlucas/byte-unixbench.git
cd byte-unixbench/UnixBench
make
运行
简单运行:
./Run
如果要测试限制指定cpu数量,例如2个cpu:
./Run -c 2
在ARM系统(128核心)上,执行 ./Run -c 128
会出现报错:
0 CPUs in system; running 128 parallel copies of tests
此外,我发现现在运行中如果使用 -c XX
则直接结束,目前只有不使用参数可以运行。
如果只测试部分测试案例,可以以参数传递测试用例:
./Run dhry2reg whetstone-double syscall pipe context1 spawn execl shell1 shell8 shell16
如果要不断循环测试(例如纯粹为了压测服务器稳定性):
nohup sh -c 'while true;do ./Run;done' &
排错
CentOS 6编译错误
在CentOS 6.9上编译后执行会提示错误:
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./Run line 6.
BEGIN failed--compilation aborted at ./Run line 6.
参考 Can’t locate Time/HiRes.pm Perl 和 Perl-Can't locate Time/HiRes.pm 错误 执行:
yum install perl-Time-HiRes
缺少 3dinfo
在CentOS 7.2上运行报错:
sh: 3dinfo: command not found
参考 byte-unixbench - issue #7 注释掉 3dinfo
行
运行结果
海光
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 2135196710.2 182964.6
Double-Precision Whetstone 55.0 413000.7 75091.0
Execl Throughput 43.0 15679.6 3646.4
File Copy 1024 bufsize 2000 maxblocks 3960.0 3390584.1 8562.1
File Copy 256 bufsize 500 maxblocks 1655.0 849108.0 5130.6
File Copy 4096 bufsize 8000 maxblocks 5800.0 12786853.0 22046.3
Pipe Throughput 12440.0 149193826.9 119930.7
Pipe-based Context Switching 4000.0 9468239.3 23670.6
Process Creation 126.0 57910.7 4596.1
Shell Scripts (1 concurrent) 42.4 83512.9 19696.4
Shell Scripts (8 concurrent) 6.0 11361.1 18935.2
System Call Overhead 15000.0 213181568.9 142121.0
========
System Benchmarks Index Score 23831.2
real 56m26.320s
user 681m43.326s
sys 1897m32.230s
Intel