如何使用Fio 3.41进行高效IO性能测试?

摘要:1. 前言 fio 会生成多个线程或进程,按照用户指定的方式执行特定类型的 IO 操作。fio 接受一些全局参数,每个线程都会继承这些参数,也可以通过局部设置来覆盖全局设置。fio 的一个典型用法就是编写一个与用户想要模拟的 IO 负载
1. 前言 fio 会生成多个线程或进程,按照用户指定的方式执行特定类型的 I/O 操作。fio 接受一些全局参数,每个线程都会继承这些参数,也可以通过局部设置来覆盖全局设置。fio 的一个典型用法就是编写一个与用户想要模拟的 I/O 负载相匹配的作业文件。 2. 语法 fio [options] [jobfile] ... 常见的 2 种用法: 1. fio 命令行模式 2. fio client/server模式 fio 命令行模式意思是在命令行中直接执行测试的完整命令,不需要任何配置文件。包括纯命令行模式和配置文件模式。在配置文件模式下,配置文件中定义的所有参数都可以直接应用在命令行模式中。 fio client/server 模式是 fio 的另一种用法,需要提供 host 配置文件和 jobfile 文件,主要用于多客户并发测试场景。 3. 参数 下面以一个例子来说明 fio 用法: fio \ --name=test \ --ioengine=libaio \ --directory=/mnt/testfs \ --direct=1 \ --sync=0 \ --time_based \ --runtime=2m \ --ramp_time=10 \ --iodepth=16 \ --rw=randwrite \ --size=1G \ --bs=4k \ --thread \ --numjobs=32 \ --stonewall \ --group_reporting 上述命令是测试 4k 随机写性能,该命令将启动 32 个线程,每个线程将执行一个 job。每个 job 将在/mnt/testfs 目录下创建不同的文件,每个文件的大小为 1G。主要参数解释: name:job 的名称。 ioengine:I/O 引擎,默认为 libaio。 directory:I/O 操作的目录。如果不指定,默认是./。 filename: I/O 操作的文件名。如果不指定,fio 将会自动生成文件名,文件名的格式为:$jobname.$jobnum.$filenum。换句话说,fio 将会为每一个线程创建不同的文件。如果指定,fio 最终只会创建一个文件,所有的线程都将共享同一个文件。 direct:是否绕开缓存,默认为 0。direct=1表示绕开缓存。 sync:同步 I/O,是否在每次 I/O 操作后将缓存数据刷写到物理磁盘中,导致每次 I/O 操作必须等待刷写到磁盘中才能提交下一个请求。在异步 I/O 引擎中必须要设置 sync=0,否则会并行 I/O 变为串行 I/O。 time_based:表示以时间作为整体测试结束的判断依据。 runtime:整体测试的运行时间。 ramp_time:预热时间,如果设置了此参数,fio 将在记录任何性能数据之前运行指定的工作负载一段时间。这对于在记录结果之前让性能稳定下来很有用,从而最大限度地减少获得稳定结果所需的运行时间。 iodepth:I/O 深度,表示一次 I/O 操作可以同时进行的 I/O 数量。用于控制异步 I/O(AIO)的并发请求数量,直接影响存储系统的吞吐量(IOPS)和延迟。 rw:I/O 操作类型。除了上述 randwrite,还有 randread、read、write 等。 size:文件大小。 bs:块大小,表示每次 I/O 操作的块大小。 thread:表示将进程以线程的方式启动,而不是以进程的方式启动。 numjobs:表示启动的线程/进程数量。 stonewall:用于控制多任务(numjobs)测试时的任务同步行为,确保测试结果的公平性和一致性。当启用 stonewall 时,fio 会强制所有任务(job)同时启动,并在任何一个任务完成时终止所有其他任务。 group_reporting:表示将所有线程/进程的结果汇总。 4. 用法 4.1. 命令行模式 命令行模式可以以两种方式运行:纯命令行模式(不带 jobfile)和配置文件模式(带 jobfile)。
阅读全文