主流benchmark工具使用汇总

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

查看summary.errs查看生成日志

IOzone

文件系统的基准测试工具,用来模拟各种磁盘访问操作,用户可以自己定义文件块大小,IO大小和访问模式。比如针对数据中心场景的IO密集型操作,该工具可以用来模拟针对大文件的大数据块的随机访问。

安装步骤如下:

# wget http://www.iozone.org/src/current/iozone3_482.tar

# tar -xvf iozone3_482.tar

# less iozone3_482/src/current/makefile

makefile中针对amd64的编译选项

# 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,基本步骤如下


OpenStack cinder分配出一块10G的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

你可能感兴趣的:(主流benchmark工具使用汇总)