fio使用方法
很多年前我们使用 hdparm 或者 dd 测试磁盘的 io,但是跟随着系统技术和磁盘技术的发展,这些老工具已不再测试准备,或者要增加一些特别的参数,比较麻烦,所以可以选择 fio 来测试硬盘性能
顺序读
fio -filename=/opt/test -iodepth=64 -ioengine=psync -direct=1 -rw=read -bs=4k -size=8g -numjobs=64 -runtime=60 -group_reporting -name=test-read
顺序写
fio -filename=/opt/test -iodepth=64 -ioengine=psync -direct=1 -rw=write -bs=4k -size=8g -numjobs=64 -runtime=60 -group_reporting -name=test-write
随机读
fio -filename=/opt/test -iodepth=64 -ioengine=psync -direct=1 -rw=randread -bs=4k -size=8G -numjobs=64 -runtime=60 -group_reporting -name=test-rand-read
随机写
fio -filename=/opt/test -iodepth=64 -ioengine=psync -direct=1 -rw=randwrite -bs=4k -size=8G -numjobs=64 -runtime=60 -group_reporting -name=test-rand-write
20240415
fio 使用的引擎的话 psync 和 libaio 都是可以的,但是推荐使用 libaio。再就是 io 测试一般指标分为两个,一个是 iops ,一个是 吞吐量
- 其中 4k 随机读、4k 随机写,适用于 iops 测试
- 大块如,64k,256k,512k 等适用于吞吐量测试
最后关于参数,numjobs、iodepth,一般这两个参数的大小会最大影响测试结果:
- 其中 numjobs 是启动的任务,相当于多少个进程进行测试,一般来说不超过cpu核心数即可
- iodepth测试io的队列深度,一般来说机械硬盘取1或2,ssd 等可以使用 8 ~ 64
所以最大的 io 队列深度其实是 numjobs x iodepth , 所以有可能出现如下情况
- numjobs 设置为 cpu 核心数、 iodepth 设置 1 or 2,结果不好,iodepth需要设置更大
- numjobs 设置为 cpu 核心数, iodepth 设置 1 or 2,测试结果正常,符合iops上限
- numjobs 设置为 个位数,iodepth 设置为 32 ~ 64,测试结果正常,符合 iops 上限
以上这些情况都是有可能发生的,所以实际情况下,我们需要根据推荐来进行测试,或者觉得不符合当前磁盘性能的时候进行多次参数的变更测试
以下是针对阿里云 100k iops 的测试:
1. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --runtime=30s --numjobs=1 --time_based --group_reporting --name=iops-test-job --eta-newline=1
2. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --runtime=30s --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
3. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=1 --runtime=30s --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
4. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=1 --runtime=30s --numjobs=1 --time_based --group_reporting --name=iops-test-job --eta-newline=1
5. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=1 --runtime=30s --numjobs=32 --time_based --group_reporting --name=iops-test-job --eta-newline=1
6. fio --filename=/tmp/test/test.test -size=30G --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=32 --runtime=30s --numjobs=32 --time_based --group_reporting --name=iops-test-job --eta-newline=1
其中 3、4 测试结果不能达到满速,甚至是非常低,只有几k左右
其他方案
我们也可以选择使用vertica自带的工具测试
评论