Azure Blob 存储中的网络文件系统 (NFS) 3.0 性能注意事项

Blob 存储现在支持网络文件系统 (NFS) 3.0 协议。 本文包含有助于优化存储请求性能的建议。 若要详细了解对 Azure Blob 存储的 NFS 3.0 支持,请参阅 Azure Blob 存储的网络文件系统 3.0 协议支持

添加客户端以提高吞吐量

Azure Blob 存储可线性扩展,直至达到最大存储帐户流出量和流入量限制。 因此,应用程序可以使用更多客户端来实现更高的吞吐量。 若要查看存储帐户出口和入口限制,请参阅 标准存储帐户的可伸缩性和性能目标

下图显示了添加更多客户端时带宽的增加方式。 在此图表中,客户端是虚拟机(VM),并且具有标准的常规用途 v2 存储帐户。

标准性能

以下图表显示了应用于高级块 Blob 存储帐户时的相同效果。

高级性能

对小规模应用程序使用高级块 Blob 存储帐户

并非所有应用程序都可以通过添加更多客户端来纵向扩展。 对于这些应用程序, Azure 高级块 Blob 存储帐户 提供一致的低延迟和高事务速率。 高级块 Blob 存储帐户可以使用更少的线程和客户端达到最大带宽。 例如,使用单个客户端时,与标准性能常规用途 v2 存储帐户一起使用的相同设置相比,高级块 Blob 存储帐户可以实现 2.3 倍 的带宽。

下图中的每个条形图显示了高级和标准性能存储帐户之间实现带宽的差异。 随着客户端数量的增加,这种差异会减少。

相对性能

提高预读大小以提高大型文件读取吞吐量

read_ahead_kb内核参数表示满足给定读取请求后应读取的其他数据量。 可以将此参数增加到 16 MiB,以提高大型文件读取吞吐量。

export AZMNT=/your/container/mountpoint

echo 16384 > /sys/class/bdi/0:$(stat -c "%d" $AZMNT)/read_ahead_kb

避免频繁执行日期覆盖操作

完成覆盖操作所需的时间比新的写入操作所需时间更长。 这是因为 NFS 覆盖操作(特别是部分就地文件编辑)是多个基础 blob 操作的组合:读取、修改和写入操作。 因此,需要频繁进行就地编辑的应用程序不适合启用 NFS 的 Blob 存储帐户。

为延迟敏感应用程序部署 Azure HPC 缓存

除了高吞吐量外,某些应用程序可能需要低延迟。 可以部署 Azure HPC 缓存 来显著改善延迟。 详细了解 Blob 存储中的延迟

增加 TCP 连接数

可以使用 nconnect 装载选项从单个 VM 获取更高的聚合读取和写入性能,但前提是 Linux 内核支持 Azure nconnect

nconnect 是客户端 Linux 装载选项,可用于在客户端与 Blob 服务终结点之间使用多个 TCP 连接。 可以使用 nconnect 装载命令中的选项指定要创建的 TCP 连接数(例如: mount -t aznfs -o nconnect=16,sec=sys,vers=3,nolock,proto=tcp <storage-account-name>.blob.core.chinacloudapi.cn:/<storage-account-name>/<container-name> /nfsdatain) 。

重要

虽然最新的 Linux 发行版完全支持 nconnect,但仅当内核支持 Azure nconnect 时,才应使用此选项。 nconnect使用没有 Azure nconnect 支持的装载选项将降低吞吐量,导致多次超时,并导致命令(例如READDIRREADIRPLUS无法正常工作)。

可用于 Azure 虚拟机的大多数最新 Ubuntu 内核都提供 Azure nconnect 支持。 若要了解 Azure nconnect 支持是否可用于内核,请运行以下命令。

[ -e /sys/module/sunrpc/parameters/enable_azure_nconnect ] && echo "Yes" || echo "No"

如果内核支持 Azure nconnect,则会将 Yes 输出到控制台。 否则,会在控制台中输出 'No

如果 Azure nconnect 支持可用,请运行以下命令来启用它。

echo Y > /sys/module/sunrpc/parameters/enable_azure_nconnect

其他最佳做法建议

  • 使用具有足够网络带宽的 VM。

  • 当工作负荷允许时,请使用多个装入点。

  • 尽可能多地使用线程。

  • 使用较大的块大小。

  • 从位于存储帐户所在的同一区域的客户端发出存储请求。 这可以提高网络延迟。

后续步骤