文档

测试块存储性能

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本章主要介绍如何在Linux环境下使用FIO(Flexible I/O Tester)工具对块存储设备进行性能测试。这些测试将涵盖关键的性能指标,包括每秒输入/输出操作(IOPS)、数据传输速率(吞吐量)和响应时间(时延)。通过FIO示例命令和性能测试,帮助您更好地理解存储设备的能力,并对其进行相应的优化和调整,以确保最佳性能。

说明

不同工具测试的硬盘基准性能会有差异,如ddsysbenchiometer等工具可能会受到测试参数配置和文件系统影响,难以反映真实性能。本示例的性能参数,均为Linux系统下采用FIO工具的测试结果,以此作为块存储产品性能指标参考。Linux实例和Windows实例都推荐使用FIO工具测试块存储性能。

前提条件

您已经创建了待测试的块存储,并将块存储挂载到ECS实例上。

说明

如果您只需要测试某类型的块存储性能,建议您在新建的按量付费数据盘上进行性能测试,完成测试后可以随时释放。

操作步骤

警告
  • 测试裸盘可以获得真实的块存储盘性能,但会破坏文件系统结构,请在测试前提前创建快照做好数据备份。具体操作,请参见创建一个云盘快照

  • 强烈建议您不要将操作系统所在的云盘或者含有重要数据的云盘作为测试对象。建议您只在新购买的无数据的ECS实例上使用工具测试块存储性能,避免造成数据丢失。

  1. 远程连接ECS实例。

    具体操作,请参见使用VNC登录实例

  2. 查询块存储设备是否已经4 KiB对齐。

    sudo fdisk -lu

    返回的结果中,Start值能被8整除即是4 KiB对齐。否则,请完成4 KiB对齐后再继续性能测试。

    Device     Boot Start      End  Sectors Size Id Type
    /dev/vda1  *     2048 83886046 83883999  40G 83 Linux
  3. 依次运行以下命令,安装libaio和FIO。

    sudo yum install libaio -y
    sudo yum install libaio-devel -y
    sudo yum install fio -y
  4. 运行以下命令,切换路径。

    cd /tmp
  5. 运行性能测试命令,具体的命令请参见下文。

云盘性能测试命令

说明

示例命令中的参数取值仅供参考,请您根据实际情况替换。例如,如果需要测试的云盘为/dev/vdb,则将以下示例命令中的/dev/your_device替换为/dev/vdb。更多信息,请参见FIO参数说明

  • 测试云盘的随机写IOPS:

    sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing
  • 测试云盘的随机读IOPS:

    sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing
  • 测试云盘的顺序写吞吐量:

    sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing
  • 测试云盘的顺序读吞吐量:

    sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_PPS_Testing
  • 测试云盘的随机写时延:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing
  • 测试云盘的随机读时延:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Read_Latency_Testing

关于各云盘详细的测试步骤,请参见测试ESSD云盘IOPS性能测试ESSD PL-X云盘性能

本地盘性能测试命令

以下测试命令适用于NVMe SSD本地盘和SATA HDD本地盘。

说明

示例命令中的参数取值仅供参考,请您根据实际情况替换。例如,如果需要测试的云盘为/dev/vdb,则将以下示例命令中的/dev/your_device替换为/dev/vdb。更多信息,请参见FIO参数说明

  • 测试本地盘的随机写IOPS:

    sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的随机读IOPS:

    sudo fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的顺序写吞吐量:

    sudo fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的顺序读吞吐量:

    sudo fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的随机写时延:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的随机读时延:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的顺序写时延:

    sudo fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • 测试本地盘的顺序读时延:

    sudo fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test

关于i4p实例本地盘性能的测试步骤,请参见测试i4p实例本地盘性能

FIO参数说明

测试命令中有关FIO各参数含义的说明如下表所示。

参数

说明

direct

表示是否使用direct I/O。默认值:1。

  • 值为1:表示使用direct I/O,忽略I/O缓存,数据直写。

  • 值为0:表示不使用direct I/O。

iodepth

表示测试时的IO队列深度。例如-iodepth=128表示FIO控制请求中的I/O最大个数为128。

rw

表示测试时的读写策略。您可以设置为:

  • randwrite:随机写。

  • randread:随机读。

  • read:顺序读。

  • write:顺序写。

  • randrw:混合随机读写。

ioengine

表示测试时FIO选择哪种I/O引擎,通常选择libaio,更符合日常应用模式,更多的选择请查阅FIO官方文档。

bs

表示I/O单元的块大小(block size)。默认值:4 KiB。读取和写入的值可以以read、write格式单独指定,其中任何一个都可以为空以将该值保留为其默认值。

size

表示测试文件大小。

FIO会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其他选项(例如运行时)的限制。如果未指定该参数,FIO将使用给定文件或设备的完整大小。也可以将大小作为1到100之间的百分比给出。例如指定size=20%,FIO将使用给定文件或设备完整大小的20%空间。

numjobs

表示测试的并发线程数。默认值:1。

runtime

表示测试时间,即FIO运行时长。

如果未指定该参数,则FIO会持续将上述size指定大小的文件,以每次bs值为块大小读/写完。

group_reporting

表示测试结果显示模式。

如果指定该参数,测试结果会汇总每个进程的统计信息,而不是以不同任务来统计信息。

filename

表示待测试的对象路径,路径可以是云盘设备名称或者一个文件地址。本文中的FIO测试全部是以整盘为测试对象,不含文件系统,即裸盘测试。同时为了避免误测试到其他盘导致数据被破坏,本示例地址为/dev/your_device,请您正确替换。

name

表示测试任务名称,可以随意设定。例如本示例的Rand_Write_Testing

有关各参数的更多说明,请参见FIO MAN手册

  • 本页导读 (1)
文档反馈