1. Netperf性能测试工具 1、 安装Netperf,用网线连接服务端和客户端,设置IP: 服务端的IP:192.168.0.20 客户端的IP:192.168.0.10 2、 解压压缩包:unzip netperf-2.7.0.zip 3、 cd netperf-netperf-2.7.0/ 4、 指定架构配置:./configure (或./configure --build=arm|mips|x86) 5、 make 6、 make install 7、 临时关闭服务端和客户端的防火墙:systemctl stop firewalld 8、 启动服务端Netperf 服务端执行netserver 默认情况下 netserver 开启端口号为 12865,如提示端口被占用,可以通过以下命令指定服务端口(如果服务端指定端口,则客户端也需要指定服务器端口)如: 服务端:netserver -D -p 4659 客服端: TCP吞吐率 netperf -t TCP_STREAM -H 192.168.0.20 -l 60 -p 4659 TCP单链路 netperf -t TCP_RR -H 192.168.0.20 -l 60 -p 4659 UDP单链路 netperf -t UDP_RR -H 192.168.0.20 -l 60 -p 4659 UDP吞吐率 netperf -t UDP_STREAM -H 192.168.0.20 -l 60 -p 4659 9、 如默认端口未被占用,则客户端执行: -H为服务端的IP地址;-l为运行时间. (1) TCP吞吐率 netperf -t TCP_STREAM -H 192.168.0.20 -l 60 (2) TCP单链路 netperf -t TCP_RR -H 192.168.0.20 -l 60 (3) UDP单链路 netperf -t UDP_RR -H 192.168.0.20 -l 60 (4) UDP吞吐率 netperf -t UDP_STREAM -H 192.168.0.20 -l 60 1.1. 命令解析: 命令参数 命令参数包括如下: -H host:制定远端运行netserver 的服务器IP地址; -I testlen:执行测试的时间长度(秒); -t testname:制定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR; -s size:设置本地系统的socket发送与接收缓冲大小; -S size:设置远端系统的socket发送与接收缓冲大小; -m size:设置本地系统发送测试分组的大小; -M size:设置远端系统接收测试分组的大小; -D 对本地与远端系统的socket设置TCP_NODELAY选项; TCP_STREAM测试Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM,用来测试进行TCP批量传输时的网络性能。 测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量。 UDP_STREAM测试UDP_STREAM用来测试进行UDP批量传输时的网络性能。 测试UDP的网络性能时,测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示。 TCP_RRTCP_RR 方式的测试对象是多次 TCP request 和 response 的交易过程,但是它们发生在同一个 TCP 连接中,这种模式常常出现在数据库应用中。数据库的 client 程序与 server 程序建立一个 TCP 连接以后,就在这个连接中传送数据库的多次交易过程。 2. Unixbench性能测试工具 2.1. Unixbench 简介 UnixBench是一款开源的测试unix系统基本性能的工具,是比较通用的测试VPS性能的工具。 UnixBench会执行一系列的测试,包括2D和3D图形系统的性能衡量,测试的结果不仅仅只是CPU,内存,或者磁盘为基准,还取决于硬件,操作系统版本,编译 器。 测试系统各个方面一系列的性能,然后将每个测试结果和一个基准值进行比 较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分数值. 注:Unixbench是一个系统基准测试工具,不是CPU、RAM或者磁盘基准测试工具。结果不仅依靠硬件,还要依靠操作系统、库甚至编译器。 2.2. Unixbench安装 下载地址:https://github.com/kdlucas/byte-unixbench 将测试工具Unixbench拷贝到测试机器并进行解压 在Unixbench目录下执行以下命令 #make 2.3. Unixbench 系统性能测试 在Unixbench目录下执行以下命令 #./Run #./Run -c 64 //c指定测试的线程数为64 2.4. Unixbench 图形性能测试 2.5. Unixbench测试结果分析 在Unixbench目录下的results文件中,可查看html相关文件。 如图,系统性能得分741。 file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml9692/wps34.jpg 如图,2D性能得分5252.4,3D性能得分1533.9。 file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml9692/wps35.jpg 2.6. 测试用时参考 测试用时预计30分钟。 2.7. 报错信息 libnsl.so.1:无法打开共享对象文件:没有这个文件或目录 原因 升级后的麒麟系统缺少动态库 解决办法 1、到 /usr/lib64/下 执行find命令 找一下 libnsl.so 资源库 find / -name “libnsl.so*” 如果不是我们需要的 libnsl.so.1 而是有 libnsl.so.2 那么我们就可以做个软连 ln -s /usr/lib64/libnsl.so.2 /usr/lib64/libnsl.so.1 或者自己去网上下载 libnsl.so.1 动态库资源 放置到系统目录下 /usr/lib64/ 然后执行 chmod +x libnsl.so.1 即可 编译软件报错 undefined reference to `major' 在对应的文件前面加上 #include <sys/sysmacros.h> 3. stream性能测试工具 3.1. stream 简介 STREAM是一套综合性能测试程序集,通过fortran和C两种高级且高效的语言编写完成,由于这两种语言在数学计算方面的高效率, 使得 STREAM 测试例程可以充分发挥出内存的能力。 STREAM 测试得到的是可持续运行的内存带宽最大值,而并不是一般的硬件厂商提供的理论最大值 3.2. stream安装执行 1、 在服务器操作系统中,运行Stream性能测试工具 2、 执行单线程测试命令:gcc -O3 -DSTREAM_ARRAY_SIZE=20000000 stream.c -o stream 3、 ./stream 4、 执行满线程测试命令:gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=40000000 stream.c -o stream 5、 ./stream 参数解析: 1. –fopenmp 适应多处理器环境。开启后,程序默认线程为CPU线程数,也可以运行时也可以动态指定运行的进程数,12为自定义的要使用的处理器数。 export OMP_NUM_THREADS=12 2. -DSTREAM_ARRAY_SIZE(指定计算中数组的大小) 计算方法参考stream.c中的说明,举例:u540的 L2缓存 2MB,其值为 double类型占8 Byte,每个ARRAY的大小是 STREAM_ARRAY_SIZE * 8Byte。 每个ARRAY的大小要超过4倍的缓存大小,即: STREAM_ARRAY_SIZE * 8B > 4 * 2MB 可得STREAM_ARRAY_SIZE最小需要为1M,在这里作者并不区分1M是10的6次方,还是2的20次方,因为4倍大小已经远远大于缓存,能够保证访存到达内存而不是访问到缓存。这个值是最小值,可以适当大于此值,增大array size会增加测试时间,也会保证测试过程至少经历20个clock ticks。 2. –DNTIMES NTIMES是执行次数,默认值是10,所有测试,结束后从结果中取最优,第一轮测试的结果不参与最终统计。 4. -mexplicit-relocs 当STREAM_ARRAY_SIZE太大时,gcc编译会出错,需要使用此选项更改代码链接时的分布。 如果是x64平台,当STREAM_ARRAY_SIZE比较大时,(大于100MB可能)编译会出错,需要给gcc添加 选项 -mcmodel=large 3.3. 结果说明 Copy:是复制操作,即从内存单元中读取一个数,并复制到其他内存单元中,两次访问内存操作。 Scale:是乘法操作,即从内存单元中读取一个数,与常数相乘,得到的记过存到其他内存单元,两次访问内存操作。 Add:是加法操作,从两个内存单元中分别读取两个数,将其进行加法操作后,得到的结果写入另一个内存单元中,3次访问内存操作。 Triad:是前面三种的结合,先从内存中读取一个数,与一个常数相乘得到一个乘积,然后从另一个内存单元中读取一个数与刚才乘积结果相加,得到的结果写入内存。3次访问内存操作。 测试结果一般的规律是Add > Triad > Copy > Scale。一次Add操作需要访问三次内存(两个读操作,一个写操作),Triad操作也需要三次访问内存, Copy和Scale操作需要两次访问内存。单位操作内,访问内存次数越多,越能够掩盖访存延迟,带宽越大 4. FIO性能测试工具 4.1. FIO简介 FIO是一个开源的I/O压力测试工具,主要是用来测试磁盘的IO性能,也可测试cpu,nic的IO性能。它可以支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, network, syslet, guasi, solarisaio, I/Opriorities (针对新的Linux内核), rate I/O, forked or threaded jobs等。 FIO使用简单,支持的文件操作非常多,基本可以覆盖到常用的的文件使用方式 4.2. FIO安装执行 //解压安装包 tar zxvf fio-2.2.5.tar.gz //进入文件 cd fio-2.2.5 //执行 ./configure //执行 make //执行 make install //执行顺序读命令 fio -filename=/dev/sda -direct=1 -iodepth=1 -thread -rw=read -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=120 -group_reporting -name=labTest //执行顺序写命令 fio -filename=/dev/sda -direct=1 -iodepth=1 -thread -rw=write -ioengine=psync -bs=16k -size=20G -numjobs=30 -runtime=60 -group_reporting -name=labTest 参数解析: 可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述 filename=/dev/emcpowerb 支持文件系统或者裸设备-filename=/dev/sda2或-filename=/dev/sdb direct=1 测试过程绕过机器自带的buffer,使测试结果更真实 rw=randwread 测试随机读的I/O rw=randwrite 测试随机写的I/O rw=randrw 测试随机混合写和读的I/O rw=read 测试顺序读的I/O rw=write 测试顺序写的I/O rw=rw 测试顺序混合写和读的I/O bs=4k 单次io的块文件大小为4k bsrange=512-2048 同上,提定数据块的大小范围 size=5g 本次的测试文件大小为5g,以每次4k的io进行测试 numjobs=30 本次的测试线程为30 runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止 ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包 rwmixwrite=30 在混合读写的模式下,写占30% group_reporting 关于显示结果的,汇总每个进程的信息 lockmem=1g 只使用1g内存进行测试 zero_buffers 用0初始化系统buffer nrfiles=8 每个进程生成文件的数量 4.3. 结果说明 file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml9692/wps36.png io 执行了多少M的IO bw 平均IO带宽 iops IOPS 即I/O per second,即每秒进行读写(I/O)操作的次数,是衡量磁盘性能的主要指标之一。 runt 线程运行时间(单位毫秒) slat 提交延迟 clat 完成延迟 lat 响应时间 cpu 利用率 IO depths io队列 IO submit 单个IO提交要提交的IO数 IO complete 与上面的提交编号一样,但改为填写 IO issued 发出的读/写请求数,以及短请求数。 IO latencies IO延迟的分布 下面的io 总共执行了多少size的IO aggrb group总带宽 minb 最小平均带宽. maxb 最大平均带宽. mint group中线程的最短运行时间. maxt group中线程的最长运行时间. ios 所有group总共执行的IO数. merge 总共发生的IO合并数. ticks Number of ticks we kept the disk busy. in_queue 花费在队列上的总共时间. util 磁盘利用率 总结 我们一般主要看iops、bw、util的值,数值越高则性能越好 |