云服务器

高效的磁盘测试工具-fio

2020-04-17 17:37:15 114

上一次我们聊到磁盘测试的工具iozone,它是一个文件系统基准测试工具,但对于云服务器的磁盘性能测试,测裸设备是个更能反映性能的方法,iozone是不支持的。而且iozone的测试结果中只有吞吐量,无IOPS和延迟的数据,不分析各种情况下的表现。

今天我们学习的是一个支持裸设备测试的工具fio,fio同时支持多种不同的I/O引擎,包括sync,mmap, libaio, posixaio, SG v3, splice, network, syslet, guasi, solarisaio 等等,强大的功能让它成为众多云厂商对磁盘测试的一个标准工具。因为多数云商都采用fio对磁盘做测试,所以我们选择fio测试磁盘的结果,更具有可比性。

fio是个命令行工具,可选参数较多,如果觉得在一条命令行中写太多参数,观察不直观,也可以通过写配置文件的方式执行多个fio测试,对参数管理更方便。

fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/dev/sdb --runtime=300 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g

 

 

fio支持的读写模式包括顺序读,随机读,顺序写,随机写,混合随机读写,混合顺序读写。常用参数包括引擎,队列深度,线程,block,是否裸设备,读写方式,大小/耗时,跳过缓存等。

 

以下是对这些参数的简单介绍:
filename: 指定文件 (设备) 的名称。可以通过冒号分割同时指定多个文件,如 filename=/dev/sda:/dev/sdb。
directory: 设置 filename 的路径前缀。在后面的基准测试中,采用这种方式来指定设备。
name: 指定 job 的名字,在命令行中表示新启动一个 job。
direct: bool 类型,如果设置成 true (1),表示不使用 io buffer。
ioengine: I/O 引擎,现在 fio 支持 19 种 ioengine。默认值是 sync 同步阻塞 I/O,libaio 是 Linux 的 native 异步 I/O。
iodepth: 如果 ioengine 采用异步方式,该参数表示一批提交保持的 io 单元数。
rw: I/O 模式,随机读写,顺序读写等等。
bs: I/O block 大小,默认是 4k。
size: 指定 job 处理的文件的大小。
numjobs: 指定 job 的克隆数(线程)。
time_based: 如果在 runtime 指定的时间还没到时文件就被读写完成,将继续重复知道 runtime 时间结束。
runtime: 指定在多少秒后停止进程。如果未指定该参数,fio 将执行至指定的文件读写完全完成。
group_reporting: 当同时指定了 numjobs 了时,输出结果按组显示。

 

以上的命令行由于参数过多,写出来很长,确实不太直观。所以我们可以创建一个配置文件,把全局变量和测试变化的参数写在不同的块里,最后运行即可。如下创建文件fio.conf。

[global]
ioengine=libaio
direct=1
thread=1
time_based
numjobs=1
group_reporting
iodepth=128
filename=/dev/vdb
runtime=300
size=50g

[4k-randwrite] bs=4k rw=randwrite stonewall

[8k-randwrite] bs=8k rw=randwrite stonewall

 

注意,如果[4k-randwrite]和[8k-randwrite]两个测试如果需要串行的方式执行,需要在各自的块下面加上stonewall。

最后命令行运行fio fio.conf即执行测试。

测试结果的数据较多,主要观察吞吐量和IOPS两个。当然延迟也需要进行观察。

 

fio对于测试云服务器的磁盘性能提供了很好的支持,顺序读写和随机读写的性能数据适用于用户不同应用场景下的参考,如大文件拷贝和数据库或软件的运行。接下来就是给你服务器的磁盘做下体检了,看下是否能达到应用的需求。

睿江云官网链接:www.eflycloud.com

上一篇: 无

微信关注

获取更多技术咨询