fio

fio的I/O引擎在执行磁盘访问模拟时具有不同的特点和行为。以下是几个常见的fio I/O引擎及其区别: 1. sync(同步引擎): • 特点:直接使用系统调用进行I/O操作,是最基本的引擎。 • 行为:每个读取或写入操作都将阻塞进程,直到完成该操作。 • 适用场景:测试同步I/O负载,并需要较低级别的控制。 2. mmap(内存映射引擎): • 特点:利用内存映射技术将数据文件映射到进程地址空间中。 • 行为:读取和写入操作直接在内存中进行,无需复制数据到用户空间和内核空间之间。 • 适用场景:在某些情况下能够获得更高的性能,适用于需要快速读写大型数据集的场景。 3. libaio(异步I/O引擎): • 特点:利用Linux的异步I/O接口(Linux AIO)实现非阻塞的I/O操作。 • 行为:可以同时提交多个I/O请求并以异步方式处理,提高效率和并发性。 • 适用场景:高并发和高吞吐量的应用场景,如数据库等。 4. pvsync(伪同步引擎): • 特点:使用异步I/O接口,但模拟了同步I/O的行为。 • 行为:每个I/O操作完成后进行轮询等待,模拟同步操作,同时能够利用异步I/O性能优势。 • 适用场景:需要模拟同步I/O的行为,但又希望获得异步I/O的高效能力。 不同的fio引擎适合不同的测试需求和场景,可根据具体情况选择合适的引擎。注意在选取时要考虑到系统特点、工作负载以及所需的性能指标。 # 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% 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 iops表示对采集到的样本每秒的输入/输出操作的统计,结果展示最小、最大、平均、标准偏差及本次测试采样数 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总延时的分布范围,如下表示小于50us的有0.15%,在50~100us中的有7.17%, 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利用率,用户(usr)和系统(sys)的占比,ctx指该线程上下文切换次数,majf指主要页面错误数,minf指次要页面错误数。CPU利用率取的是平均值,上下文切换次数和错误数则是相加求和后的结果 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的n次幂,每个条目覆盖从该值到下一个条目的深度,例如:2=100%表示覆盖从2到4的深度 submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% 一个提交调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中提交了0~4个I/O complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0% 一个完成调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中完成了0~4个I/O fioTest: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=2 fio-3.32 Starting 1 thread Jobs: 1 (f=1): [w(1)][100.0%][w=26.8MiB/s][w=6873 IOPS][eta 00m:00s] fioTest: (groupid=0, jobs=1): err= 0: pid=1949: Sun Oct 23 19:50:16 2022 # ↓写入测试结果,IOPS是每秒执行的平均I/O,BW是平均带宽速率,以2的n次幂为基础得到的值,括号内是以10的n次幂未基础得到的值),最后括号内的值是以2的n次幂为基础计算得到的总I/O和该线程的运行时长   write: IOPS=6928, BW=27.1MiB/s (28.4MB/s)(1024MiB/37833msec); 0 zone resets       # ↓slat是submit latency的缩写, 表示I/O的提交延时(同步I/O时不显示此项),单位是微秒(us),结果展示最小、最大、平均和标准偏差     slat (usec): min=24, max=7873, avg=101.91, stdev=37.68     # ↓clat是complete latency的缩写,表示I/O的完成延时,单位纳秒(ns)     clat (usec): min=28, max=8590, avg=183.87, stdev=119.90      # ↓lat是latency的缩写,表示I/O的总延时,单位也是微秒(us)      lat (usec): min=63, max=8885, avg=285.78, stdev=125.51     # ↓clat percentiles表示I/O完成延时百分位的数值,单位是微秒(us)     clat percentiles (usec):      |  1.00th=[   78],  5.00th=[   94], 10.00th=[  108], 20.00th=[  139],      | 30.00th=[  149], 40.00th=[  155], 50.00th=[  163], 60.00th=[  172],      | 70.00th=[  182], 80.00th=[  200], 90.00th=[  239], 95.00th=[  310],      | 99.00th=[  742], 99.50th=[  898], 99.90th=[ 1270], 99.95th=[ 1483],      | 99.99th=[ 2343]    # ↓bw表示对采集到的样本的带宽统计,单位是(KiB/s),结果展示最小、最大、该线程在其组中接收总带宽的百分比、平均、标准偏差及本次测试采样数    bw (  KiB/s): min=25848, max=35609, per=100.00%, avg=27741.13, stdev=1890.47, samples=75    # ↓iops表示对采集到的样本每秒的输入/输出操作的统计,结果展示最小、最大、平均、标准偏差及本次测试采样数    iops        : min= 6462, max= 8902, avg=6935.04, stdev=472.65, samples=75   # ↓延时分布,表示I/O总延时的分布范围,如下表示小于50us的有0.15%,在50~100us中的有7.17%,……   lat (usec)   : 50=0.15%, 100=7.17%, 250=84.05%, 500=6.06%, 750=1.61%   lat (usec)   : 1000=0.65%   lat (msec)   : 2=0.29%, 4=0.01%, 10=0.01%   # ↓CPU利用率,用户(usr)和系统(sys)的占比,ctx指该线程上下文切换次数,majf指主要页面错误数,minf指次要页面错误数。CPU利用率取的是平均值,上下文切换次数和错误数则是相加求和后的结果   cpu          : usr=0.28%, sys=74.03%, ctx=101519, majf=0, minf=2   # ↓depth、submit和complete三者所涵盖的范围可以不同        # ↓I/O深度在整个工作周期中的分布,数值划分为2的n次幂,每个条目覆盖从该值到下一个条目的深度,例如:2=100%表示覆盖从2到4的深度   IO depths    : 1=0.1%, 2=100.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%        # ↓一个提交调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中提交了0~4个I/O      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%      # ↓一个完成调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中完成了0~4个I/O      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%      # ↓总共发出读取/写入/修剪/?请求的数量,及其中有多少个请求被缩短或丢弃(第4个s不清楚表示什么,等后续官方文档更新吧)      issued rwts: total=0,262144,0,0 short=0,0,0,0 dropped=0,0,0,0      # ↓用于latency_target和相关选项,打印满足指定延迟目标所需的I/O深度      latency   : target=0, window=0, percentile=100.00%, depth=2 # ↓输出各组统计信息 Run status group 0 (all jobs):   # ↓bw指该组中线程的总带宽,然后是该组中所有线程的最小和最大带宽,I/O指该组中所有线程执行的聚合I/O,括号外的值是2的幂形式,括号内是10的幂的形式,run指运行时间   WRITE: bw=27.1MiB/s (28.4MB/s), 27.1MiB/s-27.1MiB/s (28.4MB/s-28.4MB/s), io=1024MiB (1074MB), run=37833-37833msec # ↓输出磁盘状态 Disk stats (read/write):   # ios表示所有组执行的I/O数,merge表示I/O调度程序执行的合并数,ticks表示处理I/O的总时间,in_queue表示在磁盘队列中花费的总时间,util表示磁盘利用率,若值为100%则表示磁盘一直处于繁忙状态   sdb: ios=4/260966, merge=0/0, ticks=6/55631, in_queue=1141, util=99.85%

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值