探索fio参数如何选择以及全方位对比HDD和SSD性能

由于公司要部署一套Ceph环境,趁任务并不太着急,在部署之前先对HDD和SSD进行周密的测试,以便和部署之后的Ceph服务能力(RBD、CephFS、NFS的性能)进行对比。

本文的目的是解答如下几个问题:

  1. fio工具的参数到底该如何选择,比如:多长时间的runtime更经济?bs对测试结果有何影响?numjobsiodepth应该设置多少?
  2. 正儿八经了解一下HDD和SSD的性能。

本文有不少数据和图表,希望能够为有同样疑惑的朋友提供有益参考。(请阅读时注意BW的单位)

测试过程日志:https://github.com/get-set/fio-bench-disks-ceph/tree/master/disks

测试HDD性能

磁盘的配置如下:

  1. 磁盘为7200转3.5寸SAS机械硬盘;
  2. 根据部署Ceph的官方推荐配置,每块磁盘以RAID0单盘挂在RAID卡下,RAID卡为H730 mini(拥有1G缓存),具体配置:
    1. 开启预读(read-ahead);
    2. 开启写回(write-back),有电池;
    3. 关闭磁盘缓存(disk-cache)。

注:

  1. 为了加快测试速度,以下测试是在两台服务器上测试的,比如有可能随机写在第一台的/dev/sdd上测试,而随机读就是在另一台的/dev/sde上测试。但是确保针对所测试参数的同一类型的IO操作的所有参数变化都是在同一块硬盘上进行的,所以请只关注各参数内的纵向测试结果即可。
  2. RAID卡有缓存,由于是为后续部署和测试Ceph做前期测试,因此以下关于磁盘的测试结果是有RAID缓存加持的,请酌情参考

FIO参数对HDD测试的影响

1. runtime(测试时长)

一、测试目的

了解能够得到客观性能结果的最短时间,以便为后续的测试节省时间。

二、测试内容

测试4k随机读写64k顺序读写的过程中,不同的runtime所得到的测试结果,观察从多长时间开始就可以得到稳定的测试结果。

为了观察util值(磁盘利用率),将读写分别测试。

测试脚本fio.conf

[global]
ioengine=libaio      # 异步IO
direct=1             # 排除OS的IO缓存机制的影响
size=5g              # 每个fio进程/线程的最大读写
lockmem=1G           # 锁定所使用的内存大小
directory=/mnt/sdd   # XFS格式的磁盘,未直接用裸盘
iodepth=1            # 队列深度1(后续有关于参数的测试)
numjobs=1            # 同时开启的fio进程/线程数为1
rw=randread          # 每次测试修改该值:randread/read/randwrite/write
bs=4k                # 每次测试修改该值:rand对应4k,seq对应64k

[job]
runtime=10           # 本次测试runtime:10 20 30 40 50 60 90

测试命令:

mkdir -p logs/{runtime.4k_randread,runtime.4k_randwrite,runtime.64k_read,runtime.64k_write}
# 修改不同的rw和bs值,然后执行4次如下命令(注意修改tee输出的log目录)
for runtime in 10 20 30 40 50 60 90; do sed -i "/^runtime/c runtime=${runtime}" fio.conf && fio fio.conf | tee logs/runtime.4k_randread/${runtime}.log && sleep 10s; done

测试结果(IOPS和BW):

对于4k_randread64k_read64_writeIOPSBW值的观察可以基本看出,从30s之后,测试结果基本趋于稳定;而4k_randwrite看不到明显的稳定区间。

再观察磁盘利用率:

通过观察util的值,发现不同的测试方法大约都能够在30秒之后得到比较稳定的结果。对于随机读来说,似乎随着时间的延长而越来越乏力,与性能结果类似。

三、测试结论

对于随机读写和顺序读写的测试来说,runtime达到30-40秒即可得到相对客观的结果,保险起见也可以时间更长。

2. bs(块大小)

一、测试目的

观察不同的块大小对读写性能的影响。

二、测试内容

测试随机读写顺序读写的过程中,不同的bs所得到的测试结果。

为了观察util值(磁盘利用率),将读写分别测试。

测试脚本fio.conf

[global]
ioengine=libaio      # 异步IO
direct=1             # 排除OS的IO缓存机制的影响
size=5g              # 每个fio进程/线程的最大读写
lockmem=1G           # 锁定所使用的内存大小
runtime=30           # 根据上面的结论以后采用30值
directory=/mnt/sdd   # XFS格式的磁盘,未直接用裸盘
iodepth=1            # 队列深度1(后续有关于参数的测试)
numjobs=1            # 同时开启的fio进程/线程数为1
rw=randread          # 每次测试修改该值:randread/read/randwrite/write

[job]
bs=4k                # 本次测试bs:1k 2k 4k .. 64m

测试命令:

mkdir -p logs/{bs.r
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值