本页面介绍了 Filestore 实例可用的性能选项,并提供了优化性能的一般建议。当您使用 Google Cloud 控制台创建可用区级实例和区域级实例时,系统默认启用自定义性能,以便您根据具体工作负载需求独立扩缩 IOPS。
下表总结了自定义性能设置下较低和较高容量范围的性能限制:
| 容量范围 | 服务层级 | 容量 | 每个 TiB 的预配 IOPS |
|---|---|---|---|
| 较低容量范围 | 区域级(区域中提供小型实例) | 100 GiB 到 10,239 GiB | 4,000 到 17,000 |
| 区域级(区域中不提供小型实例) | 1 TiB 到 9.75 TiB | 4,000 到 17,000 | |
| Zonal | 1 TiB 到 9.75 TiB | 4,000 到 17,000 | |
| 较高容量范围 | 区域级 | 10 TiB 到 100 TiB | 3,000 到 7,500 |
| Zonal | 10 TiB 到 100 TiB | 3,000 到 7,500 |
了解性能计算
下表显示了基于每个 TiB 的预配 IOPS 和分配的容量的性能计算。计算基于不同的容量范围,以显示每个 TiB 的最小和最大 IOPS 值对应的读取 IOPS、写入 IOPS、读取吞吐量和写入吞吐量的值如何变化。
如需了解详情,请参阅读取和写入 IOPS。
| 容量范围 | 每个 TiB 的最小和最大 预配 IOPS |
容量 | 读取 IOPS | 写入 IOPS | 读取吞吐量 (MiBps) | 写入吞吐量 (MiBps) | 单个客户端读取吞吐量 (MiBps) | 单个客户端写入吞吐量 (MiBps) |
|---|---|---|---|---|---|---|---|---|
| 较低容量范围 (100 GiB 到 10,239 GiB) |
4,000 | 100 GiB | 2,000* | 600 | 47 | 16 | 47 | 16 |
| 600 GiB | 2,344 | 703 | 55 | 19 | 55 | 19 | ||
| 1,024 GiB | 4,000 | 1,200 | 94 | 32 | 94 | 32 | ||
| 10,239 GiB | 39,996 | 11,999 | 940 | 320 | 450 | 260 | ||
| 17,000 | 100 GiB | 2,000 | 600 | 47 | 16 | 47 | 16 | |
| 600 GiB | 9,961 | 2,988 | 234 | 80 | 234 | 80 | ||
| 1,024 GiB | 17,000 | 5,100 | 400 | 136 | 400 | 136 | ||
| 10,239 GiB | 169,983 | 50,995 | 3,995 | 1,360 | 450 | 260 | ||
| 较高容量范围 (10 TiB 到 100 TiB) |
3,000 | 10 TiB | 30,000 | 9,000 | 705 | 240 | 705 | 240 |
| 7,500 | 100 TiB | 750,000 | 225,000 | 17,625 | 6,000 | 1,600 | 800 |
* 根据对小型容量实例功能的访问权限,Filestore 区域级实例的较低容量范围可以是 100 GiB 到 10,239 GiB,也可以是 1 TiB 到 9.75 TiB。如需了解详情,请参阅 小型容量 Filestore 实例。
性能伸缩
在使用一个客户端和使用少量客户端的场景中,您必须使用
装载选项增加 TCP
连接数量才能达到最佳 NFS 性能。nconnect
对于特定服务层级,我们建议在客户端和服务器之间指定以下连接数:
| 层级 | 容量 | 连接数 |
|---|---|---|
| 区域级、可用区级 | 1-9.75 TiB | nconnect=2 |
| 区域级、可用区级 | 10-100 TiB | nconnect=7 |
| 企业 | - | nconnect=2 |
| 大规模 SSD | - | nconnect=7 |
一般来说,文件共享容量越大,连接的客户端虚拟机越少,通过使用 nconnect 指定额外连接即可提升性能。
推荐的客户端机器类型
我们建议使用 Compute Engine 机器类型(例如 n2-standard-8),其出站流量带宽至少为 16 Gbps。借助此出站流量带宽,客户端便可以为容易缓存的工作负载实现大约 16 Gbps 的读取带宽。如需其他上下文,请参阅网络带宽。
Linux 客户端装载选项
建议使用以下 NFS 装载选项,尤其是使用 hard 装载、async 以及 rsize 和 wsize 选项,以便在 Linux 客户端虚拟机实例上实现最佳性能。如需详细了解 NFS 装载选项,请参阅
nfs。
| 默认选项 | 说明 |
|---|---|
hard |
NFS 客户端无限期地重试 NFS 请求。 |
timeo=600 |
NFS 客户端会等待 600 分秒(60 秒)后再重试 NFS 请求。 |
retrans=3 |
NFS 客户端会尝试 NFS 请求三次,再执行进一步的恢复操作。 |
rsize=524288 |
对于每个 READ 请求,NFS 客户端最多可以从 NFS 服务器接收 524,288 个字节。注意:对于基本层级实例,请将 rsize 值设置为 1048576。 |
wsize=524288 |
对于每个 WRITE 请求,NFS 客户端最多可以向 NFS 服务器发送 524,288 个字节。 |
resvport |
与 NFS 服务器就此装载点进行通信时,NFS 客户端会使用特权源端口。 |
async |
NFS 客户端延迟向 NFS 服务器发送应用程序写入,直到满足某些条件。 注意:使用 sync 选项会大大降低性能。 |
使用 read_ahead_kb 参数优化 NFS 读取吞吐量
NFS read_ahead_kb 参数用于指定 Linux 内核在顺序读取操作期间应预提取的数据量(以 KB 为单位)。因此,后续读取请求可以直接从内存传送,从而减少延迟并提高整体性能。
对于 Linux 内核版本 5.4 及更高版本,Linux NFS 客户端使用默认的 read_ahead_kb 值 128 KB。
我们建议将此值增加到 20 MB,以提高顺序读取吞吐量。
在 Linux 客户端虚拟机上成功装载文件共享后,您可以使用以下脚本手动调整 read_ahead_kb 参数值:
mount_point=MOUNT_POINT_DIRECTORY
device_number=$(stat -c '%d' $mount_point)
((major = ($device_number & 0xFFF00) >> 8))
((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00)))
sudo bash -c "echo 20480 > /sys/class/bdi/$major:$minor/read_ahead_kb"
替换以下内容:
MOUNT_POINT_DIRECTORY 是文件共享所在目录的路径。
单个和多个客户端虚拟机的性能
Filestore 的可伸缩服务层级针对多个客户端虚拟机进行了性能优化,而不是针对单个客户端虚拟机。
对于可用区级、区域级和企业实例,至少需要四个客户端虚拟机才能充分发挥性能。这样可确保底层 Filestore 集群中的所有虚拟机都得到充分利用。
为了提供更多背景信息,最小的可伸缩 Filestore 集群有四个虚拟机。无论使用
nconnect
装载选项为每个客户端指定了多少个 NFS 连接,每个客户端虚拟机都仅与一个 Filestore 集群虚拟机通信。如果使用单个客户端虚拟机,则读取和写入操作仅从单个 Filestore 集群虚拟机执行。
基于容量的性能限制
基于容量的限制适用于不支持自定义性能的服务层级(例如基本层级),或您手动停用自定义性能的实例。
每个 Filestore 服务层级都提供不同级别的性能,这些性能可能会因各种因素而异,例如缓存的使用、客户端虚拟机的数量、客户端虚拟机的 机器类型以及测试的工作负载。
下表列出了为每个服务层级设置最小和最大容量时可以达到的性能上限。表中的所有值都是估计的限制。
| 服务层级 | 容量 | 读取 IOPS | 写入 IOPS | 读取吞吐量 (MiBps) | 写入吞吐量 (MiBps) | 单个客户端读取吞吐量 (MiBps) | 单个客户端写入吞吐量 (MiBps) |
|---|---|---|---|---|---|---|---|
| Zonal | 1 TiB | 9,200 | 2,600 | 260 | 88 | 260 | 88 |
| 9.75 TiB | 89,700 | 25,350 | 2,535 | 858 | 450 | 260 | |
| 10 TiB | 92,000 | 26,000 | 2,600 | 880 | 1,600 | 800 | |
| 100 TiB | 920,000 | 260,000 | 26,000 | 8,800 | 1,600 | 800 | |
| 区域级 | 1 TiB | 12,000 | 4,000 | 120 | 100 | 120 | 100 |
| 9.75 TiB | 117,000 | 39,000 | 1,170 | 975 | 450 | 260 | |
| 10 TiB | 92,000 | 26,000 | 2,600 | 880 | 1,600 | 800 | |
| 100 TiB | 920,000 | 260,000 | 26,000 | 8,800 | 1,600 | 800 | |
| 企业 | 1 TiB | 12,000 | 4,000 | 120 | 100 | 120 | 100 |
| 10 TiB | 120,000 | 40,000 | 1,200 | 1,000 | 450 | 260 | |
| 基本 HDD | 1 TiB - 10 TiB | 600 | 1,000 | 100 | 100 | 100 | 100 |
| 10 TiB - 63.9 TiB | 1,000 | 5,000 | 180 | 120 | 180 | 120 | |
| 基本 SSD | 2.5 TiB - 63.9 TiB | 60,000 | 25,000 | 1,200 | 350 | 1,200 | 350 |
提升跨 Google Cloud 资源的性能
跨多个 Google Cloud 资源的操作(例如使用 Google Cloud CLI 将数据从 Cloud Storage 复制到 Filestore 实例)可能会很慢。如需帮助缓解性能问题,请尝试以下操作:
确保 Cloud Storage 存储桶、客户端虚拟机和 Filestore 实例都位于同一区域。
双区域为存储在 Cloud Storage 中的数据提供了性能最高的选项。如果使用此选项,请确保其他资源位于双区域中包含的某个单区域中。例如,如果您的 Cloud Storage 数据位于
us-central1,us-west1中,请确保您的客户端虚拟机和 Filestore 实例位于us-central1中。作为参考点,请验证挂接了 Persistent Disk (PD) 的虚拟机的性能,并将其与 Filestore 实例的性能进行比较。
- 如果挂接了 PD 的虚拟机的性能与 Filestore 实例相比相似或更慢,则可能表明存在与 Filestore 无关的性能瓶颈。如需提升非 Filestore 资源的基准性能,您可以调整与并行复合上传关联的 gcloud CLI 属性。如需了解详情,请参阅 工具和 API 如何使用并行复合上传。
- 如果 Filestore 实例的性能明显慢于
挂接了永久性磁盘的虚拟机,请尝试将操作分散到多个虚拟机上,以提升从 Cloud Storage 读取操作的性能。