搜索
简帛阁>技术文章>Linux 磁盘IO性能测试工具:FIO

Linux 磁盘IO性能测试工具:FIO

1. FIO安装

CentOS下:

$ yum install fio


2. FIO简介

FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。
项目主页:https://github.com/axboe/fio
FIO输出结果详细解释可参见:https://tobert.github.io/post/2014-04-17-fio-output-explained.html
注:fio用于测试磁盘性能,不是文件系统,测试之前需要先把要测试的磁盘卸载掉,测试完后需格式化一遍再挂载上去。相关命令如下:

# 卸载磁盘
umount /mnt/datadir1
# 格式化磁盘
mkfs.ext4 /dev/sdd
# 挂载磁盘
mount -t ext4 /dev/sdd /mnt/datadir1

# 自动挂载,在里面添加该盘
vim /etc/fstab


3. FIO参数

例如:

$ fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
说明:
filename=/dev/sdd                     测试文件名称,通常选择需要测试的盘的data目录。
direct=1                              测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite                          测试模式
  =read                                  顺序读
  =write                                 顺序写
  =randwrite                             随机写
  =randread                              随机读
  =rw,readwrite                          顺序混合读写
  =randrw                                随机混合读写

bs=4k                                 单次io的块文件大小为4k
bsrange=512-2048                      同上,提定数据块的大小范围
size=5G                               本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30                            本次的测试线程为30个
runtime=1000                          测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
iodepth                               队列深度,只有使用libaio时才有意义。这是一个可以影响IOPS的参数。
ioengine=psync                        io引擎使用psync方式
        =libaio                            Linux专有的异步IO

rwmixwrite=30                         在混合读写的模式下,写占30%
group_reporting                       关于显示结果的,汇总每个进程的信息。
lockmem=1G                            只使用1g内存进行测试。
zero_buffers                          用0初始化系统buffer。
nrfiles=8                             每个进程生成文件的数量。

点击查看更多详细参数说明

4. FIO测试示例

4.1 顺序读测试

$ fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read -filename=/dev/sdd -name="BS 4KB read test" -iodepth=16 -runtime=60

4.2 顺序写测试

$ fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=write -filename=/dev/sdd -name="BS 4KB write test" -iodepth=16 -runtime=60

4.3 随机读测试

$ fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -filename=/dev/sdd -name="BS 4KB randread test" -iodepth=16 -runtime=60

4.4 随机写测试

$ fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite  -filename=/dev/sdd -name="BS 4KB randwrite test" -iodepth=16 -runtime=60

4.5 随机读写混合测试

$ fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randrw -rwmixread=70 -filename=/dev/sdd -name="BS 4KB randrw 70 test" -iodepth=16 -runtime=60


5. FIO输出结果

例如:

BS 4KB randread test: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1
fio-2.1.10
Starting 1 thread

BS 4KB randread test: (groupid=0, jobs=1): err= 0: pid=26408: Mon Feb 27 16:43:07 2017
  read : io=19908KB, bw=339689B/s, iops=82, runt= 60013msec
  # fio做了19908KB的IO,bandwidth速率为339689B/s,总IOPS为82,运行时间为60013毫秒

    slat (usec): min=18, max=97, avg=23.60, stdev= 2.79
    # slat (submission latency):代表 盘需要多久将IO提交到kernel做处理
    # usec 微秒

    clat (msec): min=1, max=23, avg=12.03, stdev= 3.79
    # clat (completion latency):命令提交到kernel到IO做完之间的时间,不包括submission latency

     lat (msec): min=1, max=23, avg=12.05, stdev= 3.79
    # 从IO结构体创建时刻开始,直到紧接着clat完成的时间

    clat percentiles (usec):
     |  1.00th=[ 4080],  5.00th=[ 5984], 10.00th=[ 7136], 20.00th=[ 8640],
     | 30.00th=[ 9920], 40.00th=[10944], 50.00th=[11840], 60.00th=[12992],
     | 70.00th=[14016], 80.00th=[15296], 90.00th=[17024], 95.00th=[18560],
     | 99.00th=[20864], 99.50th=[21632], 99.90th=[22400], 99.95th=[22912],
     | 99.99th=[23168]
    # Completion latency百分数

    bw (KB  /s): min=  276, max=  373, per=100.00%, avg=331.54, stdev=18.83
    # 带宽(bandwidth)

    lat (msec) : 2=0.02%, 4=0.82%, 10=30.32%, 20=66.75%, 50=2.09%
    # 30.32%的request延迟在4~10毫秒,66.75%的request延迟在10~20毫秒,以此类推

  cpu          : usr=0.10%, sys=0.25%, ctx=5057, majf=0, minf=8
  # 用户/系统CPU占用率,进程上下文切换(context switch)次数,主要和次要(major and minor)页面错误数量(page faults)。由于测试是配置成使用直接IO,page faults数量应该极少。

  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
  # iodepth设置,用来控制同一时刻发送给OS多少个IO。这完全是纯应用层面的行为,和盘的IO queue不是一回事

     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%
     #submit和complete代表同一时间段内fio发送上去和已完成的IO数量

     issued    : total=r=4977/w=0/d=0, short=r=0/w=0/d=0
     # 发送的IO数量

     latency   : target=0, window=0, percentile=100.00%, depth=1
     # Fio可以配置一个延迟目标值,这个值可以调节吞吐量直到达到预设的延迟目标

Run status group 0 (all jobs):
# Fio支持把不同的测试聚合
   READ: io=19908KB, aggrb=331KB/s, minb=331KB/s, maxb=331KB/s, mint=60013msec, maxt=60013msec
   # 汇总输出吞吐量和时间。
   #    io=表示总共完成的IO数量。在基于时间的测试中这是一个变量,在基于容量的测试中,这个值能匹配size参数。
   #    aggrb是所有进程/设备的汇总带宽。
   #    minb/maxb表示测量到的最小/最大带宽。
   #    mint/maxt表示测试的最短和最长耗时。和io=参数类似,时间值对于基于时间的测试应该能匹配runtime参数,对于基于容量的测试是一个变量。

Disk stats (read/write):
  sdd: ios=4969/0, merge=0/0, ticks=59703/0, in_queue=59702, util=99.51%
1FIO安装CentOS下:$yuminstallfio2FIO简介FIO测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。项目主页:https://githubcom/axboe/fioF
FIO磁盘性能测试工具简介一般我们测试硬盘或者存储的性能的时候,会用Linux系统自带的dd命令,因为是自带命令,简单易使用,因此一些客户喜欢使用dd命令来测试磁盘的读写性能。但是用dd命令来测试性能
文链接:https://wwwiteyecom/blog/elf88482168876一,FIO安装wgethttp://brickkerneldk/snaps/fio225targzyuminst
目前主流的第三方IO测试工具fio、iometer和Orion,这三种工具各有千秋。fioLinux系统下使用比较方便,iometer在window系统下使用比较方便,Orion是oracle的I
注:使用的是yum进行的安装,大家可以使用源码编译安装(centos7)安装yuminstallyfio命令行参数fio228fio[options][joboptions]<jobfile(
如何衡量云硬盘的性能IOPS:每秒读/写次数,单位为次(计数)。存储设备的底层驱动类型决定了不同的IOPS。吞吐量:每秒的读写数据量,单位为MB/s。时延:IO操作的发送时间到接收确认所经过的时间,单
FIO测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap,libaio,posixaio,SGv3,splice,null,networ
inuxFIO命令详解:磁盘IO测试工具fio(并简要介绍iostat工具)FIO介绍FIO测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载
1name可能被用于覆盖作业的名称2filenamefio通常基于该作业名称,线程编号,构成一个文件名称和位置如果您不想让线程之间的共享文件在一个作业或作业指定文件名都以覆盖默认的3lockfile4
我们在线上linux服务器排查问题时,一般会通过top、free、netstat、dfh等命令排查cpu、内存、网络和磁盘等问题。有的时候我们需要更进一步了解磁盘io的使用情况,那么本文就是重点讲解一