SPEC CPU 2006
基本的文件目录结构如下:
安装步骤如下:
# apt-get install libgfortran3 numactl /*安装必要组件*/
# cd $YOUR_FOLDER
# tar xzf cpu2006.tgz
# cd cpu2006
# ./bin/relocate
# source $YOUR_FOLDER/cpu2006/shrc
配置我们的config文件,里面包含操作平台/硬件/软件信息,配合不同测试参数实现不同性能维度的测试。我们在此用的配置文件是clover-linux64-amd64-gcc47.cfg,修改其中的硬件参数然后执行runspe。关于配置的具体参数和描述可以参考https://www.spec.org/cpu2006/Docs/config.html
# ./bin/runspec --config clover-linux64-amd64-gcc47.cfg--tune=base int /*--config指定运行的配置文件,tune=base代表基本的性能衡量,还有peak可选,提供更多的配置编译选择
更多执行参数参考:https://www.spec.org/cpu2006/Docs/runspec.html
常见问题:https://www.spec.org/cpu2006/Docs/faq.html
LMbench
LMbench包括一套针对不同操作系统的基准测试工具,包括上下文切换,本地通信,内存带宽和文件操作等。
安装步骤如下:
# wget https://superb-sea2.dl.sourceforge.net/project/lmbench/development/lmbench-3.0-a9/lmbench-3.0-a9.tgz
# tar -xzvf lmbench-3.0-a9.tgz
# cd lmbench-3.0-a9/
# make results /*第一次执行,弹出的配置选项可暂时用default值*/
# make rerun /*在执行完第一次的初始化执行后,基本make result生成的配置文件再次测试*/
# make see /*查看结果,可以拷贝到excel上来进行进一步的分析和图表呈现*/
执行过程比较长,需要耐心等待。最后输出的信息有两个需要注意:
Using config in CONFIG.k-1 /*我们可以看到这次执行用的上次的配置文件*/
Mon Jul 23 06:27:25 UTC 2018
Latency measurements
Mon Jul 23 06:29:54 UTC 2018
Calculating file system latency
Mon Jul 23 06:29:57 UTC 2018
Local networking
Mon Jul 23 06:31:07 UTC 2018
Bandwidth measurements
Mon Jul 23 06:33:54 UTC 2018
Calculating context switch overhead
Mon Jul 23 06:34:02 UTC 2018
Calculating effective TLB size
Mon Jul 23 06:34:02 UTC 2018
Calculating memory load parallelism
Mon Jul 23 06:34:03 UTC 2018
McCalpin's STREAM benchmark
Mon Jul 23 06:34:04 UTC 2018
Calculating memory load latency
Mon Jul 23 06:56:01 UTC 2018
Mailing results
../scripts/results: 37: ../scripts/results: mail: not found /*这个错误无需理会,看看具体的shell就只知道原因了*/
当前的执行目录下查看测试结果,可以看到系统软硬件环境参数,输出的具体内存读写,文件系统读写等详细信息
# vim results/x86_64-linux-gnu/k-1.2
基本的测试完毕之后,利用make see来查看工具自动生成的表格状信息
# make see
cd results && make summary >summary.out 2>summary.errs
cd results && make percent >percent.out 2>percent.errs
# vim ./results/summary.out
IOzone
文件系统的基准测试工具,用来模拟各种磁盘访问操作,用户可以自己定义文件块大小,IO大小和访问模式。比如针对数据中心场景的IO密集型操作,该工具可以用来模拟针对大文件的大数据块的随机访问。
安装步骤如下:
# wget http://www.iozone.org/src/current/iozone3_482.tar
# tar -xvf iozone3_482.tar
# less iozone3_482/src/current/makefile
# make linux-AMD64
Building iozone for Linux-AMD64
cc -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DNAME='"linux-AMD64"' \
-D__AMD64__ -DSHARED_MEM -Dlinux -D_LARGEFILE64_SOURCE \
-DHAVE_PREAD iozone.c -o iozone_linux-AMD64.o
cc -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
-DSHARED_MEM -Dlinux libbif.c -o libbif.o
cc -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
-D_LARGEFILE64_SOURCE libasync.c -o libasync.o
Building fileop for Linux-AMD64
cc -Wall -c -O3 fileop.c -o fileop_linux-AMD64.o
Building the pit_server
cc -c pit_server.c -o pit_server.o
cc -O3 iozone_linux-AMD64.o libbif.o libasync.o \
-lrt -lpthread -o iozone
cc -O3 -Dlinux fileop_linux-AMD64.o -o fileop
cc -O3 -Dlinux pit_server.o -o pit_server
root@k8s-cluster-1:/home/ubuntu/iozone/iozone3_482/src/current# ls *.o
fileop_linux-AMD64.o iozone_linux-AMD64.o libasync.o libbif.o pit_server.o
# ./iozone -h
在执行前,我们先准备一块测试用volume,基本步骤如下
# fdisk -l
Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x49ec635a
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 209715166 209713119 100G 83 Linux
Disk /dev/vdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
利用lvm和mkfs进行磁盘的划分和初始化
# fdisk /dev/vdb
...
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): e
...
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk /dev/vdb
Command (m for help): p
Disk /dev/vdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7ae1a7eb
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 20971519 20969472 10G 5 Extended
/dev/vdb5 4096 20971519 20967424 10G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
# pvcreate /dev/vdb5
Physical volume "/dev/vdb5" successfully created
# vgcreate vg-demo /dev/vdb5
Volume group "vg-demo" successfully created
# lvcreate -L 5GB -n lv-demo vg-demo
Logical volume "lv-demo" created.
# lvdisplay
--- Logical volume ---
LV Path /dev/vg-demo/lv-demo
LV Name lv-demo
VG Name vg-demo
LV UUID oL5t1V-mBiD-eeo1-Yd3z-nKf2-BeMW-npEy0t
LV Write Access read/write
LV Creation host, time k8s-cluster-1, 2018-07-23 07:41:19 +0000
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
# mkfs -t ext4 /dev/vg-demo/lv-demo
# mount /dev/vg-demo/lv-demo /var/demo
# mount | grep demo
/dev/mapper/vg--demo-lv--demo on /var/demo type ext4 (rw,relatime,data=ordered)
执行测试,其中-b知道excel文件名,-R用于输出excel,-i指定访问模式,2是随机读写,-f指定使用的文件,-r指定IO块大小,这里是32kb,-s知道使用文件大小,这里是4.9g。其中需要注意的一点是benchmark使用的文件如果小于内存大小将可能被缓存,从而测试的是内存的吞吐量而不是磁盘系统的吞吐量,为了避免这种情况,我们可以1)让文件大小为两倍内存大小;2)mount的时候使用sync选项,这里我们用的前者
# ./iozone -b results.xls -R -i 0 -i 2 -f /var/demo/iozone.file -r 32 -s 4.9g
等待测试完毕
# ls -alh /var/demo/iozone.file
-rw-r----- 1 root root 2.7G Jul 23 07:58 /var/demo/iozone.file
# ls -alh /var/demo/iozone.file
-rw-r----- 1 root root 2.8G Jul 23 07:58 /var/demo/iozone.file
打开执行目录下的result.xls文件
netperf
安装直接apt-get install netperf
netperf用于测试tcp/ip的网络性能,支持unix docket和sctp。它基于client-server模式,被测系统或设备作为server端运行netserver,client通过额外的一条控制连接来进行配置,发包和获取结果,同实际的测试流量隔离开以确保测试结果的准确性。netperf发出的流量主要分为两类:1)bulk data;2)request/response。这里有个缺陷是netperf目前只能基于一个socket进行测试而无法支持多并发的session。当前用的版本是2.6.0,可以通过简单的shell脚本将任务循环放入后台来实现。
这里需要两个设备,一个client,一个server。
server端:
root@k-2:~# netserver -p 9999
Starting netserver with host 'IN(6)ADDR_ANY' port '9999' and family AF_UNSPEC
root@k-2:~# netstat -pan | grep 9999
tcp6 0 0 :::9999 :::* LISTEN 6163/netserver
client端(可以-c/-C来实现本地/远程CPU利用率的查看),这里我们-t指定的是TCP_CRR,实现连接/请求/回应/终结等操作,每次交互都会重新建立链接,http的keepalive功能是关闭的,主要用于http1.0/1.1模拟。其他几种主要的模式如下:
TCP_STREAM 基本的tcp大字节benchmark,属于bulk data
UDP_STREAM 基本的udp测试
TCP_RR tcp交互响应速率测试,主要用于http长连接(链接不拆除)和针对数据库的访问
UDP_RR 同上,用的udp报文
# netperf -t TCP_CRR -H k-2 -l 10 -- -r 128.1024
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to k-2 () port 0 AF_INET : demo
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
16384 87380 128 128 10.00 5172.56
16384 87380