一、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}