本文介绍如何在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。