**
fio
**(Flexible I/O Tester)是一种用于性能测试和基准测试的工具,专门用于评估和测量存储系统(如硬盘、固态硬盘、网络存储等)在不同负载条件下的输入/输出(I/O)性能。它是一个非常灵活和强大的工具,具有以下几个主要功能和特点:
主要功能
- 多种 I/O 模式:
fio
支持多种 I/O 操作模式,包括顺序读、顺序写、随机读、随机写,以及混合读写模式。用户可以根据需求选择合适的模式进行性能测试。 - 灵活的块大小和io深度设置: 用户可以指定不同的块大小(例如 4KB、64KB、1MB 等)和 I/O 深度(即并发发出的 I/O 请求数),以模拟不同环境下的工作负载。
- 多线程和多进程支持:
fio
支持通过多线程或多进程来增加负载,从而评估存储设备在高并发情况下的性能。 - 丰富的报告功能: 测试结果以易于理解的格式输出,提供带宽(吞吐量)、IOPS(每秒输入输出次数)、延迟(响应时间)等关键指标的详细统计信息。
- 使用场景广泛: 可以用于测量服务器、数据库、云存储、虚拟化环境,以及任何涉及存储设备的应用。
- 可编程性和自动化: 测试任务可以通过配置文件进行定义,支持自动化测试,以满足多种测试需求。
使用场景
- 性能基准测试:评估新硬件或存储设备的性能。
- 性能分析:了解在特定条件下存储系统的表现。
- 容量规划:帮助确定系统满足未来工作负载需求的能力。
- 故障排查:识别和解决存储系统性能瓶颈。
测试
./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深度等统计数据,帮助用户了解其存储设备在执行随机写操作时的性能表现。
版权归原作者 伴生_0904 所有, 如有侵权,请联系我们删除。