fio执行结果说明

x33g5p2x  于2022-02-07 转载在 其他  
字(4.9k)|赞(0)|评价(0)|浏览(337)
执行方式

以测试顺序写为例,执行fio命令,有2种执行方式:命令行执行和配置文件执行。
    1、命令行执行:

# echo $test_file
/perf/test1
# fio -direct=1 -iodepth=16 -numjobs=4 -rw=write -ioengine=libaio -bs=4k -size=20G -runtime=600 -group_reporting -name=file -filename=${test_file}

2、文本执行。将配置信息写到文本中,然后命令行执行文本:

# cat write.fio 
[global]
direct=1
iodepth=16
numjobs=4
rw=write
ioengine=libaio
bs=4K
size=20G
runtime=600
group_reporting
name=file

[job1]
filename=/perf/test1
# fio write.fio    
job1: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.7
Starting 4 processes
...
结果说明

执行结果示例为:

# fio -direct=1 -iodepth=16 -numjobs=4 -rw=write -ioengine=libaio -bs=4k -size=20G -runtime=600 -group_reporting -name=file -filename=${test_file}
file: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.7
Starting 4 processes
file: Laying out IO file (1 file / 20480MiB)
Jobs: 4 (f=4): [W(4)][100.0%][r=0KiB/s,w=19.0MiB/s][r=0,w=4868 IOPS][eta 00m:00s]
file: (groupid=0, jobs=4): err= 0: pid=9801: Thu Jan 20 10:22:04 2022
  write: IOPS=5891, BW=23.0MiB/s (24.1MB/s)(13.5GiB/600012msec)
    slat (nsec): min=1853, max=20221k, avg=11674.10, stdev=80580.99
    clat (usec): min=584, max=66788, avg=10849.95, stdev=4440.23
     lat (usec): min=596, max=66797, avg=10862.03, stdev=4441.21
    clat percentiles (usec):
     |  1.00th=[ 1450],  5.00th=[ 2212], 10.00th=[ 4752], 20.00th=[ 5866],
     | 30.00th=[ 9634], 40.00th=[12649], 50.00th=[12911], 60.00th=[13042],
     | 70.00th=[13042], 80.00th=[13435], 90.00th=[13960], 95.00th=[14615],
     | 99.00th=[20841], 99.50th=[26084], 99.90th=[35390], 99.95th=[40633],
     | 99.99th=[52167]
   bw (  KiB/s): min= 4536, max=28192, per=25.00%, avg=5890.48, stdev=2668.41, samples=4800
   iops        : min= 1134, max= 7048, avg=1472.59, stdev=667.11, samples=4800
  lat (usec)   : 750=0.01%, 1000=0.14%
  lat (msec)   : 2=3.41%, 4=5.18%, 10=21.88%, 20=68.29%, 50=1.08%
  lat (msec)   : 100=0.01%
  cpu          : usr=0.63%, sys=2.40%, ctx=1663079, majf=0, minf=118
  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,3534766,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=23.0MiB/s (24.1MB/s), 23.0MiB/s-23.0MiB/s (24.1MB/s-24.1MB/s), io=13.5GiB (14.5GB), run=600012-600012msec

Disk stats (read/write):
  vdb: ios=0/3534381, merge=0/601, ticks=0/38113725, in_queue=38113725, util=100.00%

运行时,fio将显示已创建作业的状态。示例中为:

Jobs: 4 (f=4): [W(4)][100.0%][r=0KiB/s,w=19.0MiB/s][r=0,w=4868 IOPS][eta 00m:00s]

当前运行和执行I/O的线程数为4,当前打开的文件数(f=)为4。
    第一组括号中的字符表示每个线程的当前状态,示例中为W,表示顺序写。当为R时,表示顺序读;r表示随机读;w表示随机写;M表示混合顺序读/写;m表示混合随机读/写。
    第二组括号显示当前估计完成百分比,因为已经命令已经执行完,所以是100%。第三组括号分别显示读取和写入I/O速率。第四组括号以带宽和IOPS表示第三组括号的内容,本例中: 3868 IOPS * 4 / 1024 = 19 MB/S。最后,将显示预估的作业剩余运行时间。
    当fio完成时(或被Ctrl-C中断),它将按顺序显示每个线程、每组线程和每个磁盘的数据。

write: IOPS=5891, BW=23.0MiB/s (24.1MB/s)(13.5GiB/600012msec)

IOPS是每秒执行的平均I/O。BW是平均带宽速率,示例中 23.0MiB/s = 192.937984 Mbps = 24.117248 MB/s。最后两个值为:(执行的总I/O / 线程运行时间)。

slat (nsec): min=1853, max=20221k, avg=11674.10, stdev=80580.99
clat (usec): min=584, max=66788, avg=10849.95, stdev=4440.23
lat (usec): min=596, max=66797, avg=10862.03, stdev=4441.21

slat是提交I/O所用的时间,即提交延迟(最小值,最大值,平均值,标准偏差)。在上面的示例中,单位是纳秒。
    clat与slat的名称类似,表示从提交到完成I/O的时间。
    lat表示总延迟。与slat和clat的名称类似,表示从fio创建I/O单元到完成I/O操作的时间。

bw (  KiB/s): min= 4536, max=28192, per=25.00%, avg=5890.48, stdev=2668.41, samples=4800

bw表示基于sample的带宽统计。包括采样数(samples)和该线程占用总聚合带宽的近似百分比(per)。

iops        : min= 1134, max= 7048, avg=1472.59, stdev=667.11, samples=4800

基于sample的IOPS统计信息。与bw同名。

lat (usec)   : 750=0.01%, 1000=0.14%
  lat (msec)   : 2=3.41%, 4=5.18%, 10=21.88%, 20=68.29%, 50=1.08%
  lat (msec)   : 100=0.01%

I/O完成延迟的分布。这是从I/O离开fio到完成的时间。本例中,750=0.01%表示 0.01% 的I/O在750us以下完成,1000=0.14% 意味着0.14%的I/O需要750到999us才能完成。

cpu          : usr=0.63%, sys=2.40%, ctx=1663079, majf=0, minf=118

CPU使用率。用户和系统时间使用率,以及这个线程经历的上下文切换的数量(ctx),最后是主要(majf)和次要(minf)页面错误的数量。

IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%

在作业生命周期内I/O深度的分布。数字被划分为2的幂,每个条目覆盖从该值到低于下一个条目的深度,例如,16=覆盖从16到31的深度。

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%

submit在一次提交调用中提交了多少个I/O。每个条目都表示该数值及其以下,直到上一个条目——例如,4=100%表示我们在每次提交调用中提交了1到4个I/O。
    complete与上述submit编号相同,但用于完成。

issued rwts: total=0,3534766,0,0 short=0,0,0,0 dropped=0,0,0,0

发出的读/写/修剪请求的数量,以及其中有多少是短请求或丢弃的。
    列出每个client后,将打印组统计信息。看起来像这样:

Run status group 0 (all jobs):
  WRITE: bw=23.0MiB/s (24.1MB/s), 23.0MiB/s-23.0MiB/s (24.1MB/s-24.1MB/s), io=13.5GiB (14.5GB), run=600012-600012msec

bw表示此组中线程的聚合带宽,然后是此组中所有线程的最小和最大带宽。
    io表示该组中所有线程执行的I/O,格式与bw相同。
    run表示此组中线程的最短和最长运行时间。
    最后,打印磁盘统计信息。这是Linux特有的,看起来像这样:

Disk stats (read/write):
  vdb: ios=0/3534381, merge=0/601, ticks=0/38113725, in_queue=38113725, util=100.00%

每个值都会输出读和写的值,读的值在前。
    ios表示所有组执行的I/O数。
    merge表示I/O计划程序执行的合并数。
    ticks表示磁盘忙的滴答数。
    in_queue表示在磁盘队列中花费的总时间。
    util表示磁盘利用率。值为100%意味着磁盘一直处于繁忙状态,50%意味着磁盘有一半时间处于空闲状态。

参考文档

[1] Jens Axboe. fio - Flexible I/O tester rev. 3.29[EB/OL]. 2017年[2022年1月24日]. https://fio.readthedocs.io/en/latest/fio_doc.html.

相关文章

微信公众号

最新文章

更多