一、fio介绍
github : https://github.com/axboe/fio
- fio(Flexible I/O Tester)是一个用于测试存储系统性能的强大工具,它可以模拟多种不同类型的I/O负载,并生成测试结果。
- 当你运行fio时,它会生成一个用于测试I/O性能的工作负载,并将测试结果输出到指定的文件中。通常情况下,生成的文件内容包括:
- 配置信息:fio生成文件会包含用于运行测试的配置信息,包括测试使用的参数、I/O负载类型、线程数、块大小等设置。
- 测试结果:fio会执行所配置的测试,并测量I/O性能。测试结果通常包括各种指标,如吞吐量(Throughput)、IOPS(每秒I/O操作数)、带宽(Bandwidth)等,用于衡量存储系统的性能表现。
- 日志信息:fio会输出一些运行时的日志信息,包括测试的进度、警告或错误信息等。
- 需要注意的是,fio的具体输出内容和格式可以根据配置选项进行调整,例如可以选择输出更详细的结果或者只输出特定的性能指标。
二、fio使用示例
- test.fio 文件配置详解
[global]
ioengine=libaio
direct=1
size=1G
runtime=10s
[job1]
rw=randread
numjobs=4
[global]
部分是全局配置段,其中定义的选项将应用于整个测试。在这里,我们设置了以下选项:ioengine=libaio
:指定 I/O 引擎为 libaio,它是一个异步 I/O 引擎,可以用于高性能 I/O 操作。direct=1
:启用直接 I/O,表示 I/O 操作不使用内核缓冲区(buffer),直接将数据传输到磁盘。size=1G
:定义每个作业(job)的测试文件大小为 1GB。在并发测试中,每个作业将读取或写入指定大小的数据。runtime=10s
:设置测试运行时间为 10 秒,即每个作业将在 10 秒内执行读取或写入操作。
[job1]
部分是第一个作业的配置段。在 Fio 中,一个测试可以包含多个作业,每个作业代表一个并发执行的操作。在这里,我们定义了一个名为 “job1” 的作业,其中包含以下选项:rw=randread
:指定作业的读写模式为随机读取(random read),即作业将随机读取测试文件中的数据。其他可能的值包括 randwrite(随机写入)、randrw(随机读写)、write(顺序写入)等。
-numjobs=4
:指定在作业 “job1” 中并发执行的作业数量为 4。这意味着在测试运行期间,将同时执行 4 个随机读取作业。
- 注意:test.fio 文件中只定义了一个作业 “job1”,在实际测试中,您可以定义多个作业,使用不同的读写模式和并发数量来模拟不同的场景和工作负载。
- 测试性能命令
fio test.fio
- 测试结果
...
Run status group 0 (all jobs):
READ: bw=21.1MiB/s (22.1MB/s), 2150KiB/s-2176KiB/s (2201kB/s-2229kB/s), io=422MiB (443MB), run=20001-20003msec
运行状态组0(所有任务):
读取(READ):带宽=21.1MiB/s(22.1MB/s),IO速率范围为2150KiB/s-2176KiB/s(2201kB/s-2229kB/s),总计IO大小=422MiB(443MB),运行时间=20001-20003毫秒
解读:
带宽(bw)表示数据在存储设备和主机之间的传输速度,平均带宽为21.1MiB/s(22.1MB/s)。
IO速率范围(io)显示了IO操作的范围,最小值为2150KiB/s(2201kB/s),最大值为2176KiB/s(2229kB/s)。
总计IO大小(io)为422MiB(443MB),表示测试任务总共读取了422MiB的数据。
运行时间(run)显示了任务的运行时间范围,从20001毫秒到20003毫秒。
这个测试结果表明,在该次测试中,平均读取带宽约为21.1MiB/s(22.1MB/s),IO操作的速率在2150KiB/s到2176KiB/s之间变化,任务总共读取了422MiB的数据,运行时间在20001毫秒到20003毫秒之间