本页面讨论了 Filestore 实例的性能测试。
概览
如果您使用的是 Linux,则可以使用灵活的 I/O 测试程序 (fio) 工具来对基本层级、区域级、可用区级和企业级层级实例的读取吞吐量、写入吞吐量、读取 IOPS 和写入 IOPS 进行基准化分析。
您可以使用单个客户端虚拟机测试基本实例的性能。我们不建议使用单个客户端虚拟机来测试区域实例、可用区实例或企业实例,因为横向扩缩服务层针对多个客户端虚拟机进行了性能优化,而单个客户端通常无法实现最大集群 IOPS 或吞吐量。
如需了解详情,请参阅单个和多个客户端虚拟机的性能。
前期准备
在所有客户端虚拟机上装载要测试的 Filestore 文件共享。它可以是一个或多个客户端虚拟机,具体取决于服务层级。如需详细说明和装载选项,请参阅在 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 TiB 之间的实例,我们建议每 1 TiB 使用 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创建一个
hosts.list文件,其中包含 fio 客户端虚拟机的 IP 地址或 DNS 名称: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}