暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

磁盘测试工具 FIO 安装和使用方法

Ty3306 2022-06-15
12640

1. FIO 安装

1.1 查看 fio 是否安装

rpm –qa|grep fio
复制


1.2 安装

1.2.1 源码安装

- 官网地址:http://freecode.com/projects/fio/
- github 地址:https://github.com/axboe/fio

wget https://github.com/axboe/fio/archive/refs/tags/fio-3.14.tar.gz
tar -zxvf fio-3.14.tar.gz
./configure
make
make install
复制


1.2.2 rpm 安装

官网地址:https://pkgs.org/download/fio

获取 fio 的 rpm 安装包:http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm



1.2.3 二进制安装


wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fio-3.7-2.el7.x86_64.rpm
yum install libaio-devel
yum install libibverbs -y
yum install libpmem -y
yum install librados2 -y
yum install librbd1
rpm -ivh fio-3.7-2.el7.x86_64.rpm
复制


1.2.4 yum 安装

yum install fio
复制


1.3 测试

# fio
复制


2. 参数说明

-direct=1              /*定义是否使用direct IO,可选值如下:值为0,表示使用buffered IO;值为1,表示使用 direct IO,测试过程绕过机器自带的buffer。使测 
                         试结果更真实。*/

-iodepth=64            /*定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度, 如果有多个线程测试,意味着每个线程都是此处定义的队列深
                         度。fio总的IO并发数 =iodepth * numjobs*/

-rw=randwrite          /*定义测试时的读写策略,可选值如下:随机读:randread,随机写:randwrite,顺序读: read,顺序写:write,混合随机读写:randrw

-bs=4k		       /*定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB*/

-size=100M             /*定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位
                         的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。建议测试
                         数据量为内存两倍大,尽量避免缓存影响。*/

-numjobs=1	       /*每个job(任务)开1个线程,这里用了几,后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数(几个name=jobx)* 							 numjobs。 */

-runtime	       /*定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/ 写完。*/

-group_reporting       /*定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同 job汇总展示信息。*/

-filename=/dev/sdb1    /*测试文件名称,通常选择需要测试的盘的data目录。*/

-ioengine=libaio       /*libaio指的是异步模式,如果是同步就要用sync。
			vsync - 使用 readv / writev,主要是会将相邻的 I/O 进行合并 
			psync - 对应的 pread / pwrite,增量同步,一般sync是全量的
			pvsync / pvsync2 - 对应的 preadv / pwritev,以及 preadv2 / p writev2
			定义fio如何下发IO请求,通常有同步IO和异步IO:同步IO一次只能发出一个IO请求, 等待内核完成后才返回。这样对于单个线程IO队列深度总是小						 于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。异步IO则通常使用libaio这样的方式一次提交一批						  IO 请求,然后等待一批的完成,减少交互的次数,会更有效率*/

-thread		       /*使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。*/

–numjobs=1	       /*定义测试的并发线程数*/


-filename	       /*定义测试文件(设备)的名称。此处选择文件,则代表测试文件系统的性能,例如:- filename=/opt/fiotest/fiotest.txt;此处选择设备名						  称,则代表测试裸盘的性能,例:-filename=/dev/vdb1。如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意
		        filename选择指定文件,以避免覆盖文件系统和原有数据。*/

-size=100M	       /*定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部 读/写完成,然后才停止测试。该参数的值,可以是带单位						 的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。建议测试						  数据量为内存两倍大,尽量避免缓存影响。*/

-name=job1	       /*定义测试任务名称。*/

–output TestResult.log /*日志输出到TestResult.log。*/

-rwmixwrite=30      /*在混合读写的模式下,写占30% */

-lockmem=1g       /*只使用1g内存进行测试。 */

-zero_buffers       /*用0初始化系统buffer。*/

-nrfiles=8        /*每个进程生成文件的数量。*/
复制


3. 测试及结果说明

  • 磁盘读写常用测试点

1.  Read=100% Ramdon=100% rw=randread (100%随机读)
2.  Read=100% Sequence=100% rw=read (100%顺序读)
3.  Write=100% Sequence=100% rw=write (100%顺序写)
4.  Write=100% Ramdon=100% rw=randwrite (100%随机写)
5.  Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=3070%顺序读,30%顺序写)
6.  Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30(70%随机读,30%随机写) 
复制


  • 4k随机读写,70%读+30%写,30个并发

[root@tydb010 data2]# fio -direct=1 -iodepth=1 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=4k -size=4G -numjobs=30 -runtime=60 -group_reporting -filename=/data2/1.txt -name=Write_BandWidth_Test
Write_BandWidth_Test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
...
fio-3.14
Starting 30 threads
Write_BandWidth_Test: Laying out IO file (1 file / 4096MiB)
Jobs: 30 (f=30): [m(30)][100.0%][r=24.2MiB/s,w=10.5MiB/s][r=6206,w=2692 IOPS][eta 00m:00s]
Write_BandWidth_Test: (groupid=0, jobs=30): err= 0: pid=11155: Mon Jun 13 16:38:40 2022
  read: IOPS=6381, BW=24.9MiB/s (26.1MB/s)(1496MiB/60008msec)
    slat (usec): min=39, max=647909, avg=379.86, stdev=9733.94
    clat (nsec): min=604, max=379829k, avg=3132927.68, stdev=8833769.30
     lat (usec): min=68, max=647913, avg=3526.35, stdev=13178.41
    clat percentiles (nsec):
     |  1.00th=[     1608],  5.00th=[     1928], 10.00th=[     2512],
     | 20.00th=[    37632], 30.00th=[    50432], 40.00th=[  2113536],
     | 50.00th=[  2375680], 60.00th=[  2605056], 70.00th=[  2867200],
     | 80.00th=[  3391488], 90.00th=[  5668864], 95.00th=[  8224768],
     | 99.00th=[ 21364736], 99.50th=[ 38010880], 99.90th=[147849216],
     | 99.95th=[183500800], 99.99th=[265289728]
   bw (  KiB/s): min= 4291, max=38895, per=99.42%, avg=25377.61, stdev=182.49, samples=3585
   iops        : min= 1067, max= 9711, avg=6339.06, stdev=45.63, samples=3585
  write: IOPS=2738, BW=10.7MiB/s (11.2MB/s)(642MiB/60008msec)
    slat (usec): min=47, max=647261, avg=461.69, stdev=10445.88
    clat (nsec): min=659, max=411384k, avg=2215531.55, stdev=8180669.00
     lat (usec): min=75, max=647264, avg=2695.71, stdev=13337.17
    clat percentiles (nsec):
     |  1.00th=[     1656],  5.00th=[     1944], 10.00th=[     2416],
     | 20.00th=[     3152], 30.00th=[    33536], 40.00th=[    37632],
     | 50.00th=[    50432], 60.00th=[  2539520], 70.00th=[  2834432],
     | 80.00th=[  3194880], 90.00th=[  4112384], 95.00th=[  5799936],
     | 99.00th=[ 12255232], 99.50th=[ 20578304], 99.90th=[147849216],
     | 99.95th=[183500800], 99.99th=[258998272]
   bw (  KiB/s): min= 2005, max=18017, per=99.41%, avg=10889.09, stdev=86.89, samples=3585
   iops        : min=  494, max= 4495, avg=2715.49, stdev=21.73, samples=3585
  lat (nsec)   : 750=0.01%, 1000=0.01%
  lat (usec)   : 2=5.71%, 4=13.53%, 10=0.09%, 20=0.03%, 50=16.59%
  lat (usec)   : 100=1.31%, 250=0.02%, 500=0.09%, 750=0.07%, 1000=0.12%
  lat (msec)   : 2=4.10%, 4=43.46%, 10=11.89%, 20=2.03%, 50=0.58%
  lat (msec)   : 100=0.16%, 250=0.20%, 500=0.01%
  cpu          : usr=0.21%, sys=3.11%, ctx=344789, majf=0, minf=37
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.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.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=382937,164339,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
   READ: bw=24.9MiB/s (26.1MB/s), 24.9MiB/s-24.9MiB/s (26.1MB/s-26.1MB/s), io=1496MiB (1569MB), run=60008-60008msec
  WRITE: bw=10.7MiB/s (11.2MB/s), 10.7MiB/s-10.7MiB/s (11.2MB/s-11.2MB/s), io=642MiB (673MB), run=60008-60008msec

Disk stats (read/write):
  sdc: ios=382060/163979, merge=0/12, ticks=41077/19349, in_queue=60391, util=98.77%
复制


  • 缩写解释

io=执行了多少M的IO

bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟
clat=完成延迟
lat=响应时间
bw=带宽
cpu=利用率
IO depths=io队列
IO submit=单个IO提交要提交的IO数
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延迟的分布

io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.

ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io_queue=花费在队列上的总共时间.
util=磁盘利用率
复制












「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 1. FIO 安装
    • 1.1 查看 fio 是否安装
    • 1.2 安装
      • 1.2.1 源码安装
      • 1.2.2 rpm 安装
      • 1.2.3 二进制安装
      • 1.2.4 yum 安装
    • 1.3 测试
  • 2. 参数说明
  • 3. 测试及结果说明