UnixBench是一款开源跨平台的测试Unix系统基本性能的工具,本文介绍了它的编译和使用

Linux下安装与使用

1.获取UnixBench
2.Linux安装依赖

1
apt-get install perl gcc make unzip

3.上传后解压,记着千万别在windows下解压后再上传

1
unzip byte-unixbench-master.zip

4.cd 到 UnixBench目录

1
./Run

Mac下使用

1.下载并安装Xcode,11.3.1是Mojave最后能用的版本
解压,把时间调到2020年1月后,如果提示归档不是来自Apple,使用xattr命令移除校验

1
xattr -d com.apple.quarantine Xcode_11.3.1.xip

如果双击后生成了.xip.gz文件,说明压缩文件已损坏,请校验md5码
2.下载Command Line Tools for Xcode并安装
3.安装gcc
笔者尝试用xcode自带的clang编译unixbench,发现编译失败,所以安装Homebrew

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

由于直接使用brew install gcc会下载最新的gcc并编译,然而我的版本是mojave,运行命令后大概2小时后直接报错,缺少XXX.h。由于我对macOS缺少xxx文件并不熟悉,百度也完全没有,毕竟mac搞开发资料真的好少,所以先找一下有啥直接能用不用编译的包

1
brew search gcc

我的可用的版本是gcc567,我用了gcc6

1
brew install gcc-6

测试一下

1
gcc-6 -v

然后修改Run文件里的,改成gcc-6

1
my $cCompiler = 'gcc';

还有Makefile里的,也改成gcc-6

1
CC=gcc

就可以愉快的跑分了,除了Dhrystone和Whetstone的跑分,其他都比原生Linux低不少,情况和Windows下的虚拟机差不多,不知道为什么。虽然黑苹果给我的体验比装win要好一丢丢。


OpenWRT下使用

1.交叉编译

1
make CC=mipsel-openwrt-linux-musl-gcc LD=mipsel-openwrt-linux-musl-ld

2.安装依赖

1
opkg install perlbase-posix perl perlbase-time perlbase-io perlbase-findbin coreutils-od

3.修改Run

注释掉 use strict 和两处尝试执行 make all 的语句

测试项目说明

1.Dhrystone测试
测试聚焦在字符串处理,没有浮点运算操作。这个测试用于测试链接器编译、代码优化、内存缓存、等待状态、整数数据类型等,硬件和软件设计都会非常大的影响测试结果。

2.Whetstone 测试
这项测试项目用于测试浮点运算效率和速度。这项测试项目包含若干个科学计算的典型性能模块,包含大量的C语言函数,sin cos sqrt exp和日志以及使用整数和浮点的数学操作。包含数组访问、条件分支和过程调用。

3.Execl Throughput(execl 吞吐,这里的execl是类unix系统非常重要的函数,非办公软件的execl)测试
这项测试测试每秒execl函数调用次数。execl是 exec函数家族的一部分,使用新的图形处理代替当前的图形处理。有许多命令和前端的execve()函数命令非常相似。

4.File Copy测试
这项测试衡量文件数据从一个文件被传输到另外一个,使用大量的缓存。包括文件的读、写、复制测试,测试指标是一定时间内(默认是10秒)被重写、读、复制的字符数量。

5.Pipe Throughput(管道吞吐)测试
pipe是简单的进程之间的通讯。管道吞吐测试是测试在一秒钟一个进程写512比特到一个管道中并且读回来的次数。管道吞吐测试和实际编程有差距。

6.Pipe-based Context Switching (基于管道的上下文交互)测试
这项测试衡量两个进程通过管道交换和整数倍的增加吞吐的次数。基于管道的上下文切换和真实程序很类似。测试程序产生一个双向管道通讯的子线程。

7.Process Creation(进程创建)测试
这项测试衡量一个进程能产生子线程并且立即退出的次数。新进程真的创建进程阻塞和内存占用,所以测试程序直接使用内存带宽。这项测试用于典型的比较大量的操作系统进程创建操作。

8.Shell Scripts测试
shell脚本测试用于衡量在一分钟内,一个进程可以启动并停止shell脚本的次数,通常会测试1,2, 3, 4, 8 个shell脚本的共同拷贝,shell脚本是一套转化数据文件的脚本。

9.System Call Overhead (系统调用消耗)测试
这项测试衡量进入和离开系统内核的消耗,例如,系统调用的消耗。程序简单重复的执行getpid调用(返回调用的进程id)。消耗的指标是调用进入和离开内核的执行时间。

其他说明

1.关于测试时间
根据说明文档

system测试一般耗费29分钟,graphics测试耗费18分钟
实际上笔者在跑的时候单核测试和多核测试都会花费29分钟,也就是共58分钟。

2.Windows使用
笔者在Windows上尝试用mingw编译过UnixBench,但是并没有成功,卡在判断OS类型上了,毕竟Windows并不是Unix,而且就算编译成功了也会因为Windows没有Unix的一些指令导致无法运行。

参考

在OpenWrt路由器上用UnixBench基准测试 CPU跑分
UnixBench仓库