实践概述
天翼云提供的云硬盘根据磁盘类型的不同拥有不同的性能和价格,详细信息请参见磁盘类型及性能介绍。
FIO 是对磁盘性能进行压力测试和验证的常用工具,本实践将使用FIO工具,介绍云硬盘性能测试的方法。
操作前准备
本节主要介绍在进行具体操作之前用户需要做的准备工作,包括测试前检查、工具安装和FIO参数介绍。
测试前检查
进行测试前,请首先完成云硬盘的挂载和初始化,操作请参考挂载云硬盘和初始化云硬盘。
注意
测试磁盘性能时,建议直接测试裸数据盘(如 /dev/vdb),但有可能会破坏磁盘上的文件系统结构,请在测试前提前做好数据备份。
强烈建议您不要将系统盘或者含有重要数据的数据盘作为测试对象。建议您在空白的数据盘上测试性能,避免造成数据丢失。
登录到测试云主机,执行以下命令,查询待测试的磁盘分区是否已经4KiB对齐。
sudo fdisk -lu
若返回结果中待测试磁盘的Start值能被8整除即是4KiB对齐。下图中的回显表示该磁盘分区已4KiB对齐。
如Start值不能被8整除,则表示未4KiB对齐,那么请删除原有分区后再继续测试,重新按照4KiB对齐选择初始磁柱编号。
工具安装
依次执行以下命令,安装libaio和测试工具FIO。
sudo yum install libaio -y
sudo yum install libaio-devel -y
sudo yum install fio –y
FIO工具参数介绍
不同场景的测试公式基本一致,根据不同的测试目标,部分参数会有所不同,如下表所示。
参数 说明 direct 指定 direct 模式,默认值为1。
值为1:表示使用direct I/O,忽略I/O缓存,数据直写。
值为0:表示不使用direct I/O。
numjobs 并发线程数,默认为1。
当被测试磁盘性能较高时推荐加大numjobs数以增加压力。
iodepth 测试时的IO队列深度。
队列深度是指每个线程的队列深度,如果有多个线程测试,意味着每个线程都是此处定义的队列深度。FIO总的IO并发数=iodepth * numjobs。
rw 测试时的读写策略。可选值如下:
randwrite:随机写
randread:随机读
read:顺序读
write:顺序写
randrw:混合随机读写
ioengine 测试时FIO选择哪种I/O引擎,本实践中选择libaio。 bs 每次请求的块大小(block size)。默认值为4k。 size 测试文件大小。取值如下:
带单位的数字,比如size=10G,表示读/写的数据量为10GiB。
百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。
runtime 测试时间,即FIO运行时长。
如果未配置该参数,则持续将size指定的文件大小,以每次bs值为分块大小读/写完。
time_based 采用的时间模式。
无需设置该参数值,只要 FIO 基于时间来运行。
group_reporting 多个 job 并发时,打印整个 group 的统计值。 filename 测试对象,可以是磁盘设备名称(如/dev/vdb),或文件地址(如/opt/fiotest/fiotest.txt)。
name 本次测试任务的名称。
操作步骤
以下为常见的云硬盘性能测试命令:
说明以下命令中,filename参数指定的设备名为/dev/test_device,请您根据实际情况替换为磁盘设备名称(如/dev/vdb),或文件地址(如/opt/fiotest/fiotest.txt)。
- 测试云硬盘的随机写IOPS:
fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=1000 -group_reporting -filename=/dev/test_device -name=RandWrite_Testing
- 测试云硬盘的随机读IOPS:
fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=4 -runtime=1000 -group_reporting -filename=/dev/test_device -name=RandRead_Testing
- 测试云硬盘的顺序写吞吐量:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/test_device -name=Write_Testing
- 测试云硬盘的顺序读吞吐量:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/test_device -name=Read_Testing
- 测试云硬盘的随机写时延:
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/test_device -name=RandWrite_Latency_Testing
- 测试云硬盘的随机读时延:
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/test_device -name=RandRead_Latency_Testing