0


磁盘io测试工具fio

**

fio

**(Flexible I/O Tester)是一种用于性能测试和基准测试的工具,专门用于评估和测量存储系统(如硬盘、固态硬盘、网络存储等)在不同负载条件下的输入/输出(I/O)性能。它是一个非常灵活和强大的工具,具有以下几个主要功能和特点:

主要功能

  1. 多种 I/O 模式fio 支持多种 I/O 操作模式,包括顺序读、顺序写、随机读、随机写,以及混合读写模式。用户可以根据需求选择合适的模式进行性能测试。
  2. 灵活的块大小和io深度设置: 用户可以指定不同的块大小(例如 4KB、64KB、1MB 等)和 I/O 深度(即并发发出的 I/O 请求数),以模拟不同环境下的工作负载。
  3. 多线程和多进程支持fio 支持通过多线程或多进程来增加负载,从而评估存储设备在高并发情况下的性能。
  4. 丰富的报告功能: 测试结果以易于理解的格式输出,提供带宽(吞吐量)、IOPS(每秒输入输出次数)、延迟(响应时间)等关键指标的详细统计信息。
  5. 使用场景广泛: 可以用于测量服务器、数据库、云存储、虚拟化环境,以及任何涉及存储设备的应用。
  6. 可编程性和自动化: 测试任务可以通过配置文件进行定义,支持自动化测试,以满足多种测试需求。

使用场景

  • 性能基准测试:评估新硬件或存储设备的性能。
  • 性能分析:了解在特定条件下存储系统的表现。
  • 容量规划:帮助确定系统满足未来工作负载需求的能力。
  • 故障排查:识别和解决存储系统性能瓶颈。

测试

./fio --filename=./fio.out --direct=1 --rw=randwrite --bs=64k --size=1G --runtime=1000 --lockmem=128M --name=iotest

./fio --filename=./fio.out --direct=1 --rw=randwrite --bs=64k --size=1G --runtime=1000,--lockmem=128M --name=iotest
iotest: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=psync, iodepth=1
fio-3.37-124-gbcd4
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=112MiB/s][w=1793 IOPS][eta 00m:00s]
iotest: (groupid=0, jobs=1): err= 0: pid=1295536: Sun Jan 21 16:00:22 2024
  write: IOPS=1786, BW=112MiB/s (117MB/s)(1024MiB/9173msec); 0 zone resets
    clat (usec): min=361, max=42406, avg=555.05, stdev=2113.31
     lat (usec): min=362, max=42408, avg=557.12, stdev=2113.30
    clat percentiles (usec):
     |  1.00th=[  379],  5.00th=[  388], 10.00th=[  392], 20.00th=[  396],
     | 30.00th=[  404], 40.00th=[  408], 50.00th=[  412], 60.00th=[  416],
     | 70.00th=[  424], 80.00th=[  433], 90.00th=[  445], 95.00th=[  465],
     | 99.00th=[  627], 99.50th=[ 1336], 99.90th=[38011], 99.95th=[38536],
     | 99.99th=[40633]
   bw (  KiB/s): min=106624, max=120064, per=99.79%, avg=114069.33, stdev=4277.00, samples=18
   iops        : min= 1666, max= 1876, avg=1782.33, stdev=66.83, samples=18
  lat (usec)   : 500=97.80%, 750=1.43%, 1000=0.23%
  lat (msec)   : 2=0.08%, 4=0.02%, 10=0.01%, 50=0.42%
  cpu          : usr=1.43%, sys=5.24%, ctx=17109, majf=0, minf=9
  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=0,16384,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):
  WRITE: bw=112MiB/s (117MB/s), 112MiB/s-112MiB/s (117MB/s-117MB/s), io=1024MiB (1074MB), run=9173-9173msec

Disk stats (read/write):
  vblkdev34: ios=0/16286, sectors=0/2084264, merge=0/2, ticks=0/8654, in_queue=8657, util=99.01%

测试结果解释

1. 命令行参数

./fio --filename=./fio.out --direct=1 --rw=randwrite --bs=64k --size=1G --runtime=1000 --lockmem=128M --name=iotest
  • --filename=./fio.out:指定输出文件名为 fio.out
  • --direct=1:使用直接IO,不经过操作系统缓存。
  • --rw=randwrite:进行随机写入操作。
  • --bs=64k:块大小为64KB。
  • --size=1G:测试数据总大小为1GB。
  • --runtime=1000:运行时间为1000秒。
  • --lockmem=128M:锁定128MB的内存以用于IO操作,以避免干扰其他进程。
  • --name=iotest:指定作业的名称为 iotest

2. 作业配置

iotest: (g=0): rw=randwrite, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=psync, iodepth=1
fio-3.37-124-gbcd4
  • iotest: (g=0): 当前测试作业的说明,g=0 表示作业组编号为0。
  • rw=randwrite:操作模式为随机写入。
  • bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB:读、写和总共的块大小均为64KB。
  • ioengine=psync:使用同步IO引擎工作。
  • iodepth=1:IO深度为1,意味着只有一个IO请求可以并行地发出。

3. 启动作业

Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=112MiB/s][w=1793 IOPS][eta 00m:00s]
  • Starting 1 process:开始运行1个进程。
  • Jobs: 1 (f=1):表示正在运行的作业数为1,f=1 表示当前处理的作业数。
  • [w(1)][100.0%]:当前为写操作,进度为100%。
  • [w=112MiB/s]:写入速率为112MB/s。
  • [w=1793 IOPS]:每秒输入输出操作次数为1793次。
  • [eta 00m:00s]:预计到达时间,当前已完成,因此为0。

4. 结果概览

iotest: (groupid=0, jobs=1): err= 0: pid=1295536: Sun Jan 21 16:00:22 2024
  • 显示作业状态,包括 groupid=0,作业数量为1。
  • err=0 表示没有发生错误,pid=1295536 是进程ID。
  • Sun Jan 21 16:00:22 2024 显示测试的时间戳。

5. 写入统计数据

write: IOPS=1786, BW=112MiB/s (117MB/s)(1024MiB/9173msec); 0 zone resets
  • IOPS:1786,表示写入的输入/输出操作次数每秒。
  • BW:带宽为112MB/s(117MB/s),总的写入的字节量为1024MB,在9173毫秒内完成。
  • 0 zone resets表示未发生任何区域重置。

6. 延迟统计

clat (usec): min=361, max=42406, avg=555.05, stdev=2113.31
  • **clat (completion latency)**:完成延迟 - 最小延迟:361微秒- 最大延迟:42406微秒- 平均延迟:555.05微秒- 标准差:2113.31微秒
lat (usec): min=362, max=42408, avg=557.12, stdev=2113.30
  • **lat (latency)**:总延迟(包括调度延迟和完成延迟): - 最小、最大、平均和标准差,分别是362微秒、42408微秒、557.12微秒和2113.30微秒。
延迟百分位数
clat percentiles (usec):
 |  1.00th=[  379],  5.00th=[  388], 10.00th=[  392], 20.00th=[  396],
 | 30.00th=[  404], 40.00th=[  408], 50.00th=[  412], 60.00th=[  416],
 | 70.00th=[  424], 80.00th=[  433], 90.00th=[  445], 95.00th=[  465],
 | 99.00th=[  627], 99.50th=[ 1336], 99.90th=[38011], 99.95th=[38536],
 | 99.99th=[40633]
  • 显示在不同百分位数下的完成延迟,提供了关于延迟分布的详细信息。例如,99.99%的操作的完成延迟不超过40633微秒。

7. 带宽统计

bw (  KiB/s): min=106624, max=120064, per=99.79%, avg=114069.33, stdev=4277.00, samples=18
  • 显示每秒的带宽。 - 最小带宽:106624 KiB/s- 最大带宽:120064 KiB/s- 平均带宽:114069.33 KiB/s- 标准差:4277.00 KiB/s- 样本数:18

8. IO操作统计

iops        : min= 1666, max= 1876, avg=1782.33, stdev=66.83, samples=18
  • 显示IOPS统计信息(输入/输出次数每秒): - 最小IOPS:1666- 最大IOPS:1876- 平均IOPS:1782.33- 标准差:66.83- 样本数:18

9. 延迟分布

  lat (usec)   : 500=97.80%, 750=1.43%, 1000=0.23%
  lat (msec)   : 2=0.08%, 4=0.02%, 10=0.01%, 50=0.42%
  • 延迟的分布情况: - 97.80%的延迟在500微秒以内- 1.43%的延迟在500-750微秒以内- 0.23%的延迟在750-1000微秒以内- 表示以毫秒为单位的延迟分布。

10. CPU使用情况

  cpu          : usr=1.43%, sys=5.24%, ctx=17109, majf=0, minf=9
  • CPU使用情况: - 用户空间使用率:1.43%- 内核空间使用率:5.24%- 上下文切换次数:17109- 磁盘页面交换的重大页面数:0- 磁盘页面交换的次要页面数:9

11. IO深度统计

  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
  • 统计每个IO深度级别(即可以并行处理的IO请求数)下的操作百分比,显示100%发生在IO深度为1的情况。

12. 提交与完成统计

     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%
  • 提交和完成的IO请求数的统计,也是按照IO深度级别来统计。

13. 总体运行状态

Run status group 0 (all jobs):
  WRITE: bw=112MiB/s (117MB/s), 112MiB/s-112MiB/s (117MB/s-117MB/s), io=1024MiB (1074MB), run=9173-9173msec
  • 写入速率、总IO量及运行时间等的总结。

14. 磁盘统计信息

Disk stats (read/write):
  vblkdev34: ios=0/16286, sectors=0/2084264, merge=0/2, ticks=0/8654, in_queue=8657, util=99.01%
  • vblkdev34: 表示虚拟块设备的统计信息。 - ios=0/16286:读和写的IO操作数,读取为0,写入为16286。- sectors=0/2084264:读取和写入的扇区数,读取为0,写入为2084264。- merge=0/2:合并的IO操作数。- ticks=0/8654:处理这些IO操作所消耗的系统时钟滴答数。- in_queue=8657:在IO队列中的总请求数。- util=99.01%:设备使用率,表示设备在95%时间里被繁忙占用。

总结

这段输出详细展示了

fio

工具在指定参数下的随机写性能测试结果,涵盖了IO速率、延迟、CPU使用率、IO深度等统计数据,帮助用户了解其存储设备在执行随机写操作时的性能表现。

标签: 测试工具 git github

本文转载自: https://blog.csdn.net/weixin_45705773/article/details/142551796
版权归原作者 伴生_0904 所有, 如有侵权,请联系我们删除。

“磁盘io测试工具fio”的评论:

还没有评论