最大化 S3 文件网关吞吐量 - Amazon Storage Gatewa
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon FSx 文件网关不再向新客户开放。 FSx File Gateway 的现有客户可以继续正常使用该服务。有关与 FSx 文件网关类似的功能,请访问此博客文章

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

最大化 S3 文件网关吞吐量

以下各节描述了最大限度地提高 NFS 和 SMB 客户端、S3 文件网关和 Amazon S3 之间吞吐量的最佳实践。各节中提供的指导有助于逐步提高总体吞吐量。虽然这些建议都不是必需的,也不是相互依赖的,但它们是按照逻辑方式选择和排序的, Amazon Web Services 支持 用于测试和调整 S3 File Gateway 的实现。在实施和测试这些建议时,请记住每个 S3 文件网关部署都是唯一的,因此结果可能会有所不同。

S3 文件网关提供了一个文件接口,用于使用行业标准 NFS 或 SMB 文件协议存储和检索 Amazon S3 对象,文件和对象之间具有原生 1:1 映射。你可以将 S3 文件网关作为虚拟机部署在你 VMware的 Microsoft Hyper-V 或 Linux KVM 环境中,或者作为亚马逊实例部署在 Amazon 云中。 EC2 S3 文件网关不是为完全替代企业 NAS 而设计的。S3 文件网关模拟文件系统,但它不是文件系统。使用 Amazon S3 作为持久后端存储会给每项 I/O 操作带来额外的开销,因此,与现有 NAS 或文件服务器相比,评估 S3 文件网关性能并不是等同的比较。

将网关部署在与客户端相同的位置

我们建议将 S3 文件网关虚拟设备部署在物理位置,使其与 NFS 或 SMB 客户端之间的网络延迟尽可能短。为网关选择位置时,请考虑以下因素:

  • 降低网关的网络延迟有助于提高 NFS 或 SMB 客户端的性能。

  • S3 文件网关旨在容忍网关与 Amazon S3 之间的网络延迟高于网关与客户端之间的网络延迟。

  • 对于部署在 Amazon 中的 S3 文件网关实例 EC2,我们建议将网关和 NFS 或 SMB 客户端放在同一个置放群组中。有关更多信息,请参阅亚马逊弹性计算云用户指南中的亚马逊 EC2 实例置放群组

减少磁盘速度慢造成的瓶颈

我们建议您监控该IoWaitPercent CloudWatch 指标,以确定可能由于 S3 文件网关上存储磁盘缓慢而导致的性能瓶颈。尝试优化与磁盘相关的性能问题时,请考虑以下几点:

  • IoWaitPercent报告 CPU 等待根磁盘或缓存磁盘响应的时间百分比。

  • 当大IoWaitPercent于 5-10% 时,这通常表示由于磁盘性能不佳而导致网关性能瓶颈。该指标应尽可能接近 0%,这意味着网关永远不会在磁盘上等待,这有助于优化 CPU 资源。

  • 您可以IoWaitPercent在 Storage Gateway 控制台的 “监控” 选项卡上进行查看,或者将推荐的 CloudWatch 警报配置为在指标峰值超过特定阈值时自动通知您。有关更多信息,请参阅为您的网关创建推荐的 CloudWatch 警报

  • 我们建议使用 NVMe 或 SSD 作为网关的根磁盘和缓存磁盘,以最大限度地减少网关的根磁盘和缓存磁盘IoWaitPercent

调整 CPU、RAM 和缓存磁盘的虚拟机资源分配

尝试优化 S3 文件网关的吞吐量时,必须为网关 VM 分配足够的资源,包括 CPU、RAM 和缓存磁盘。4 CPUs、16GB RAM 和 150GB 缓存存储空间的最低虚拟资源要求通常仅适用于较小的工作负载。在为较大的工作负载分配虚拟资源时,我们建议采取以下措施:

  • 根据您的 S3 文件网关生成的典型 CPU 使用率,将分配的数量增加到 16 到 48 之间。 CPUs 您可以使用该UserCpuPercent指标监控 CPU 使用率。有关更多信息,请参阅了解网关指标

  • 将分配的内存增加到 32 到 64 GB 之间。

    注意

    S3 文件网关使用的内存不能超过 64 GB。

  • 使用 NVMe 或 SSD 作为根磁盘和缓存磁盘,并调整缓存磁盘的大小,使其与计划写入网关的峰值工作数据集保持一致。有关更多信息,请参阅 Amazon Web Services 官方 YouTube 频道上的 S3 文件网关缓存大小调整最佳实践

  • 向网关添加至少 4 个虚拟缓存磁盘,而不是使用单个大磁盘。即使多个虚拟磁盘共享同一个底层物理磁盘,它们也可以提高性能,但是当虚拟磁盘位于不同的底层物理磁盘上时,性能的改善通常会更大。

    例如,如果要部署 12TB 的缓存,则可以使用以下配置之一:

    • 4 x 3 TB 的缓存磁盘

    • 8 x 1.5 TB 缓存磁盘

    • 12 x 1 TB 的缓存磁盘

    除了性能外,这还允许随着时间的推移更有效地管理虚拟机。随着工作负载的变化,您可以逐步增加缓存磁盘的数量和总体缓存容量,同时保持每个虚拟磁盘的原始大小以保持网关的完整性。

    有关更多信息,请参阅确定本地磁盘存储量

将 S3 文件网关部署为 Amazon EC2 实例时,请考虑以下几点:

  • 您选择的实例类型可能会显著影响网关性能。Amazon 为调整 S3 文件网关实例的资源分配 EC2 提供了广泛的灵活性。

  • 有关 S3 文件网关推荐的 Amazon EC2 实例类型,请参阅亚马逊 EC2 实例类型要求

  • 您可以更改托管活动 S3 文件网关的 Amazon EC2 实例类型。这使您可以轻松调整 Amazon EC2 硬件生成和资源分配,以找到理想的 price-to-performance比例。要更改实例类型,请在 Amazon EC2 控制台中使用以下步骤:

    1. 停止 Amazon EC2 实例。

    2. 更改 Amazon EC2 实例类型。

    3. 打开 Amazon EC2 实例的电源。

    注意

    停止托管 S3 文件网关的实例将暂时中断文件共享访问。如有必要,请务必安排维护时段。

  • Amazon EC2 实例的 price-to-performance比率是指以您支付的价格获得的计算能力。通常,新一代的 Amazon EC2 实例提供最佳 price-to-performance比率,与老一代实例相比,硬件更新,性能更高,成本相对较低。实例类型、区域和使用模式等因素会影响该比率,因此,为特定工作负载选择合适的实例以优化成本效益非常重要。

调整 SMB 的安全级别

该 SMBv3 协议允许 SMB 签名和 SMB 加密,这在性能和安全性方面有一些权衡。要优化吞吐量,您可以调整网关的 SMB 安全级别,以指定对客户端连接强制使用哪些安全功能。有关更多信息,请参阅为网关设置安全级别

调整 SMB 安全级别时,请考虑以下几点:

  • S3 文件网关的默认安全级别为强制加密。此设置对与网关文件共享的 SMB 客户端连接强制执行加密和签名,这意味着从客户端到网关的所有流量都经过加密。此设置不影响从网关到的流量 Amazon,该流量始终处于加密状态。

    网关将每个加密的客户端连接限制为一个 vCPU。例如,如果您只有 1 个加密客户端,则即使为网关分配了 4 个或更多 v,该客户端CPUs 也只能使用 1 个 vCPU。因此,从单个客户端到 S3 文件网关的加密连接的吞吐量通常在 40-60 MB/s 之间出现瓶颈。

  • 如果您的安全要求允许更宽松的状态,则可以将安全级别更改为客户协商,这将禁用 SMB 加密并仅强制执行 SMB 签名。使用此设置,客户端与网关的连接可以利用多个 vCPUs,这通常会提高吞吐量性能。

    注意

    更改 S3 文件网关的 SMB 安全级别后,必须在 Storage Gateway 控制台中等待文件共享状态从 “更新” 更改为 “可用”,然后断开并重新连接 SMB 客户端,新设置才能生效。

使用多个线程和客户端并行化写入操作

使用一次仅使用一个 NFS 或 SMB 客户端写入一个文件的 S3 文件网关很难实现最大吞吐量性能,因为从单个客户端进行顺序写入是单线程操作。相反,我们建议使用每个 NFS 或 SMB 客户端的多个线程并行写入多个文件,同时使用多个 NFS 或 SMB 客户端到 S3 文件网关,以最大限度地提高网关吞吐量。

使用多个线程可以显著提高性能。但是,使用更多线程需要更多的系统资源,如果网关的大小不能满足增加的负载,这可能会对性能产生负面影响。在典型的部署中,随着您添加更多线程和客户端,您可以期望获得更好的吞吐量性能,直到达到网关的最大硬件和带宽限制。我们建议尝试不同的线程数,以便针对您的特定硬件和网络配置,在速度和系统资源使用之间找到最佳平衡。

请考虑以下有关常用工具的信息,这些工具可以帮助您测试线程和客户端配置:

  • 您可以使用诸如 robocopy 之类的工具将一组文件复制到网关上的文件共享中,从而测试多线程写入性能。默认情况下,robocopy 在复制文件时使用 8 个线程,但您最多可以指定 128 个线程。

    要在 robocopy 中使用多个线程,请在命令中添加/MT:n开关,其中n是您要使用的线程数。例如:

    robocopy C:\source D:\destination /MT:64

    此命令将使用 64 个线程进行复制操作。

    注意

    在测试最大吞吐量时,我们不建议使用 Windows 资源管理器拖放文件,因为此方法仅限于单个线程并按顺序复制文件。

    有关更多信息,请参阅 Micros oft Learn 网站上的 robocopy

  • 您也可以使用常用的存储基准测试工具(例如 DISKSPD 或 FIO)进行测试。这些工具具有调整线程数、I/O 深度和其他参数的选项,以满足您的特定工作负载要求。

    DiskSpd 允许您使用-t参数控制线程数。例如:

    diskspd -c10G -d300 -r -w50 -t64 -o32 -b1M -h -L C:\testfile.dat

    此示例命令执行以下操作:

    • 创建一个 10GB 的测试文件 () -c1G

    • 运行 300 秒 (-d300)

    • 执行随机 I/O 测试,50% 读取 50% 写入 (-r -w50)

    • 使用 64 个线程 (-t64)

    • 将队列深度设置为每个线程 32 (-o32)

    • 使用 1MB 的区块大小 () -b1M

    • 禁用硬件和软件缓存 () -h -L

    有关更多信息,请参阅 Microsoft Learn 网站上的使用 DISKSPD 测试工作负载存储性能

  • FIO 使用numjobs参数来控制并行线程的数量。例如:

    fio --name=mixed_test --rw=randrw --rwmixread=70 --bs=1M -- iodepth=64 --size=10G --runtime=300 --numjobs=64 --ioengine=libaio --direct=1 --group_reporting

    此示例命令执行以下操作:

    • 执行随机 I/O 测试 (--rw=randrw)

    • 执行 70% 的读取和 30% 的写入 (--rwmixread=70)

    • 使用 1MB 的区块大小 () --bs=1M

    • 将 I/O 深度设置为 64 (--iodepth=64)

    • 在 10 GB 文件上进行测试 (--size=10G)

    • 运行 5 分钟 (--runtime=300)

    • 创建 64 个并行作业(线程)(--numjobs=64)

    • 使用异步 I/O 引擎 (--ioengine=libaio)

    • 对结果进行分组以便于分析 (--group_reporting)

    有关更多信息,请参阅 fio Linux 手册页。

关闭自动缓存刷新

自动缓存刷新功能允许您的 S3 文件网关自动刷新其元数据,这有助于捕获用户或应用程序通过直接写入 Amazon S3 存储桶(而不是通过网关)对您的文件集所做的任何更改。有关更多信息,请参阅刷新 Amazon S3 存储桶对象缓存

为了优化网关吞吐量,我们建议在部署中关闭此功能,在该部署中,对 Amazon S3 存储桶的所有读取和写入都将通过 S3 文件网关执行。

配置自动缓存刷新时,请考虑以下事项:

  • 如果您因为部署中的用户或应用程序偶尔会直接写入 Amazon S3 而需要使用自动缓存刷新,那么我们建议您配置尽可能长的刷新间隔,这样才能满足您的业务需求。较长的缓存刷新间隔有助于减少网关在浏览目录或修改文件时需要执行的元数据操作的数量。

    例如:将自动缓存刷新设置为 24 小时,而不是 5 分钟(如果您的工作负载允许的话)。

  • 最小时间间隔为 5 分钟。最大间隔为 30 天。

  • 如果您选择设置非常短的缓存刷新间隔,我们建议您测试 NFS 和 SMB 客户端的目录浏览体验。刷新网关缓存所需的时间可能会大幅增加,具体取决于您的 Amazon S3 存储桶中文件和子目录的数量。

增加 Amazon S3 上传者话题的数量

默认情况下,S3 文件网关为 Amazon S3 数据上传打开 8 个线程,这为大多数典型部署提供了足够的上传容量。但是,网关接收来自 NFS 和 SMB 客户端的数据的速率可能高于以标准 8 线程容量上传到 Amazon S3 的速率,这可能会导致本地缓存达到其存储限制。

在特定情况下, Amazon Web Services 支持 可以将网关的 Amazon S3 上传线程池数量从 8 增加到 40,从而允许并行上传更多数据。根据您的部署特定的带宽和其他因素,这可以显著提高上传性能,并有助于减少支持您的工作负载所需的缓存存储量。

我们建议使用该CachePercentDirty CloudWatch 指标来监控存储在本地网关缓存磁盘上但尚未上传到 Amazon S3 的数据量,并联系 Amazon Web Services 支持 以帮助确定增加上传线程池数量是否会提高 S3 文件网关的吞吐量。有关更多信息,请参阅了解网关指标

注意

此设置会消耗额外的网关 CPU 资源。我们建议监控网关 CPU 使用率,并在必要时增加分配的 CPU 资源。

增加 SMB 超时设置

当 S3 文件网关将大文件复制到 SMB 文件共享时,SMB 客户端连接可能会在很长一段时间后超时。

我们建议将 SMB 客户端的 SMB 会话超时设置延长到 20 分钟或更长时间,具体取决于文件大小和网关的写入速度。默认值为 300 秒或 5 分钟。有关更多信息,请参阅您的网关备份任务失败或写入网关时出现错误

为兼容的应用程序开启机会锁定

默认情况下,每个新的 S3 文件网关都启用机会锁定或 “oplocks”。在兼容的应用程序中使用 oplocks 时,客户端会将多个较小的操作分批成较大的操作,这对客户端、网关和网络来说效率更高。如果您使用的是利用客户端本地缓存的应用程序(例如 Microsoft Office、Adobe Suite 等),我们建议您保持机会主义锁定处于开启状态,因为它可以显著提高性能。

如果您关闭机会性锁定,则支持 oplocks 的应用程序打开大文件(50 MB 或更大)的速度通常会慢得多。之所以出现这种延迟,是因为网关以 4 KB 的部分发送数据,这会导致吞吐量高 I/O 而低。

根据工作文件集的大小调整网关容量

网关容量参数指定网关将在其本地缓存中存储元数据的最大文件数。默认情况下,网关容量设置为 “”,这意味着网关最多可存储 500 万个文件的元数据。默认设置适用于大多数工作负载,即使 Amazon S3 中有数亿甚至数十亿个对象,因为在典型部署中,在给定时间只有一小部分文件被主动访问。这组文件被称为 “工作集”。

如果您的工作负载经常访问一组大于 500 万的工作文件,则您的网关将需要频繁执行缓存驱逐操作,这些缓存是存储在 RAM 中并保留在根磁盘上的小 I/O 操作。这可能会对网关性能产生负面影响,因为网关会从 Amazon S3 获取新数据。

您可以监控该IndexEvictions指标以确定其元数据已从缓存中移出的文件数量,从而为新条目腾出空间。有关更多信息,请参阅了解网关指标

我们建议使用 UpdateGatewayInformation API 操作来增加网关容量,使其与典型工作集中的文件数量相对应。有关更多信息,请参阅 UpdateGatewayInformation

注意

增加网关容量需要额外的 RAM 和根磁盘容量。

  • 较小(500 万个文件)至少需要 16 GB 的 RAM 和 80 GB 的根磁盘。

  • 中型(一千万个文件)需要至少 32 GB 的 RAM 和 160 GB 的根磁盘。

  • 大型文件(两千万个文件)需要 64 GB 的 RAM 和 240 GB 的根磁盘。

重要

网关容量无法减少。

为更大的工作负载部署多个网关

我们建议尽可能将工作负载分散到多个网关,而不是在单个大型网关上整合多个文件共享。例如,您可以在一个网关上隔离一个经常使用的文件共享,而在另一个网关上将不常使用的文件共享分组在一起。

在规划具有多个网关和文件共享的部署时,请考虑以下几点:

  • 单个网关上文件共享的最大数量为 50,但是网关管理的文件共享数量可能会影响网关的性能。有关更多信息,请参阅具有多个文件共享的网关的性能指南

  • 每个 S3 文件网关上的资源在所有文件共享之间共享,无需分区。

  • 使用量大的单个文件共享可能会影响网关上其他文件共享的性能。

注意

我们不建议从多个网关创建映射到同一 Amazon S3 位置的多个文件共享,除非其中至少有一个是只读的。

从多个网关同时写入同一个文件被视为多写入器方案,这可能会导致数据完整性问题。