我们常用dd命令测试Linux磁盘IO情况,dd只是测试顺序读写性能。对于随机读写性能测试,可采用FIO工具。
一、安装
下载并安装
1 2 3 4 5 6 7 8 | wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz
yum install libaio-devel gcc -y tar -zxvf fio-2.2.5.tar.gz cd fio-2.2.5 make make install |
二、FIO参数
随机读:
# fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=60 -group_reporting -name=mytest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 说明: filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。 direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。 rw=randwrite 测试随机写的I/O rw=randrw 测试随机写和读的I/O bs=16k 单次io的块文件大小为16k bsrange=512-2048 同上,提定数据块的大小范围 size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。 numjobs=30 本次的测试线程为30. runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。 ioengine=psync io引擎使用pync方式 rwmixwrite=30 在混合读写的模式下,写占30% group_reporting 关于显示结果的,汇总每个进程的信息。
此外 lockmem=1g 只使用1g内存进行测试。 zero_buffers 用0初始化系统buffer。 |
三、常用测试命令
随机读
# fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=600 -group_reporting -name=mytest
随机写
# fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=600 -group_reporting -name=mytest
顺序写
# fio -filename=/data/test_randread -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=600 -group_reporting -name=mytest
顺序读
# fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=60 -group_reporting -name=mytest
混合随机读写
# fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=600 -group_reporting -name=mytest -ioscheduler=noop
四、读懂结果
这里以直接写操作为例。 我们用10个线程,向磁盘写一个30G文件,块大小为16K,时长10分钟。
主要关注这部分,写速度为347058KB/s,iops为21691。更多测试结果,可以在底部的红色部分看到,包含平均写速度、最小最大速度等等。
write: io=20336MB, bw=347058KB/s, iops=21691 , runt= 60001msec
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=30G -numjobs=10 -runtime=60 -group_reporting -name=mytest mytest: (g=0): rw=write, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1 ... mytest: (g=0): rw=write, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1 fio 2.0.7 Starting 10 threads Jobs: 10 (f=10): [WWWWWWWWWW] [100.0% done] [0K/364.3M /s] [0 /22.3K iops] [eta 00m:00s] mytest: (groupid=0, jobs=10): err= 0: pid=74873 write: <span style="color: #ff0000;"><strong>io=20336MB, bw=347058KB/s, iops=21</strong>691 ,</span> runt= 60001msec clat (usec): min=28 , max=203809 , avg=459.64, stdev=3726.22 lat (usec): min=29 , max=203810 , avg=460.27, stdev=3726.26 clat percentiles (usec): | 1.00th=[ 30], 5.00th=[ 31], 10.00th=[ 34], 20.00th=[ 35], | 30.00th=[ 36], 40.00th=[ 37], 50.00th=[ 38], 60.00th=[ 40], | 70.00th=[ 43], 80.00th=[ 46], 90.00th=[ 620], 95.00th=[ 1144], | 99.00th=[ 8512], 99.50th=[22912], 99.90th=[58624], 99.95th=[75264], | 99.99th=[110080] bw (KB/s) : min= 265, max=396352, per=10.16%, avg=35260.37, stdev=80519.69 lat (usec) : 50=82.89%, 100=6.31%, 250=0.31%, 500=0.02%, 750=1.73% lat (usec) : 1000=2.50% lat (msec) : 2=4.37%, 4=0.57%, 10=0.37%, 20=0.36%, 50=0.42% lat (msec) : 100=0.14%, 250=0.01% cpu : usr=5.67%, sys=24.37%, ctx=26086439, majf=0, minf=12681 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=0/w=1301489/d=0, short=r=0/w=0/d=0
Run status group 0 (all jobs): <strong> <span style="color: #ff0000;">WRITE: io=20336MB, aggrb=347057KB/s, minb=347057KB/s, maxb=347057KB/s, mint=60001msec, maxt=60001msec </span></strong> Disk stats (read/write): sda: ios=0/1300195, merge=0/12, ticks=0/46837, in_queue=46516, util=77.53% |
五、SSD与机械硬盘性能比对
公司的客服MySQL出现了IO性能瓶颈,想用SSD来解决,也就有了这次测试。
测试结果符合之前看的资料,SSD在随机读写性能方面完爆机械硬盘。而机械硬盘的顺序写性能远优于SSD;不过,SSD和机械硬盘的顺序度性能几乎持平。
硬盘 | 顺序读 | 顺序写 | 随机读 | 随机写 | 混合随机读写 | |
SSD(4*1T RAID10) | 850M | 120M | 617M | 103M | 读:159M | 写:68M |
机械盘(8*300G RAID10) | 977M | 347M | 25M | 24M | 读:17M | 写:7M |
机械盘(8*300G RAID5) | 985M | 312M | 31M | 19M | 读:17M | 写:7M |
* 测试工具:fio-2.0.7 filesize:30G thread:10 |