

Amazon FSx 文件网关不再向新客户开放。 FSx File Gateway 的现有客户可以继续正常使用该服务。有关与 FSx 文件网关类似的功能，请访问[此博客文章](https://aws.amazon.com/blogs/storage/switch-your-file-share-access-from-amazon-fsx-file-gateway-to-amazon-fsx-for-windows-file-server/)。

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

# 更大限度地提高 S3 文件网关吞吐量


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

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

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


建议将 S3 文件网关虚拟设备部署在尽可能靠近 NFS 或 SMB 客户端的物理位置，从而尽可能缩短两者之间的网络延迟。在为网关选择位置时，请考虑以下事项：
+ 降低网关的网络延迟有助于提高 NFS 或 SMB 客户端的性能。
+ S3 文件网关设计为能够容忍网关与 Amazon S3 之间较高的网络延迟，但无法容忍网关与客户端之间的高延迟。
+ 对于部署在 Amazon EC2 中的 S3 文件网关实例，建议将网关和 NFS 或 SMB 客户端放在同一个置放群组中。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》中的 [Amazon EC2 实例的置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)。

## 减少磁盘速度慢引起的瓶颈


我们建议您监控该`IoWaitPercent` CloudWatch 指标，以确定可能由于 S3 文件网关上存储磁盘缓慢而导致的性能瓶颈。尝试优化与磁盘相关的性能问题时，请考虑以下几点：
+ `IoWaitPercent` 报告 CPU 等待根磁盘或缓存磁盘返回响应所花费的时间占总时间的百分比。
+ 当 `IoWaitPercent` 大于 5-10% 时，这通常表示由于磁盘性能不佳而引起网关性能瓶颈。该指标应尽可能接近 0%（这意味着网关几乎从不需要等待磁盘响应），从而有助于优化 CPU 资源的使用。
+ 您可以`IoWaitPercent`在 Storage Gateway 控制台的 “**监控**” 选项卡上进行查看，或者将推荐的 CloudWatch 警报配置为在指标峰值超过特定阈值时自动通知您。有关更多信息，请参阅[为您的网关创建推荐的 CloudWatch 警报](https://docs.aws.amazon.com/filegateway/latest/files3/cloudwatch-alarms-create-recommended.html)。
+ 我们建议使用 NVMe 或 SSD 作为网关的根磁盘和缓存磁盘，以最大限度地减少网关的根磁盘和缓存磁盘`IoWaitPercent`。

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


尝试优化 S3 文件网关的吞吐量时，重要的是为网关 VM 分配足够的资源，包括 CPU、RAM 和缓存磁盘。4 CPUs、16GB RAM 和 150GB 缓存存储空间的最低虚拟资源要求通常仅适用于较小的工作负载。在为较大的工作负载分配虚拟资源时，建议执行以下操作：
+ 根据您的 S3 文件网关生成的典型 CPU 使用率，将分配的数量增加到 16 到 48 之间。 CPUs 您可以使用 `UserCpuPercent` 指标监控 CPU 使用率。有关更多信息，请参阅[了解网关指标](https://docs.aws.amazon.com/filegateway/latest/files3/monitoring-file-gateway.html#understanding-file-gateway-metrics)。
+ 将分配的 RAM 增加到 32 GB 至 64 GB。
**注意**  
S3 文件网关使用的 RAM 不能超过 64 GB。
+ 使用 NVMe 或 SSD 作为根磁盘和缓存磁盘，并调整缓存磁盘的大小，使其与计划写入网关的峰值工作数据集保持一致。有关更多信息，请参阅 [Amazon Web Services 官方 YouTube 频道上的 S3 文件网关缓存大小调整最佳实践](https://youtu.be/-ibL1eEcROI?si=dMAakj_dulZiG4Ln)。
+ 向网关添加至少 4 个虚拟缓存磁盘，而不是使用单个大磁盘。即使多个虚拟磁盘共享同一个底层物理磁盘，也可以提高性能，但是当虚拟磁盘位于不同的底层物理磁盘上时，性能提高通常会更大。

  例如，如果要部署 12TB 的缓存，则可以使用以下配置之一：
  + 4 x 3 TB 缓存磁盘
  + 8 x 1.5 TB 缓存磁盘
  + 12 x 1 TB 缓存磁盘

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

  有关更多信息，请参阅[确定本地磁盘存储量](https://docs.aws.amazon.com/filegateway/latest/files3/decide-local-disks-and-sizes.html)。

将 S3 文件网关部署为 Amazon EC2 实例时，请考虑以下事项：
+ 您选择的实例类型会显著影响网关性能。Amazon EC2 为调整 S3 文件网关实例的资源分配提供了广泛的灵活性。
+ 有关为 S3 文件网关推荐的 Amazon EC2 实例类型，请参阅[对 Amazon EC2 实例类型的要求](https://docs.aws.amazon.com/filegateway/latest/files3/Requirements.html#requirements-hardware-ec2)。
+ 您可以更改托管活动 S3 文件网关的 Amazon EC2 实例类型。这使您可以轻松调整 Amazon EC2 硬件生成和资源分配，以找到理想的 price-to-performance比率。要更改实例类型，请在 Amazon EC2 中执行以下步骤：

  1. 停止 Amazon EC2 实例。

  1. 更改 Amazon EC2 实例类型。

  1. 启动 Amazon EC2 实例。
**注意**  
停止托管 S3 文件网关的实例会暂时中断文件共享访问。如有必要，请务必提前安排维护时段。
+ Amazon EC2 实例的 price-to-performance比率是指以您支付的价格获得的计算能力。通常，新一代的 Amazon EC2 实例提供的 price-to-performance比率最高，与老一代实例相比，硬件更新，性能更高，成本相对较低。实例类型、区域和使用模式等因素也会影响该比率，因此，为特定工作负载选择合适的实例，对于实现成本效益的最优化非常重要。

## 调整 SMB 安全级别


该 SMBv3 协议允许 SMB 签名和 SMB 加密，这在性能和安全性方面有一些权衡。要优化吞吐量，您可以调整网关的 SMB 安全级别，指定在客户端连接时实施了哪些安全功能。有关更多信息，请参阅[为网关设置安全级别](https://docs.aws.amazon.com/filegateway/latest/files3/security-strategy.html)。

调整 SMB 安全级别时，需考虑以下事项：
+ S3 文件网关的默认安全级别为**强制加密**。此设置对与网关文件共享的 SMB 客户端连接强制执行加密和签名，这意味着从客户端到网关的所有流量都经过加密。此设置不影响从网关到的流量 AWS，该流量始终处于加密状态。

  网关将每个加密的客户端连接限制为一个 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 资源管理器来拖放文件，因为此方法仅限于单个线程并会按顺序复制文件。

  有关更多信息，请参阅 Microsoft Learn 网站上的 [robocopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy)。
+ 您也可以使用常见的存储基准测试工具（例如 DISKSPD 或 FIO）进行测试。这些工具提供了调整线程数、I/O 深度和其他参数的选项，可以满足您的特定工作负载要求。

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

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

  此示例命令执行以下操作：
  + 创建一个 10 GB 的测试文件（`-c1G`）
  + 运行 300 秒（`-d300`）
  + 执行随机 I/O 测试，50% 读取 50% 写入 (`-r -w50`)
  + 使用 64 个线程（`-t64`）
  + 将每个线程的队列深度设置为 32（`-o32`）
  + 使用 1MB 的区块大小（`-b1M`）
  + 禁用硬件和软件缓存（`-h -L`）

  有关更多信息，请参阅 Microsoft Learn 网站上的 [Use DISKSPD to test workload storage performance](https://learn.microsoft.com/en-us/azure/azure-local/manage/diskspd-overview?view=azloc-24113)。
+ 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](https://linux.die.net/man/1/fio) Linux man 页面。

## 关闭自动缓存刷新


借助自动缓存刷新功能，您的 S3 文件网关可以自动刷新其元数据，从而有助于捕获用户或应用程序通过直接写入 Amazon S3 存储桶（而不是通过网关）对您的文件集所作的任何更改。有关更多信息，请参阅[刷新 Amazon S3 存储桶对象缓存](https://docs.aws.amazon.com/filegateway/latest/files3/refresh-cache.html)。

为了优化网关吞吐量，建议在对 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 S3 上传线程池数量从 8 增加到 40，从而允许并行上传更多数据。根据您的部署特定的带宽和其他因素，这可以显著提高上传性能，并有助于减少支持您的工作负载所需的缓存存储。

我们建议使用该`CachePercentDirty` CloudWatch 指标来监控存储在本地网关缓存磁盘上但尚未上传到 Amazon S3 的数据量，并联系 支持 以帮助确定增加上传线程池数量是否会提高 S3 文件网关的吞吐量。有关更多信息，请参阅[了解网关指标](https://docs.aws.amazon.com/filegateway/latest/files3/monitoring-file-gateway.html#understanding-file-gateway-metrics)。

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

## 增大 SMB 超时设置


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

建议将 SMB 客户端的 SMB 会话超时设置延长到 20 分钟或更长时间，具体取决于文件大小和网关的写入速度。默认值为 300 秒，即 5 分钟。有关更多信息，请参阅[您的网关备份作业失败，或在对网关进行写入时出现错误](https://docs.aws.amazon.com/filegateway/latest/files3/troubleshooting-file-gateway-issues.html#backup-job-fails)。

## 为兼容的应用程序开启操作锁定


默认情况下，每个新的 S3 文件网关都会启用操作锁定（oplock）。在兼容的应用程序中使用操作锁定时，客户端会将多个较小的操作合并成更大的操作，这对客户端、网关和网络来说效率更高。如果您使用的是利用客户端本地缓存的应用程序（例如 Microsoft Office、Adobe Suite 等），建议开启操作锁定，这样可以显著提高性能。

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

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


网关容量参数指定网关在其本地缓存中可存储元数据的最大文件数量。默认情况下，网关容量设置为**小**，这意味着网关最多可存储 500 万个文件的元数据。因为在典型部署中，在任意时刻用户或应用通常只会访问一小部分文件，所以即使 Amazon S3 中有数亿甚至数十亿个对象，默认设置对大多数工作负载都能很好地运行。这组文件称为“工作集”。

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

您可以监控 `IndexEvictions` 指标以确定其元数据已从缓存中移出的文件数量，从而为新条目腾出空间。有关更多信息，请参阅[了解网关指标](https://docs.aws.amazon.com/filegateway/latest/files3/monitoring-file-gateway.html#understanding-file-gateway-metrics)。

建议使用 `UpdateGatewayInformation` API 操作来增加网关容量，使其与典型工作集中的文件数量相对应。有关更多信息，请参阅 [UpdateGatewayInformation](https://docs.aws.amazon.com/storagegateway/latest/APIReference/API_UpdateGatewayInformation.html)。

**注意**  
增加网关容量需要额外的 RAM 和根磁盘容量。  
小（500 万个文件）容量至少需要 16 GB 的 RAM 和 80 GB 的根磁盘。
中（1000 万个文件）容量至少需要 32 GB 的 RAM 和 160 GB 的根磁盘。
大（2000 万个文件）容量需要 64 GB 的 RAM 和 240 GB 的根磁盘。

**重要**  
网关容量无法减少。

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


建议尽可能将工作负载分散到多个网关，而不是在单个大型网关上整合许多个文件共享。例如，您可以将一个使用非常频繁的文件共享单独部署在一个网关上，而将多个使用频率较低的文件共享集中部署在另一个网关上。

在规划具有多个网关和文件共享的部署时，请考虑以下几点：
+ 单个网关上文件共享的最大数量为 50，但是网关管理的文件共享数量会影响网关的性能。有关更多信息，请参阅[具有多个文件共享的网关的性能指导](https://docs.aws.amazon.com/filegateway/latest/files3/Performance.html#performance-multiple-file-shares)。
+ 每个 S3 文件网关上的资源由所有文件共享共同使用，不会进行划分。
+ 使用量大的单个文件共享会影响网关上其他文件共享的性能。

**注意**  
我们不建议从多个网关创建映射到同一个 Amazon S3 位置的多个文件共享，除非其中至少有一个文件共享是只读的。  
从多个网关同时向同一个文件执行写入操作属于多写入器场景，这可能会导致数据完整性问题。