NAS性能测试

本文介绍如何在Linux/Windows系统中使用FIO工具对文件系统进行吞吐和IOPS的性能测试。

前提条件

您已经创建了待测试的文件系统,并将文件系统挂载到ECS实例上。具体操作,请参见快速入门

背景信息

本文示例的性能参数,均为Linux/Windows系统下采用FIO工具的测试结果,以此作为文件存储NAS产品性能指标参考。如果想达到文件存储NAS的官网性能指标 ,建议使用多台ECS进行测试。文件存储NAS的官网性能指标,请参见文件存储 NAS

注意事项

性能测试前,请注意以下事项。

  • 吞吐最大不会超过ECS内网带宽,如果内网带宽太小,则吞吐会被流量控制。

    例如,您购买的是最低容量的通用容量型NAS文件系统,其初始读带宽为150 MB/s。如果您的ECS内网带宽为100 Mbps,则吞吐最大可达12.5 MB/s,如果要测试达到150 MB/s,则需要至少12ECS进行测试。 如果您的ECS内网带宽为1 Gbps,则吞吐最大可达到125 MB/s,如果要测试达到150 MB/s,则需要至少2ECS进行测试。

  • Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。请在安装NFS客户端后,修改同时发起的NFS请求数量,提高NFS性能。具体操作,请参见如何修改同时发起的NFS请求数量?

  • Windows操作系统中,测试NFS协议NAS文件系统性能会受限于Windows NFS客户端串行执行单个文件系统的请求,请调整-numjobs参数增加FIO测试文件数量。

操作步骤

  1. 远程连接ECS实例。具体操作,请参见ECS连接方式

  2. 安装FIO测试工具。如果已安装,请跳过此步骤,直接运行性能测试命令。

    • Linux操作系统

      操作系统

      安装命令

      CentOS

      sudo yum install fio

      Redhat

      Alibaba Cloud Linux

      Ubuntu

      依次执行以下安装命令:

      1. sudo apt-get  update
      2. sudo apt-get install fio

      Debian

    • Windows操作系统

      您可以下载msi格式的安装包进行安装。FIO安装包下载地址,请参见fio官网

  3. 运行性能测试命令,具体的命令请参见下文。

Linux系统下的性能测试命令

本节以通用容量型NAS为例,在单台Linux ECS中执行以下命令测试性能。

  • 随机读IOPS:

    fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randread -bs=4K -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt

    测试结果样例:

    image.png

  • 随机写IOPS:

    fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randwrite -bs=4K -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt

    测试结果样例:

    image.png

  • 随机读吞吐:

    fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randread -bs=1M -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt

    测试结果样例:

    image.png

  • 随机写吞吐:

    fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=randwrite -bs=1M -size=1G -time_based -runtime=60 -name=Fio -directory=/mnt

    测试结果样例:

    image.png

Windows系统下的性能测试

本节以通用容量型NAS挂载到Z盘,FIO可执行文件安装在C:\Program Files\fio\fio.exe为例,执行以下命令测试性能。

说明

如果在Windows系统测试NFS协议NAS文件系统性能,受限于Windows NFS客户端串行执行单个文件系统的请求,请调整-numjobs参数增加FIO测试文件数量。

  • 随机读IOPS:

    "c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randread -bs=4K -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\

    测试结果样例:

    image.png

  • 随机写IOPS:

    "c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randwrite -bs=4K -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\

    测试结果样例:

    image.png

  • 随机读吞吐:

    "c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randread -bs=1M -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\

    测试结果样例:

    image.png

  • 随机写吞吐:

    "c:\Program Files\fio\fio.exe" -name=Fio -numjobs=2 -iodepth=128 -direct=1 -ioengine=windowsaio -sync=1 -rw=randwrite -bs=1M -size=1G -time_based -runtime=60 -group_reporting -thread -directory=Z\:\

    测试结果样例:

    image.png

FIO参数说明

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

参数

说明

direct

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

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

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

iodepth

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

rw

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

  • randwrite:随机写。

  • randread:随机读。

  • read:顺序读。

  • write:顺序写。

  • randrw:混合随机读写。

ioengine

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

bs

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

size

表示测试文件大小。

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

numjobs

表示测试的并发线程数。

runtime

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

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

group_reporting

表示测试结果显示模式。

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

directory

表示待测试的文件系统挂载路径。

name

表示测试任务名称,可以随意设定。

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

相关问题

更多有关NAS性能方面的FAQ,请参见性能说明FAQ