导航:本篇从网络、磁盘IO方面测试Linux系统的性能
第一章:网速测试(speedtest-cli、iperf3)
第二章:磁盘IO性能测试(fio)
注:本文以Centos7.4作为测试系统
一、网速测试
1、带宽压测(speedtest-cli)
- 方法一:
speedtest-cli是基于python开发的网络测速工具,有python环境的系统都可使用下列步骤的命令
步骤一:安装speedtest-cli
# pip3 install speedtest-cli
注:pip安装speedtest-cli需要python支持,请确保系统有安装python( pip已内置于Python3.4和2.7及以上版本,其他版本需另行安装),并且根据python版本选择使用pip或者pip3
步骤二:测速
# speedtest-cli
- 方法二
# wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
# chmod +x speedtest-cli
# ./speedtest-cli
2、带宽打流测速(iperf3)
iperf3是⼀款⽹络性能测试⼯具,可以用来测试一些网络设备如路由器,防火墙,交换机等的性能。
这里用两台Centos7.4主机进行测试
server端:10.13.23.197
client端:10.13.120.173
步骤一:安装iperf3
# yum install -y iperf3
步骤二:server端启动iper3
# iperf3 -s -p 1234 -B 10.13.23.197
参数:
-s:以server模式启动
-p:设置server端通信端口
-B:绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
其他可用参数:
-u:使用UDP协议。默认使用TCP
步骤三:client端执行命令测速
# iperf3 -c 10.13.23.197 -p 1234 -i1 -t10 -P8
参数:
-c:指定server端地址
-p:指定server端端口
-i:设置报告之间的时间间隔,单位为秒,默认为0
-t:指定测试总时长。单位为秒,默认为10
-P:指定并行连接数
其他可用参数:
-d:同时进行双向传输测试
-n:指定传输的字节数
二、磁盘IO性能测试
fio 是一款Linux平台上的磁盘性能测试工具。支持13种不同的I/O引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio等等, I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等。
1、fio yum安装
# yum install fio -y
2、4k顺序读/写
# 4k顺序读
# fio -filename=/data/test -direct=1 -iodepth=1 -thread -rw=read -ioengine=libaio -bs=4K -numjobs=2 -runtime=10000 -group_reporting -name=test -size=5G
# 4k顺序写
# fio -filename=/data/test -direct=1 -iodepth=1 -thread -rw=write -ioengine=libaio -bs=4K -numjobs=2 -runtime=10000 -group_reporting -name=test -size=5G
3、4k随机读/写
# 4k随机读
# fio -filename=/data/test -direct=1 -iodepth=1 -thread -rw=randread -ioengine=libaio -bs=4K -numjobs=2 -runtime=10000 -group_reporting -name=test -size=5G
# 4k随机写
# fio -filename=/data/test -direct=1 -iodepth=1 -thread -rw=randwrite -ioengine=libaio -bs=4K -numjobs=2 -runtime=10000 -group_reporting -name=test -size=5G
4、4k混合随机读写
# fio -filename=/data/test -direct=1 -iodepth=1 -thread -rw=randrw -ioengine=libaio -bs=4K -numjobs=2 -runtime=10000 -group_reporting -name=test -size=5G
5、参数汇总
参数
|
解析
|
-filename=/data/test
|
定义测试文件(设备)的名称。 选择文件,则表示文件系统性能如:-filename=/data/test;选择设备名称则表示裸盘性能,如-filename=/dev/sdb
|
-direct=1
|
是否使用缓存。0: buffered IO,1: direct IO。选1直接写入磁盘,结果更为真实
|
-rw=randread
|
定义读写策略,值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw
|
-bs=4k
|
定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4KB
|
-bsrange=512-2048
|
定义IO块大小范围
|
-size=5g
|
定义测试IO的数据大小
|
-numjobs=2
|
定义测试的并发线程数
|
-iodepth=1
|
定义测试时的IO队列深度,默认为1。 fio总的IO并发数 =iodepth * numjobs
|
-runtime=1000
|
定义测试时间。 如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完
|
-ioengine=psync
|
io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
|
-rwmixwrite=30
|
在混合读写的模式下,写占30%
|
-group_reporting
|
汇总每个进程的统计信息
|
-lockmem=1g
|
只使用1g内存进行测试
|
–zero_buffers
|
用0初始化系统buffer
|
–nrfiles=8
|
每个进程生成文件的数量
|
-name=test
|
定义测试任务名称
|
–output TestResult.log
|
日志输出到TestResult.log
|
6、结果分析
注:msec=毫秒; usec=微秒;1s=1000msec=1000000ues
read/write io:执行了多少M的IO bw:平均IO带宽 iops:IOPS runt:线程运行时间
slat:提交延迟
clat:完成延迟
lat:响应时间
bw:带宽
cpu:利用率
IO depths:io队列
submit:单个IO提交要提交的IO数
complete:Like the above submit number, but for completions instead.
issued:The number of read/write requests issued, and how many of them were short.
latency:IO完延迟的分布
Run status group 0 (all jobs):
io:总共执行多少M的IO aggrb:group总带宽 minb:最小.平均带宽 maxb:最大平均带宽 mint:group中线程的最短运行时间 maxt:group中线程的最长运行时间
Disk stats (read/write):
ios:所有group总共执行的IO数 merge:总共发生的IO合并数 ticks:Number of ticks we kept the disk busy io_queue:花费在队列上的总共时间 util:磁盘利用率