性能

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

预期性能

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

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

下表显示了基于 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 26,000/8,800

大规模 SSD 层级性能扩缩

大规模层级实例的性能可在 2.5 TiB 步骤中使用分配的容量线性扩缩。下表显示了每使用 2.5 TiB 容量可获得的性能。

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

在单客户端和少数客户端场景中,您必须使用 nconnect 装载选项增加 TCP 连接数量才能实现最高 NFS 性能。一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。

推荐的客户端机器类型

我们建议使用 Compute Engine 机器类型(例如 n2-standard-8),其出站流量带宽为 16 Gbps。这样客户端便可以为容易缓存的工作负载实现大约 16 Gbps 的读取带宽。如需其他上下文,请参阅网络带宽

Linux 客户端装载选项

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

点击以展开 - 默认 NFS mount 选项

默认选项 说明
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。这种基准化分析性能方法无法为大规模层级实例提供准确的结果。

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

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 来衡量的。