FIO的使用教程
目录
一,介绍
二,基本使用
常用参数解释:
举例1:
举例2
三,测试注意
四,根据结果整理格式规范
五,测试参数详解
一,介绍
FIO是一款开源的I/O压力测试工具,主要是用来测试磁盘的IO性能。
- 可以支持多种不同的I/O引擎(同步,异步,mmap等)。
- 允许用户自定义测试参数,模拟真实的各种磁盘访问模式。
- 可以生成各种I/O负载来测试存储设备(硬盘,SSD,RAID)的性能。
- 可以模拟各种复杂的I/O场景,如顺序读写,随机读写,混合读写等。
二,基本使用
使用很灵活,可以通过命令行参数或者配置文件来定义测试参数。
常用参数解释:
举例1:
fio -filename=/dev/sdb -direct=1 -rw=write -ioengine=libaio -bs=4k -iodepth=32 -numjobs=1 -runtime=600 -group_reporting -name=4ktest
-filename 用于测试块设备,一般指定需要测试的而磁盘或者分区,如filename=/dev/sdb
-directory用于测试文件,一般指定需要测试的目录路径,如-directory=/client
-direct 使用内核缓存。用于控制测试数据是否通过内核缓存进行读写。默认值为0,用来决定是否要绕过缓存,一般设置为1(开启direct io,测试数据直接从磁盘读取或写入磁盘,绕过系统缓存)等于0的时候会使用内核缓存。
-rw 用于指定负载读写类型,一般可以设置以下几种参数
Read顺序读。 write顺序读。顺序写。 rw顺序读写。Randread随机读 randread随机写。Randrw随机读。
-rwmixread用于指定混合读写同一时刻读的占比,默认为50%读写比为1:1
-rwmixwrite用于指定混合读写同一时刻写的占比,默认为50%,即读写比为1:1
-ioengine用于指定工作负载引擎,常用引擎一般有psync(同步IO引擎)及libaio(同步IO引擎)。同步 I/O 会在发出 I/O 请求后一直等待直到 I/O 操作完成,而异步 I/O 则允许应用程序在等待 I/O 完成的同时执行其他操作。
-bs用于指定IO块大小。这个参数需要考虑存储设备本身带的cache。过大会影响吞吐量,延迟,工作负载,稳定性。
- 吞吐量:较大的块,吞吐量会变小,存储设备处理大块数据会占用更长的时间
- 延迟:较大的块,延迟会变低,小的I/O操作读取或者写入的数据量更小,操作系统和存储设备可以更快地处理这些操作,小的块大小导致更频繁的I/O操作和更高的cpu开销,影响整体性能
- 工作负载:较小的块通常适用于随机访问的工作负载,较大的块则适用于顺序访问的工作负载。
- 稳定性。如超出可能会影响测试结果,须先了解存储设备的规格和限制。
-iodepth用于指定IO深度,不同的IO深度下有不同性能值,需要合理调整验证以得出最优性能。
较大的深度可以模拟更高的并发负载。较大的深度会导致更低的平均延迟
-numjobs用于指定IO并发线程数。
-runtime用于指定负载测试时间,时间单位为s
-group_reporting用于指定测试结果显示方式。是一个布尔值,默认为false(独立报告)将所有任务的统计结果合并,生成一份汇总报告,而不是为每个任务单独生成一份报告。例如当在fio中包含多个任务(jobs)的测试时(例如通过配置文件定义了多个job段,或使用--numjobs指定了多个并行任务)
-size总数据量、块数,文件大小(创建指定大小的文件),每个作业的数据量(并发测试中),块设备的大小(测试块设备)。比如size=100k表示测试数据由100000个块组成。
举例2
fio --name=test --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting
这个命令会生成一个名为 test 的测试任务,使用 libaio 异步 I/O 引擎,I/O 深度为 32,进行随机写操作(randwrite),块大小为 4K,直接 I/O(绕过文件系统缓存),测试数据量为 1G,使用一个工作线程(numjobs=1),测试持续时间为 60 秒,并启用分组报告。
- FIO的配置文件
更复杂的测试场景,可以用配置文件来定义测试参数,通常以fio作为扩展名,可以使用任何文本编辑器来编写。
简单实例:
[global]
ioengine=libaio
iodepth=32
direct=1
group_reporting
[randwrite]
rw=randwrite
bs=4k
size=1G
numjobs=1
runtime=60
定义了一个全局的I/O引擎和I/O深度,以及一个randwrite的测试任务,其参数与前面的命令行示例相同。
三,测试注意
- 测试结果取第二次,第一次需要预热,相对来说不是很准确
- 数据安全:提前备份磁盘或者使用专门的测试设备进行测试
- 文件大小:测试文件的大小应该超过存储设备缓存大小,同时也要考虑到测试时间和存储空间的限制。
- 权限设置:确保有足够的权限
- 测试环境:确保环境稳定和可靠,关闭可能会干扰测试结果的后台进行
四,根据结果整理格式规范
根据fio的运行结果,出给一份带有文件名称 类型 读取IOPS 读取带宽(BW) 读取总量 写入IOPS 写入带宽 写入总量 平均延迟的表单结论
五,测试参数详解
fio-td fio-8gb-zvol-singlezpool /mnt/zvol io_uring 8G 32 300
第一个参数是这次标题,自定义即可
第二个是测试的文件系统位置,指定了 Fio 测试文件所在的挂载点。Fio 会在这个挂载点下创建测试文件,或者对已存在的文件进行读写操作,以此来测试对应的存储设备性能。
第三个参数 io_uring是测试引擎。高效的输入输出工具,用来提升效率。
第四个参数:代表测试数据量的大小为 8GB。Fio 会对这 8GB 的数据进行读写操作,从而评估存储设备的性能。