本页介绍了 Filestore 实例的性能测试。
概览
如果您使用的是 Linux,则可以使用灵活 IO 测试工具 (fio) 对基本层级、区域级、可用区级和企业级层级实例的读取吞吐量、写入吞吐量、读取 IOPS 和写入 IOPS 进行基准化分析。
您可以使用单个客户端虚拟机来测试基本实例的性能。我们不建议使用单个客户端虚拟机来测试区域级、可用区级或企业级实例,因为可伸缩服务层级针对多个客户端虚拟机进行了性能优化,而单个客户端通常无法达到集群 IOPS 或吞吐量的上限。
如需了解详情,请参阅单个客户端虚拟机性能和多个客户端虚拟机性能。
前期准备
在所有客户端虚拟机上装载要测试的 Filestore 文件共享。它可以是 1 个或多个客户端虚拟机,具体取决于服务层级。如需了解详细说明和装载选项,请参阅在 Compute Engine 客户端上装载文件共享。
请务必指定 nconnect
装载选项,以提高 NFS 性能。对于特定服务层级,我们建议指定客户端和服务器之间的连接数量如下:
层级 | 容量 | 连接数 |
---|---|---|
区域、可用区 | 1-9.75 TiB | nconnect=2 |
区域、可用区 | 10-100 TiB | nconnect=7 |
企业 | - | nconnect=2 |
大规模 SSD | - | nconnect=7 |
您可以通过调整 read_ahead_kb
参数值来优化 NFS 读取吞吐量。如需了解详情,请参阅使用 read_ahead_kb
参数优化 NFS 读取吞吐量。
使用单个客户端虚拟机测试性能
使用以下场景对基本实例执行测试。您可以直接从命令行运行这些命令。
小于 1 TiB 的基本实例的最大写入吞吐量:
fio --ioengine=libaio --filesize=4G --ramp_time=2s --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 --group_reporting --directory=/mnt/nfs --name=write --blocksize=1m --iodepth=64 --readwrite=write
最大读取吞吐量:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=read --blocksize=1m --iodepth=64 --readwrite=read
最大写入吞吐量:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=write --blocksize=1m --iodepth=64 --readwrite=write
最大读取 IOPS:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=randread --blocksize=4k --iodepth=256 --readwrite=randread
最大写入 IOPS:
fio --ioengine=libaio --filesize=32G --ramp_time=2s \ --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \ --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \ --name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite
使用多个客户端虚拟机测试性能
如需为可用区实例、区域实例和企业实例实现最高性能,请使用多个客户端虚拟机。
对于 1 到 9.75 TB 的实例,我们建议每 1 TB 使用 8 个客户端虚拟机。对于大小介于 10 到 100 TiB 之间的实例,请按 10 TiB 使用 8 个客户端虚拟机。
在所有客户端虚拟机上启动 fio 服务器。Fio 使用端口
8765
进行通信,因此您必须在防火墙政策中打开此端口。fio --server
选择一个将负责协调 fio 运行的客户端虚拟机。在该客户端虚拟机上创建 fio 作业文件:
cat << EOL > /tmp/fio_job.conf [global] ioengine=libaio ramp_time=2s runtime=3m time_based direct=1 verify=0 randrepeat=0 group_reporting buffer_compress_percentage=50 directory=\${TMP_DIR} create_only=\${CREATE_ONLY} [read-throughput] blocksize=1048576 numjobs=8 readwrite=read filesize=100M [write-throughput] blocksize=1048576 numjobs=8 readwrite=write filesize=100M [read-iops] blocksize=4k iodepth=64 readwrite=randread filesize=1GB [write-iops] blocksize=4k iodepth=64 readwrite=randwrite filesize=1GB EOL
创建一个包含 fio 客户端虚拟机的 IP 地址或 DNS 名称的
hosts.list
文件:cat << EOL > /tmp/hosts.list <Client 1 IP/DNS> <Client 2 IP/DNS> ... <Client N IP/DNS> EOL
在创建作业文件的客户端虚拟机上的临时目录中创建以下数据集:
export TMP_DIR=$(mktemp -d MOUNT_POINT_DIRECTORY/XXXXX) chmod 777 ${TMP_DIR} export CREATE_ONLY=1 fio --client=/tmp/hosts.list \ --section=read-throughput --section=read-iops /tmp/fio_job.conf
使用您为作业文件创建的客户端虚拟机运行基准测试:
- 最大读取吞吐量
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=read-throughput /tmp/fio_job.conf
- 最大写入吞吐量
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=write-throughput /tmp/fio_job.conf
- 最大读取 IOPS
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=read-iops /tmp/fio_job.conf
- 最大写入 IOPS
export CREATE_ONLY=0 fio --client=/tmp/hosts.list --section=write-iops /tmp/fio_job.conf
测试完成后,停止所有客户端虚拟机上的 fio 服务器,并删除其临时目录:
rm -rf ${TMP_DIR}