当前位置: 首页 > 工具软件 > fio > 使用案例 >

fio

韩高峯
2023-12-01

IOPS介绍:

IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。存储端的IOPS性能和主机端的IO是不同的,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要多次访问存储才可以完成。例如,主机写入一个最小的数据块,也要经过“发送写入请求、写入数据、收到写入确认”等三个步骤,也就是3个存储端访问。

fio配置项含义

•filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
•direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
•rw write 表示顺序写,randwrite 表示随机写,read 表示顺序读,randread 表示随机读
•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%
•rwmixread=70 在混合读写的模式下,读占70%
•group_reporting 关于显示结果的,汇总每个进程的信息。
•lockmem=1g 只使用1g内存进行测试。
•zero_buffers 用0初始化系统buffer。
•nrfiles=8 每个进程生成文件的数量。
•iodepth 测试的队列深度,队列深度表示控制器可以同时发送给被测设备的指令数目。默认为1

命令举例

随机读:
fio -filename=/dev/sdb1 -direct=1 -iodepth=1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=10 -runtime=1000 -group_reporting -name=mytest
顺序读:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
随机写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
顺序写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
混合随机读写:
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop

fio常用引擎

libaio
rbd
其他可以man fio查看

输出内容介绍

test: (g=0): rw=randread, bs=1M-1M/1M-1M/1M-1M, ioengine=libaio, iodepth=32
fio-2.8
Starting 1 process
Jobs: 1 (f=1): [r(1)] [0.5% done] [13312KB/0KB/0KB /s] [13/0/0 iops] [eta 01d:12h:45m:48s]
test: (groupid=0, jobs=1): err= 0: pid=18613: Tue Aug 20 23:48:01 2019
  read : io=47432MB, bw=80795KB/s, iops=78, runt=601159msec
  //第一行很容易读懂。fio做了47432MB的IO,速率80795KB/s,总IOPS 78 (默认4k block size),运行了601159毫秒
    slat (usec): min=37, max=1567, avg=110.64, stdev=32.58
    //你看到的第一个延迟(Latency)数据是slat,或称为submission latency。这个值和他的名字很相像,代表“盘需要多久将IO提交到kernel做处理?”。
    clat (msec): min=8, max=32661, avg=405.43, stdev=968.09
    //completion latency。这是命令提交到kernel到IO做完之间的时间,不包括submission latency
     lat (msec): min=8, max=32661, avg=405.54, stdev=968.09
    clat percentiles (msec):
     |  1.00th=[   17],  5.00th=[   25], 10.00th=[   33], 20.00th=[   48],
     | 30.00th=[   63], 40.00th=[   79], 50.00th=[   95], 60.00th=[  115],
     | 70.00th=[  143], 80.00th=[  289], 90.00th=[ 1237], 95.00th=[ 2180],
     | 99.00th=[ 4359], 99.50th=[ 5800], 99.90th=[ 9503], 99.95th=[13042],
     | 99.99th=[16712]
     
    bw (KB  /s): min=  270, max=478275, per=100.00%, avg=134946.82, stdev=155990.95
    lat (msec) : 10=0.01%, 20=2.44%, 50=19.20%, 100=31.11%, 250=26.04%
    lat (msec) : 500=4.78%, 750=2.34%, 1000=2.16%, 2000=6.33%, >=2000=5.59%
    
  cpu          : usr=0.08%, sys=1.04%, ctx=47728, majf=0, minf=11780
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
  //Fio有一个iodepth设置,用来控制同一时刻发送给OS多少个IO。这完全是纯应用层面的行为,和盘的IO queue不是一回事。这里iodepth设成1,所以IO depth在全部时间都是1
     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.1%, 64=0.0%, >=64=0.0%
    // submit和complete代表同一时间段内fio发送上去和已完成的IO数量
     issued    : total=r=47432/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     //发送的IO数量
     latency   : target=0, window=0, percentile=100.00%, depth=32
//Fio可以配置一个延迟目标值,这个值可以调节吞吐量直到达到预设的延迟目标。我还没有太多深入了解这部分。在基于时间或和容量的测试中,这行通常看起来一样。四个值分别代表预设的latency_target, latency_window, latency_percentile和iodepth。
Run status group 0 (all jobs):
   READ: io=47432MB, aggrb=80794KB/s, minb=80794KB/s, maxb=80794KB/s, mint=601159msec, maxt=601159msec
//io:表示总共完成的IO数量
//aggrb:所有设备的总带宽
//minb/maxb:表示测量到的最小/最大带宽
//mint/maxt:表示测试的最短和最长耗时

Disk stats (read/write):
  sdq: ios=47431/0, merge=0/0, ticks=19197991/0, in_queue=19199636, util=100.00%

下面这个网址介绍了,如何使用脚本方式编写fio工具
https://www.cnblogs.com/gaohong/p/5818086.html

 类似资料:

相关阅读

相关文章

相关问答