本文介绍如何在Linux实例中使用FIO工具测试本地盘存储性能,包括IO延迟、IOPS和吞吐量。
推荐使用FIO工具测试本地盘性能,FIO是一个对硬件进行压力测试和验证的I/O工具,是一款Linux平台上较为推荐的本地盘性能测试工具。
FIO分为两种运行方式,本文中测试示例均使用fio jobfile方式,即通过一个job文件来描述待访真的IO负载,一个job文件可以控制产生任意数目的线程和文件,典型的job文件包含一个global段(定义共享参数)和一个或多少job段(描述具体要产生的job)。
您已经创建了待测试的本地盘实例。本地盘相关介绍及其标准性能数据请参见本地盘,如何创建实例请参见通过向导购买实例。
注意
建议您只在新购买的无数据的ECS实例上使用工具测试本地盘性能,避免造成数据丢失。
从FIO官网下载安装包并传输到实例。数据上传操作请参见本地数据上传。
tar -zxvf fio-*.tar.gz
cd fio-* ./configure make make install
sudo yum -y install libaio sudo yum -y install libaio-devel
执行以下命令查看存储设备是否已经4KiB对齐。如果不是4KiB对齐,则对性能影响较大。fdisk -lu
如果返回的Start值能够被8整除则表示4KiB对齐。
执行以下命令,切换路径。cd /tmp
运行本地盘性能测试命令,命令示例请参见测试命令示例。
若压测时出现NMI watchdog: BUG: soft lockup - xxx
错误,可根据在Linux操作系统中调整use_threaded_interrupts参数指引,开启中断线程化提高实时性能和响应性。
以下测试命令适用于NVMe SSD本地盘和SATA HDD本地盘。
说明
随机读
fio --group_reporting=1 --direct=1 --iodepth=32 --rw=randread --ioengine=libaio --bs=4k --size=100% --numjobs=8 --runtime=600 --filename=/dev/your_device --name=test
随机写
fio --group_reporting=1 --direct=1 --iodepth=32 --rw=randwrite --ioengine=libaio --bs=4k --size=100% --numjobs=8 --runtime=600 --filename=/dev/your_device --name=test
顺序读
fio --group_reporting=1 --direct=1 --iodepth=128 --rw=read --ioengine=libaio --bs=128k --size=100% --numjobs=1 --runtime=600 --filename=/dev/your_device --name=test
顺序写
fio --group_reporting=1 --direct=1 --iodepth=128 --rw=write --ioengine=libaio --bs=128k --size=100% --numjobs=1 --runtime=600 --filename=/dev/your_device --name=test
随机读
fio --group_reporting=1 --direct=1 --iodepth=1 --rw=randread --ioengine=libaio --bs=4k --size=100% --numjobs=1 --runtime=600 --filename=/dev/your_device --name=test
随机写
fio --group_reporting=1 --direct=1 --iodepth=1 --rw=randwrite --ioengine=libaio --bs=4k --size=100% --numjobs=1 --runtime=600 --filename=/dev/your_device --name=test
参数 | 说明 |
---|---|
group_reporting | 测试结果显示模式。 |
direct | 是否使用direct I/O,取值:
|
iodepth | 测试时的IO队列深度,例如-iodepth=128 表示FIO控制请求中的I/O最大个数为128。 |
rw | 测试时的读写策略,取值:
|
ioengine | 测试时FIO选择哪种I/O引擎。通常选择libaio,更符合日常应用模式。 |
bs | I/O单元的块大小(block size),默认值:4 KiB。 读取和写入的值可以以read、write格式单独指定,其中任何一个都可以为空以将该值保留为其默认值。 |
size | 测试文件的大小。FIO会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其它选项(例如运行时)的限制。 |
numjobs | 测试的并发线程数,默认值:1。 |
runtime | 测试时间,即FIO运行时长。 |
filename | 待测试的对象路径,路径可以是存储设备名称或者一个文件地址。本文中的FIO测试全部是以整盘为测试对象,不含文件系统,即裸盘测试。同时为了避免误测试到其他盘导致数据被破坏,本示例地址为/dev/your_device ,请您正确替换。 |
name | 测试任务名称,可以随意设定,例如本示例的test 。 |
有关各参数的更多说明,请参见FIO文档。