一、前言

GitHub地址:fio
官方文档:HOWTO

1、介绍

fio(flexible I/O Tester) 是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件,适用于文件及块接口性能测试。

fio常用的I/O引擎主要分为以下两种,可根据实际选择合适的I/O引擎和配置参数

  • 同步(如psync)
    对于同步I/O而言,一次只能发出一个IO请求,等待内核完成后才返回,通常指定iodepth为1,增大thread以达到最大性能测试要求

  • 异步(如libaio)
    对于异步I/O而言,一次提交一批请求,然后等待一批的完成,减少与内核交互次数,通常指定thread为1,增大iodepth以达到最大性能测试要求

二、安装部署

1、Linux客户端

1.1、安装libaio(可选)

示例使用libaio引擎测试,故此处需要先行安装相关软件包,如不使用该引擎进行测试,此步骤可忽略

yum install libaio-devel -y
1.2、软件包安装

创建fio软件包安装目录/opt/fio,下载fio源码包进行编译安装,配置fio环境变量

mkdir /opt/fio
wget https://github.com/axboe/fio/archive/fio-3.20.tar.gz
tar -zxvf fio-3.20.tar.gz
cd fio-fio-3.20/
./configure --prefix=/opt/fio/
make && make install
echo -e "\n\n export PATH=/opt/fio/bin:$PATH" >> /etc/profile && source /etc/profile

2、Window客户端

下载地址:https://bsdio.com/fio/releases/fio-3.20-x64.msi
下载安装软件包即可,安装时自动配置环境变量

三、配置使用

1、参数解释

fio -filename=/dev/sdb -direct=1 -rw=write -ioengine=libaio -bs=4k -iodepth=32 -numjobs=1 -runtime=600 -group_reporting -name=4ktest
  • -filename
    用于测试块设备,一般指定需要测试的磁盘或者分区,如-filename=/dev/sdb

  • -directory
    用于测试文件,一般指定需要测试的目录路径,如-directory=/client/

  • -direct
    默认值为0,用于决定是否绕过缓存,一般设置为1(开启direct io,绕过系统缓存)

  • -rw
    用于指定负载读写类型,一般可以设置以下参数:

    • read:顺序读(Sequential reads)
    • write:顺序写(Sequential writes)
    • rw:顺序读写(Mixed sequential reads and writes),当负载为混合读写类型时,需要指定读写占比(rwmixread
    • randread:随机读(Random reads)
    • randwrite:随机写(Random writes)
    • randrw:随机读写(Random mixed reads and writes),当负载为混合读写类型时,需要指定读写占比(rwmixread
  • rwmixread
    用于指定混合读写同一时刻读的占比,默认为50%,即读写比为1:1

  • rwmixwrite
    用于指定混合读写同一时刻写的占比,默认为50%,即读写比为1:1

  • -ioengine
    用于指定负载工作引擎,常用引擎一般有psync(同步IO引擎)及libaio(异步IO引擎)
    可选参数有sync , psync , vsync , posixaio , mmap , splice , syslet-rw , sg , null , net , netsplice , cpuio , guasi , external、libaio

  • -bs
    用于指定IO块大小

  • -iodepth
    用于指定IO深度,不同IO深度下有不同性能值,需合理调整验证以得出最优性能

  • -numjobs
    用于指定IO并发线程数

  • -runtime
    用于指定负载测试时间,时间单位为s

  • -group_reporting
    用于指定测试结果显示方式
    当指定-numjobs参数时,如果不指定-group_reporting参数,测试结果以per-job形式显示(即把所有线程的测试结果单独显示出来)
    当指定-numjobs参数时,如果指定-group_reporting参数,测试结果以per-group形式显示(即汇总所有线程的测试结果合并显示出来)

  • -name
    用于指定负载工作job名称,名称可自定义

2、结果分析

[root@node241 ~]# fio -filename=/dev/sdb -direct=1 -rw=write -ioengine=libaio -bs=4k -iodepth=16 -numjobs=16 -runtime=600 -group_reporting -name=4ktest
4ktest: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.20
Starting 16 processes
Jobs: 16 (f=16): [W(16)][100.0%][w=15.2MiB/s][w=3900 IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=31603: Tue Jun 30 16:55:43 2020
  write: IOPS=4515, BW=17.6MiB/s (18.5MB/s)(10.3GiB/600084msec); 0 zone resets
    slat (nsec): min=1369, max=266167k, avg=9274.23, stdev=500148.33
    clat (usec): min=1044, max=1463.7k, avg=56668.55, stdev=65749.73
     lat (usec): min=1267, max=1463.7k, avg=56678.04, stdev=65750.75
    clat percentiles (msec):
     |  1.00th=[    6],  5.00th=[   12], 10.00th=[   20], 20.00th=[   28],
     | 30.00th=[   33], 40.00th=[   36], 50.00th=[   40], 60.00th=[   45],
     | 70.00th=[   54], 80.00th=[   70], 90.00th=[  104], 95.00th=[  146],
     | 99.00th=[  338], 99.50th=[  489], 99.90th=[  785], 99.95th=[  877],
     | 99.99th=[ 1028]
   bw (  KiB/s): min=  266, max=144647, per=100.00%, avg=18128.38, stdev=746.11, samples=19075
   iops        : min=   62, max=36161, avg=4530.95, stdev=186.55, samples=19075
  lat (msec)   : 2=0.01%, 4=0.18%, 10=3.64%, 20=6.93%, 50=56.16%
  lat (msec)   : 100=22.43%, 250=9.03%, 500=1.16%, 750=0.34%, 1000=0.12%
  lat (msec)   : 2000=0.01%
  cpu          : usr=0.20%, sys=0.54%, ctx=779333, majf=0, minf=664
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     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.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,2709976,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=16

Run status group 0 (all jobs):
  WRITE: bw=17.6MiB/s (18.5MB/s), 17.6MiB/s-17.6MiB/s (18.5MB/s-18.5MB/s), io=10.3GiB (11.1GB), run=600084-600084msec

Disk stats (read/write):
  sdb: ios=43/395233, merge=0/2139499, ticks=123/22527124, in_queue=22622488, util=100.00%
  • IOPS=:IOPS性能数值,单位为op/s
  • BW=:带宽性能数值,单位为MiB/s
  • lat:时延性能数值,通常取avg平均值

3、常用命令

  • 重定向测试结果到文件内
    fio {config-file} -output={result-file}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐