磁盘IO是云主机的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。

fio 是测试磁盘性能的***工具:

1、测试顺序读性能

fio --filename=/home/test -iodepth=64 -ioengine=libaio --direct=1 --rw=read --bs=1m --size=2g --numjobs=4 --runtime=10 --group_reporting --name=test-read 

2、测试顺序写性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=write -bs=1m -size=2g -numjobs=4 -runtime=20 -group_reporting -name=test-write 

3、测试随机读性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-read 

4、测试随机写性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-write 

参数说明:

  • filename=/home/test 测试文件名称,通常选择需要测试的盘的data目录。
  • direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
  • rw=randwrite 测试随机写的I/O
  • rw=randrw 测试随机写和读的I/O
  • bs=4k 单次io的块文件大小为4k
  • size=2g 本次的测试文件大小为2g,以每次4k的io进行测试。
  • numjobs=64 本次的测试线程为64.
  • runtime=20 测试时间为20秒,如果不写则一直将2g文件分4k每次写完为止。

报告如何查看:

fio的结果报告内容丰富,我们主要关心的是两项:

  • 磁盘的吞吐量bw,这个是顺序读写考察的重点
  • 磁盘的每秒读写次数iops,这个是随机读写考察的重点

比如,下面是4个测试的结果部分截取:

test-read: (groupid=0, jobs=4): err= 0: pid=4752
read : io=839680KB, bw=76823KB/s, iops=75 , runt= 10930msec
  •  

顺序读,带宽76823KB/s,iops 75

test-write: (groupid=0, jobs=4): err= 0: pid=4758
write: io=899072KB, bw=42854KB/s, iops=41 , runt= 20980msec
  •  

顺序写,带宽42854KB/s, iops=41

test-rand-read: (groupid=0, jobs=64): err= 0: pid=4619
read : io=72556KB, bw=3457.4KB/s, iops=864 , runt= 20986msec
  •  

随机读,带宽3457.4KB/s, iops=864

test-rand-write: (groupid=0, jobs=64): err= 0: pid=4685
write: io=129264KB, bw=6432.4KB/s, iops=1608 , runt= 20097msec
  •  

随机写,带宽6432.4KB/s, iops=1608。