乐趣区

LINUXFIO磁盘随机读取性能分析

FIO 是测试 IOPS 的非常好的工具,用来对硬件进行压力测试和验证,支持 13 种不同的 I / O 引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

fio 官网地址:http://freshmeat.net/projects…


1.FIO 安装

wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz 

yum install libaio-devel
tar -zxvf fio-2.2.5.tar.gz
cd fio-2.2.5
make
make install

2.FIO 用法

a) 随机读

(可直接用,向磁盘写一个 2G 文件,10 线程,随机读 1 分钟,给出结果)

fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

参数说明

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。nrfiles=8                        每个进程生成文件的数量。rw=read/write/readwrite          顺序读 / 顺序写 / 顺序混合读写
rw=randread/randwrite/wandrw     随机读 / 随机写 / 随机混合读写

b) 顺序读

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

c) 随机写

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

d) 顺序写

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

e) 混合随机读写

fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest -ioscheduler=noop

3. 结果示例

Run status group 0 (all jobs):
   READ: io=85680KB, aggrb=1427KB/s, minb=1427KB/s, maxb=1427KB/s, mint=60002msec, maxt=60002msec
Disk stats (read/write):
  sda: ios=5332/8, merge=0/0, ticks=56490/420, in_queue=56850, util=94.43%
Finished

结果参数

io           IO 数据量
aggrb        平均总带宽
minb         最小带宽
maxb         最大带宽
mint         线程最短运行时间
maxt         线程最长运行时间
ios          总 IO 数,读 / 写
merge        发生 IO 合并的次数,读 / 写
ticks        Number of ticks kept the disk busy,读 / 写
in_queue     花在队列上的总时间
util         磁盘利用率


退出移动版