本文介绍如何在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,则需要至少12台ECS进行测试。 如果您的ECS内网带宽为1 Gbps,则吞吐最大可达到125 MB/s,如果要测试达到150 MB/s,则需要至少2台ECS进行测试。 
- 在Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。请在安装NFS客户端后,修改同时发起的NFS请求数量,提高NFS性能。具体操作,请参见如何修改同时发起的NFS请求数量?。 
- 在Windows操作系统中,测试NFS协议NAS文件系统性能会受限于Windows NFS客户端串行执行单个文件系统的请求,请调整 - -numjobs参数增加FIO测试文件数量。
操作步骤
- 远程连接ECS实例。具体操作,请参见ECS连接方式。 
- 安装FIO测试工具。如果已安装,请跳过此步骤,直接运行性能测试命令。 - Linux操作系统 - 操作系统 - 安装命令 - CentOS - sudo yum install fio- Redhat - Alibaba Cloud Linux - Ubuntu - 依次执行以下安装命令: - sudo apt-get update
- sudo apt-get install fio
 - Debian 
- Windows操作系统 - 您可以下载msi格式的安装包进行安装。FIO安装包下载地址,请参见fio官网。 
 
- 运行性能测试命令,具体的命令请参见下文。 - 关于在Linux系统下的测试命令,请参见Linux系统下的性能测试命令。 
- 关于在Windows系统下的测试命令,请参见Windows系统下的性能测试。 
 
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- 测试结果样例:  
- 随机写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- 测试结果样例:  
- 随机读吞吐: - 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- 测试结果样例:  
- 随机写吞吐: - 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- 测试结果样例:  
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\:\- 测试结果样例:  
- 随机写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\:\- 测试结果样例:  
- 随机读吞吐: - "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\:\- 测试结果样例:  
- 随机写吞吐: - "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\:\- 测试结果样例:  
FIO参数说明
测试命令中有关FIO各参数含义的说明如下表所示。
| 参数 | 说明 | 
| direct | 表示是否使用direct I/O。默认值:1。 
 | 
| iodepth | 表示测试时的IO队列深度。例如 | 
| rw | 表示测试时的读写策略。您可以设置为: 
 | 
| ioengine | 表示测试时FIO选择哪种I/O引擎,通常选择libaio,更符合日常应用模式,更多的选择请查阅FIO官方文档。 | 
| bs | 表示I/O单元的块大小(block size)。读取和写入的值可以以read、write格式单独指定,其中任何一个都可以为空以将该值保留为其默认值。 | 
| size | 表示测试文件大小。 FIO会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其他选项(例如运行时)的限制。如果未指定该参数,FIO将使用给定文件或设备的完整大小。也可以将大小作为1到100之间的百分比给出。例如指定size=20%,FIO将使用给定文件或设备完整大小的20%空间。 | 
| numjobs | 表示测试的并发线程数。 | 
| runtime | 表示测试时间,即FIO运行时长。 如果未指定该参数,则FIO会持续将上述size指定大小的文件,以每次bs值为块大小读/写完。 | 
| group_reporting | 表示测试结果显示模式。 如果指定该参数,测试结果会汇总每个进程的统计信息,而不是以不同任务来统计信息。 | 
| directory | 表示待测试的文件系统挂载路径。 | 
| name | 表示测试任务名称,可以随意设定。 | 
有关各参数的更多说明,请参见FIO MAN手册。
相关问题
更多有关NAS性能方面的FAQ,请参见性能说明FAQ。