磁盘iops 测试 fio 及报错解释
I/O输入/输出(Input/Output),读和写,提高缓存(cache)和做磁盘阵列(RAID)能提高存储IO性能。
IOPS (英文:Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库、存储等场合,衡量随机访问的性能。
存储端的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要三次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过"发送写入请求、写入数据、收到写入确认"等三个步骤,也就是3个存储端访问。
Linux下常用Fio、dd工具, Windows下常用IOMeter。
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。
注意:不要对有数据的磁盘或者分区做测试,会破坏已存在的数据
FIO 官网地址:http://freshmeat.net/projects/fio/
一,FIO安装
下载源码包: wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz
安装依赖软件:yum install libaio-devel 我们一般使用libaio,发起异步IO请求。
解压: tar -zxvf fio-2.0.7.tar.gz
安装: cd fio-2.0.7
编译: make
安装: make install
二、FIO用法: 也可以多个任务时可以写在job file里面
下面用命令直接输出的方法:
随机读的测试命令:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=50G -numjobs=10 -runtime=1000 -group_reporting -name=mytest
说明:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。 只能是分区,不能是目录,会破坏数据。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
iodepth 1 队列深度,只有使用libaio时才有意义,这是一个可以影响IOPS的参数,通常情况下为1。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
ioengine=psync io引擎使用pync方式
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=50G 本次的测试文件大小为50g,以每次4k的io进行测试,此大小不能超过filename的大小,否则会报错。
numjobs=10 本次的测试线程为10.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
read 顺序读
write 顺序写
rw,readwrite 顺序混合读写
randwrite 随机写
randread 随机读
randrw 随机混合读写
顺序读:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
随机写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
顺序写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合随机读写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=mytest -io