fio测试硬盘io
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

fio测试硬盘io

yuc
yuc
2023-08-24 / 最后修改: 2024-04-15 07:22 / 0 评论 / 9 阅读 / 正在检测是否收录...
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,一般这两个参数的大小会最大影响测试结果:

  1. 其中 numjobs 是启动的任务,相当于多少个进程进行测试,一般来说不超过cpu核心数即可
  2. iodepth测试io的队列深度,一般来说机械硬盘取1或2,ssd 等可以使用 8 ~ 64

所以最大的 io 队列深度其实是 numjobs x iodepth , 所以有可能出现如下情况

  1. numjobs 设置为 cpu 核心数、 iodepth 设置 1 or 2,结果不好,iodepth需要设置更大
  2. numjobs 设置为 cpu 核心数, iodepth 设置 1 or 2,测试结果正常,符合iops上限
  3. 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自带的工具测试

0

评论

博主关闭了当前页面的评论