性能

本页面介绍 Filestore 的预期平均性能和推荐的性能设置。此外还介绍了如何测试 Filestore 实例的性能。

预期性能

每个 Filestore 服务层级都提供不同级别的性能。基本层级提供超过 10 TiB 实例容量的稳定性能。对于 Enterprise 层级和大规模层级实例,性能会随着容量的增加或减少而线性增加或减少。

因各种因素(例如使用缓存、客户端虚拟机的机器类型以及测试的工作负载),任何给定实例的性能都可能与报告的数字不同。

下表显示了基于 Filestore 实例的服务层级和配置容量的预期性能:

性能 容量(TiB 读/写 IOPS 读/写 Tput (MiB/s)
BASIC_HDD 1–10 600/1,000 100/100
BASIC_HDD 10–63.9 1,000/5,000 180/120
BASIC_SSD 2.5–63.9 60,000/25,000 1,200/350
HIGH_SCALE_SSD 10 90,000/26,000 2,600/880
HIGH_SCALE_SSD 100 920,000/260,000 26000/8800
ENTERPRISE 1 12000/4000 120/100
ENTERPRISE 10 120000/40000 1200/1000

Enterprise 和大规模 SSD 层级性能扩缩

Enterprise 层级和大规模层级实例的性能分别按 1 TiB 和 2.5 TiB 的幅度随着分配的容量线性扩缩。下表显示了每使用 2.5 TiB 容量可获得的性能。

大规模

指定 最大持续 IOPS 1 最大持续 Tput2 (MiB/s)
2.5TiB 读取 23,000 650
2.5TiB 写入 6,500 220

Enterprise

指定 最大持续 IOPS[^1] 最大持续 Tput[^2] (MiB/s)
1TiB 读取 12000 120
1TiB 写入 4000 100

在使用一个客户端和使用少量客户端的场景中,您必须使用 nconnect 装载选项增加 TCP 连接数量才能达到最佳 NFS 性能。对于大规模层级,建议最多指定 7 个连接;对于 Enterprise 层级,建议最多指定 2 个连接。一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。

推荐的客户端机器类型

我们建议使用 Compute Engine 机器类型(例如 n2-standard-8),其出站流量带宽为 16 Gbps。此出站带宽允许客户端为容易缓存的工作负载实现大约 16 Gbps 的读取带宽。如需获得其他背景信息,请参阅网络带宽

Linux 客户端装载选项

建议使用以下 NFS 装载选项,尤其是使用 hard 装载,async,并将 rsizewsize 选项设置为 1 MiB,以便在 Linux 客户端虚拟机实例上实现最佳性能。要详细了解 NFS 装载选项,请参阅 nfs

默认选项 说明
hard NFS 客户端无限期地重试 NFS 请求。
timeo=600 NFS 客户端会等待 600 分秒(60 秒)后再重试 NFS 请求。
retrans=3 NFS 客户端会尝试 NFS 请求三次,再执行进一步的恢复操作。
rsize=1048576 对于每个 READ 请求,NFS 客户端最多可以从 NFS 服务器接收 1048576 个字节 (1 MiB)。
wsize=1048576 对于每个 WRITE 请求,NFS 客户端最多可以从 NFS 服务器接收 1048576 个字节 (1 MiB)。
resvport 与 NFS 服务器就此装载装点进行通信时,NFS 客户端会使用特权源端口。
async NFS 客户端延迟向 NFS 服务器发送应用程序写入,直到满足某些条件。
注意:使用 sync 选项会大大降低性能。

测试性能

如果您使用的是 Linux,则可以使用 fio 工具来对基本层级实例针对读写吞吐量和 IOPS 进行基准化分析。本部分中的示例显示了您可能想要运行的常用基准化分析。为实现最高性能,您可能需要从多个客户端虚拟机实例运行 fio。这种基准化分析性能方法无法为 Enterprise 层级和大规模层级实例提供准确的结果。

以下示例对最大写入吞吐量执行基准化分析:

fio --ioengine=libaio --filesize=32G --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

以下示例对最大写入 IOPS 执行基准化分析:

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite

以下示例对最大读取吞吐量执行基准化分析:

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=read --blocksize=1m --iodepth=64 --readwrite=read

以下示例对最大读取 IOPS 执行基准化分析:

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randread --blocksize=4k --iodepth=256 --readwrite=randread

后续步骤


  1. 数值基于 4K 读取/写入 IO 衡量。 

  2. 数值是根据 1M 次读取/写入 IO 来衡量的。