一、fio 版本

3.13

二、fio 参数

Fio 有很多参数可以影响测试结果,在以下测试中我们遵循的原则是:尽量采用各项参数的默认值,不针对系统、硬件等进行调优,以此提供一个性能参考。下面是使用到的参数列表:

参数 说明
--name 测试任务名称。
--directory 测试数据读写路径,即磁盘挂载路径,如果是数据卷,则为对应的数据卷挂载路径,以下测试以 /data 举例。
--rw 读写模式,以下测试会涉及 read(顺序读),write(顺序写)。
--bs 每次读写的块数据大小。
--size 这次测试任务的总文件大小。
--filesize 测试任务中生成的单个文件大小,在小文件顺序读写测试中用到。
--numjobs 并发任务数,fio 默认使用多进程(process)方式。
--nrfiles 在每个任务中生成的文件数量。
--refill_buffers 默认情况下,fio 会在测试任务开始时创建用于生成测试文件的数据片段,并一直重用这些数据。使用这个参数后,会在每次 I/O 提交后重新生成数据,保证生成测试文件内容有充分的随机性。
--file_service_type 用来定义测试任务中的文件选取方式,有 random, roundrobin, sequential 三种。在小文件顺序读写测试中使用了这个参数来保证 fio 是一个接一个的读写文件,没有并行的文件操作。

三、大文件读写测试

3.1 大文件顺序读

fio --name=big-file-sequential-read \
    --directory=/data \
    --rw=read --refill_buffers \
    --bs=256k --size=4G

3.2 大文件顺序写

fio --name=big-file-sequential-write \
    --directory=/data \
    --rw=write --refill_buffers \
    --bs=256k --size=4G

3.3 大文件并发读

fio --name=big-file-multi-read \
--directory=/data \
--rw=read --refill_buffers \
--bs=256k --size=4G \
--numjobs={1, 2, 4, 8, 16}

3.4 大文件并发写

fio --name=big-file-multi-write \
    --directory=/data \
    --rw=write --refill_buffers \
    --bs=256k --size=4G  \
    --numjobs={1, 2, 4, 8, 16}

3.5 大文件随机读

fio --name=big-file-rand-read \
    --directory=/data \
    --rw=randread --refill_buffers \
    --size=4G --filename=randread.bin \
    --bs={4k, 16k, 64k, 256k} --pre_read=1

sync && echo 3 > /proc/sys/vm/drop_caches

fio --name=big-file-rand-read \
    --directory=/data \
    --rw=randread --refill_buffers \
    --size=4G --filename=randread.bin \
    --bs={4k, 16k, 64k, 256k}

3.6 大文件随机写

fio --name=big-file-random-write \
    --directory=/data \
    --rw=randwrite --refill_buffers \
    --size=4G --bs={4k, 16k, 64k, 256k}

四、小文件读写测试

我们的小文件一般在 0.8MB - 3.6MB 左右,测试时按这个来测试

4.1 小文件读

fio --name=small-file-seq-read \
    --directory=/data \
    --rw=read --file_service_type=sequential \
    --bs={4k, 16k, 64k, 256k} --filesize={file_size} --nrfiles=1000

4.2 小文件写

fio --name=small-file-seq-write \
    --directory=/data \
    --rw=write --file_service_type=sequential \
    --bs=4k --filesize={820k,3690k} --nrfiles=1000

###########################################################
fio --name=small-file-seq-write \
    --directory=/data \
    --rw=write --file_service_type=sequential \
    --bs=4k --filesize=1024k --nrfiles=1000

###########################################################
fio --name=small-file-seq-write \
    --directory=/data \
    --rw=write --file_service_type=sequential \
    --bs=4k --filesize=4096k --nrfiles=1000

small-file-seq-write: Laying out IO files (1000 files / total 4000MiB)
Jobs: 1 (f=1): [W(1)][100.0%][w=58.9MiB/s][w=15.1k IOPS][eta 00m:00s]

4.3 小文件并发读

fio --name=small-file-multi-read \
    --directory=/data \
    --rw=read --file_service_type=sequential \
    --bs=4k --filesize=4k --nrfiles=1000 \
    --numjobs={1, 2, 4, 8, 16}

4.4 小文件并发写

fio --name=small-file-multi-write \
    --directory=/data \
    --rw=write --file_service_type=sequential \
    --bs=4k --filesize=4k --nrfiles=1000 \
    --numjobs={1, 2, 4, 8, 16}