简化的Linux性能测试UnixBench脚本

UnixBench是一款广泛应用于类Unix系统的性能测试工具,作为一个开源项目,它被用来评估Linux主机的性能。UnixBench主要通过系统调用、读写、进程、图形化测试、二维与三维性能、管道、运算能力及C库等多个方面提供系统基准性能的测试数据。
当前最新版本为UnixBench 5.1.3,新增了系统和图形测试模块。如果需要进行图形测试,需对Makefile进行修改,确保将“GRAPHIC_TESTS=defined”这一项取消注释,并且系统需安装x11perf命令及gl_glibs库。以下脚本则是基于UnixBench 5.1.3版本进行的测试,已将图形测试项注释掉(因为大多数VPS并不配备显卡或仅使用集成显卡,因此图形性能测试通常不必要)。测试时间约为10至30分钟,具体取决于CPU核数,得分越高则性能越佳。
测试步骤:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh chmod +x unixbench.sh ./unixbench.sh
测试项目简介:
Dhrystone 2使用寄存器变量测试
该测试用于评估字符串处理性能,不涉及浮点运算,受到软件、硬件设计、编译、链接、代码优化、内存缓存及整数数据类型等因素的影响。
Double-Precision Whetstone
此项测试浮点数运算的速度与效率,包含多种模块,涉及科学计算的操作,涵盖sin、cos、sqrt、exp、log等一系列数学函数,测试整数和浮点数的算术运算、数组访问、条件分支及函数调用。
Execl Throughput
该测试测量每秒可以执行的execl系统调用次数,execl是exec函数族的一部分,类似于execve()函数。
File Copy
测试文件间数据传输的速率,使用不同大小的缓冲区进行多次测试,统计在规定时间内(默认10秒)的文件读、写、复制操作次数。
Pipe Throughput
管道是进程间通信的基本方式,该测试计算一秒钟内一个进程能够向管道写入512字节数据并读取的次数。需注意,pipe throughput在实际编程中并没有真实存在的对应。
Pipe-based Context Switching
该测试记录两个进程通过管道交换不断增长的整数的频率,模拟实际编程应用,其中测试程序首先创建子进程,并与之进行双向管道传输。
Process Creation
测试每秒钟创建子进程并收回的次数(子进程需立即退出),着重关注新进程控制块的创建和内存分配,主要用于比较操作系统中不同实现的进程创建系统调用。
System Call Overhead
测试进入及离开操作系统内核的成本,旨在评估单次系统调用的代价,通过反复调用getpid函数的小程序实现。
Shell Scripts
测试每秒内一个进程并发启动n个shell脚本拷贝的次数,n通常取值为1、2、4或8(我在测试中取值为1和8),该脚本对数据文件执行一系列变形操作。
以下是我在一台512MB、2核的OpenVZ VPS上进行测试的结果:
BYTE UNIX Benchmarks (Version 5.1.3) System: vpn: GNU/Linux OS: GNU/Linux -- 2.6.32-042stab076.8 -- #1 SMP Tue May 14 20:38:14 MSK 2013 Machine: i686 (i386) Language: en_US.utf8 CPU 0: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.6 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization CPU 1: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.6 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization 09:41:17 up 31 days, 9:21, 1 user, load average: 0.23, 0.05, 0.02; runlevel 3 ------------------------------------------------------------------------ Benchmark Run: Mon Jul 29 2013 09:41:17 - 10:09:29 2 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 17172222.3 lps (10.0 s, 7 samples) Double-Precision Whetstone 2600.2 MWIPS (10.0 s, 7 samples) Execl Throughput 4152.8 lps (30.0 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 622759.5 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 172634.3 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1218236.9 KBps (30.0 s, 2 samples) Pipe Throughput 1416230.5 lps (10.0 s, 7 samples) Pipe-based Context Switching 206509.4 lps (10.0 s, 7 samples) Process Creation 8568.6 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 3145.9 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 528.3 lpm (60.0 s, 2 samples) System Call Overhead 1528474.7 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 17172222.3 1471.5 Double-Precision Whetstone 55.0 2600.2 472.8 Execl Throughput 43.0 4152.8 965.8 File Copy 1024 bufsize 2000 maxblocks 3960.0 622759.5 1572.6 File Copy 256 bufsize 500 maxblocks 1655.0 172634.3 1043.1 File Copy 4096 bufsize 8000 maxblocks 5800.0 1218236.9 2100.4 Pipe Throughput 12440.0 1416230.5 1138.4 Pipe-based Context Switching 4000.0 206509.4 516.3 Process Creation 126.0 8568.6 680.0 Shell Scripts (1 concurrent) 42.4 3145.9 742.0 Shell Scripts (8 concurrent) 6.0 528.3 880.5 System Call Overhead 15000.0 1528474.7 1019.0 ======== System Benchmarks Index Score 960.4 ------------------------------------------------------------------------ Benchmark Run: Mon Jul 29 2013 10:09:29 - 10:39:56 2 CPUs in system; running 2 parallel copies of tests Dhrystone 2 using register variables 16851634.7 lps (10.0 s, 7 samples) Double-Precision Whetstone 5182.9 MWIPS (10.0 s, 7 samples) Execl Throughput 4101.9 lps (30.0 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 635244.9 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 174430.2 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1219982.0 KBps (30.0 s, 2 samples) Pipe Throughput 1387297.9 lps (10.0 s, 7 samples) Pipe-based Context Switching 196296.1 lps (10.0 s, 7 samples) Process Creation 10889.9 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 4073.7 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 550.5 lpm (60.2 s, 2 samples) System Call Overhead 1538517.4 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 16851634.7 1444.0 Double-Precision Whetstone 55.0 5182.9 942.3 Execl Throughput 43.0 4101.9 953.9 File Copy 1024 bufsize 2000 maxblocks 3960.0 635244.9 1604.2 File Copy 256 bufsize 500 maxblocks 1655.0 174430.2 1054.0 File Copy 4096 bufsize 8000 maxblocks 5800.0 1219982.0 2103.4 Pipe Throughput 12440.0 1387297.9 1115.2 Pipe-based Context Switching 4000.0 196296.1 490.7 Process Creation 126.0 10889.9 864.3 Shell Scripts (1 concurrent) 42.4 4073.7 960.8 Shell Scripts (8 concurrent) 6.0 550.5 917.5 System Call Overhead 15000.0 1538517.4 1025.7 ======== System Benchmarks Index Score 1058.3
