Amazon EFS 性能 - Amazon Elastic File System
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon EFS 性能

以下章节概述了 Amazon EFS 性能,还介绍了文件系统配置如何影响关键性能维度。我们还提供了一些用于优化文件系统性能的重要提示和建议。

性能摘要

文件系统性能通常通过使用延迟、吞吐量和每秒进行读写操作的次数(IOPS)来衡量。Amazon EFS 在这些方面的性能取决于文件系统的配置。以下配置会影响 Amazon EFS 文件系统的性能:

  • 文件系统类型 – 区域性或单区

  • 性能模式 – 通用或最大 I/O

    重要

    与通用性能模式相比,最大 I/O 性能模式具有更高的每操作延迟。为了提高性能,我们建议始终使用通用性能模式。有关更多信息,请参阅性能模式

  • 吞吐量模式 – 弹性、预配置或突增

下表概述了使用通用性能模式的文件系统的性能规格,以及文件系统类型和吞吐量模式的可能不同组合。

使用通用性能模式的文件系统的性能规格
存储和吞吐量配置 延迟 最大 IOPS 最大吞吐量

文件系统类型

吞吐量模式

读取操作

写入操作

读取操作

写入操作

P er-file-system read 1

P er-file-system 写入 1

按客户端读取/写入

区域性

Elastic

低至 250 微秒

As low as 2.7 ms 90,000–250,0002 50,000

3—20 GiBps

1—5 GiBps

500 MiBps

区域性

Provisioned

低至 250 微秒

As low as 2.7 ms 55,000 25,000

3—10 GiBps

1—3.33 GiBps

500 MiBps

区域性

Bursting

低至 250 微秒

As low as 2.7 ms 35,000 7,000

3—5 GiBps

1—3 GiBps

500 MiBps

单区

Elastic, Provisioned, or Bursting

低至 250 微秒(µs)

低至 1.6 毫秒(ms)

35,000 7,000

每秒 3—5 千兆字节 () GiBps

1—3 GiBps

500 mebibytes per second (MiBps)
注意

脚注:

  1. 最大读取和写入吞吐量取决于 Amazon Web Services 区域。如果吞吐量超过 Amazon Web Services 区域的最大吞吐量,则需要增加吞吐量配额。任何增加吞吐量的请求都将 case-by-case 由 Amazon EFS 服务团队进行考虑。是否批准可能取决于工作负载类型。有关请求增加配额的更多信息,请参阅Amazon EFS 配额和限制

  2. 对于不经常访问的数据,使用弹性吞吐量的文件系统最多可以实现 90,000 次读取,对于经常访问的数据,最多可以实现 250,000 次读取 IOPS。其它建议适用于实现最大 IOPS。有关更多信息,请参阅优化需要高吞吐量和 IOPS 的工作负载

存储类

Amazon EFS 存储类专为实现最有效的存储而设计,具体取决于用例。

  • EFS 标准存储类使用固态驱动器 (SSD) 存储为频繁访问的文件提供最低延迟级别。该存储类的读取第一个字节延迟低至 250us,写入第一个字节延迟低至 2.7ms。

  • EFS 不频繁访问 (IA) 和 EFS Archive 存储类可存储访问频率较低的数据,这些数据不需要频繁访问的数据所需的延迟性能。这些存储类提供的第一个字节延迟为数十毫秒。

有关 EFS 存储类的更多信息,请参阅 EFS 存储类

性能模式

Amazon EFS 提供两种性能模式:通用模式和最大 I/O 模式。

  • 通用模式的每次操作延迟最低,是文件系统的默认性能模式。One Zone 文件系统始终使用通用性能模式。为了提高性能,我们建议始终使用通用性能模式。

  • 最大 I/O 模式是上一代性能类型,专为高度并行化的工作负载而设计,与通用模式相比,这些工作负载可以容忍更高的延迟。“单区”文件系统或使用弹性吞吐量的文件系统不支持最大 I/O 模式。

    重要

    由于最大 I/O 的每次操作延迟较高,因此我们建议对所有文件系统使用通用性能模式。

为了帮助确保您的工作负载保持在使用通用性能模式的文件系统可用的 IOPS 限制范围内,您可以监控该PercentIOLimit CloudWatch 指标。有关更多信息,请参阅亚马逊 EFS 的亚马逊 CloudWatch 指标

应用程序可以弹性扩展其 IOPS,以达到与性能模式相关的限制。无需单独为 IOPS 付费;它们已包含在文件系统的吞吐量核算中。每个网络文件系统(NFS)请求都以 4 千字节(KB)吞吐量或其实际请求和响应大小计算,以较大者为准。

吞吐量模式

文件系统的吞吐量模式决定了文件系统可用的吞吐量。Amazon EFS 提供三种吞吐量模式:弹性、预配置和突增。读取吞吐量已打折,使您能够获得比写入吞吐量更高的读取吞吐量。每种吞吐量模式下可用的最大吞吐量取决于 Amazon Web Services 区域。有关不同区域中最大文件系统吞吐量的更多信息,请参阅Amazon EFS 配额和限制

文件系统可以实现 100% 的读写组合吞吐量。例如,如果文件系统使用其读取吞吐量限制的 33%,则该文件系统可以同时达到其写入吞吐量限制的 67%。可以在控制台的文件系统详细信息页面上的吞吐量利用率(%)图表中监控文件系统的吞吐量使用情况。有关更多信息,请参阅使用 CloudWatch 指标监控吞吐量性能

为文件系统选择正确的吞吐量模式

为文件系统选择正确的吞吐量模式取决于工作负载的性能要求。

  • 弹性吞吐量(推荐)— 当您的工作负载激增或不可预测且性能要求难以预测时,或者您的应用程序以 5% 或更低的 average-to-peak 比率驱动吞吐量时,请使用默认的弹性吞吐量。有关更多信息,请参阅弹性吞吐量

  • 预配置吞吐量-如果您知道工作负载的性能要求,或者当您的应用程序以 5% 或更高的 average-to-peak 比例提高吞吐量时,请使用预配置吞吐量。有关更多信息,请参阅预配置吞吐量

  • 突增吞吐量-如果您希望吞吐量随文件系统中的存储量而扩展,请使用突增吞吐量。

    如果在使用突增吞吐量后,发现您的应用程序受到吞吐量限制(例如,它使用的吞吐量超过允许吞吐量的 80%,或者您已经用完了所有突增额度),则应使用 Elastic 吞吐量或预配置吞吐量。有关更多信息,请参阅突增吞吐量

您可以使用 Amazon CloudWatch 通过将指标与MeteredIOBytes指标进行比较来确定工作负载的 average-to-peak PermittedThroughput比率。有关 Amazon EFS 指标的更多信息,请参阅亚马逊 EFS 的亚马逊 CloudWatch 指标

弹性吞吐量

对于使用弹性吞吐量的文件系统,Amazon EFS 会自动向上或向下扩展吞吐量性能,以满足您的工作负载活动的需求。对于性能要求难以预测的尖峰或不可预测的工作负载,或者对于吞吐量以平均峰值吞吐量的 5% 或更低( average-to-peak比率)的应用程序,弹性吞吐量是最佳吞吐量模式。

由于具有 Elastic 吞吐量的文件系统的吞吐量性能会自动扩展,因此您无需指定或预置吞吐量容量即可满足您的应用程序需求。您只需为读取或写入的元数据和数据量付费,并且在使用 Elastic 吞吐量时不会累积或消耗突增积分。

注意

弹性吞吐量仅适用于使用通用性能模式的文件系统。

有关每个区域弹性吞吐量限制的信息,请参阅您可以提高的 Amazon EFS 配额

预配置吞吐量

使用预配置吞吐量,您可以指定文件系统可以驱动的吞吐量级别,不受文件系统大小或突发信用余额的影响。如果您知道工作负载的性能要求,或者您的应用程序将吞吐量提高到该 average-to-peak 比率的 5% 或更多,请使用预配置吞吐量。

对于使用预配置吞吐量的文件系统,您需要为文件系统启用的吞吐量付费。一个月内计费的吞吐量基于预配置的吞吐量,该吞吐量超过文件系统包含的标准存储的基准吞吐量,不超过 Amazon Web Services 区域中现行的突增基准吞吐量限制。

如果文件系统的基准吞吐量超过预配置的吞吐量,则它会自动使用文件系统允许的突增吞吐量(不超过其中的现行\ Bursting 基准吞吐量限制)。 Amazon Web Services 区域

有关每RegionProvisioned 吞吐量限制的信息,请参阅您可以提高的 Amazon EFS 配额

突增吞吐量

对于需要随文件系统存储量而扩展的吞吐量的工作负载,建议使用突增吞吐量。使用突增吞吐量时,基本吞吐量与标准存储类中的文件系统大小成正比,每 GiB 存储空间的速率为 KiBps 每 GiB 存储 50。当文件系统消耗的吞吐量低于其基本吞吐量速率时,突增点数就会累积,当吞吐量超过基本速率时,会扣除突增点数。

当突发积分可用时,文件系统最多可以将吞吐量提高到 MiBps每 TiB 存储 100,不 Amazon Web Services 区域 超过限制,最小为 100。 MiBps如果没有可用的突发积分,则文件系统最多可以驱动 MiBps 每 TiB 存储 50 个,最少为 1。 MiBps

有关按区域突增吞吐量的信息,请参阅。General resource quotas that cannot be changed

了解 Amazon EFS 突增点数

使用突增吞吐量时,每个文件系统会随着时间的推移获得突发积分,其基准速率由存储在 EFS 标准存储类中的文件系统的大小决定。基准速率为 MiBps 每 TiB [TiB] 存储 50 个(相当于每 KiBps GiB 存储 50 个)。Amazon EFS 可将读取操作计量到写入操作速率的三分之一,从而允许文件系统将基准速率提高到 KiBps 每 GiB 读取吞吐量 150,或每 KiBps GiB 写入吞吐量 50。

文件系统可以其基准计量速率持续提高吞吐量。每当文件系统处于不活动状态或吞吐量低于其基准计量速率时,文件系统就会累积突增点数。累计的突增积分使文件系统可以推高吞吐量,使其高于其基准速率。

例如,标准存储类中具有 100 GiB 计量数据的文件系统的基准吞吐量为 5。 MiBps在 24 小时的非活动状态下,文件系统将获得价值 43.2 万MiB(5 MiB × 86,400 秒 = 432,000 Mi B)的积分,这些积分可用于以 100 的速度突发持续 72 分钟(432,000 MiB ε 100 MiBps = 72 分钟)。 MiBps

如果大于 1 TiB 的文件系统在 50% 的时间内处于不活动状态,该文件系统在其余 50% 的时间内始终可以突增。

下表提供了突增行为的示例。

文件系统大小 突增吞吐量 基准吞吐量
标准存储中有 100 GiB 计量数据
  • 突发至 300 (MiBps) 只读模式,每天最多 72 分钟,或

  • 突增至 100 MiBps 只写模式,每天最长可持续 72 分钟

  • 连续驱动最多 15 个 MiBps 只读驱动器

  • 连续驱动最多 5 个只 MiBps 写模式

标准存储中有 1 TiB 计量数据
  • 突增至 300 MiBps 只读模式,每天 12 小时,或

  • 在每天 12 小时内突增至 100 MiBps 只写模式

  • 驱动器 150 持续 MiBps 只读

  • 连续驱动 50 只 MiBps 写模式

标准存储中有 10 TiB 计量数据
  • 突增至 3 GiBps 只读模式,每天 12 小时,或

  • 每天 12 小时内突变为 1 GiBps 只写模式

  • 驱动器 1.5 持续 GiBps 只读

  • 连续驱动 500 只 MiBps 写模式

通常,较大的文件系统
  • 每天 TiB 存储空间突增至 300 个 MiBps 只读状态,持续 12 小时,或者

  • 每天 12 小时内每 TiB 存储空间可突增至 100 MiBps 只写入

  • 每 TiB 存储空间连续驱动 150 个 MiBps 只读盘

  • 每 TiB 存储空间连续驱动 50 个 MiBps 只写操作

注意

Amazon EFS 为所有文件系统提供的计量吞吐量为 1 MiBps ,即使基准速率较低。

确定基准速率和突增速率时所使用的文件系统大小是通过 DescribeFileSystems API 操作可用的 ValueInStandard 计量大小。

小于 1 TiB 的文件系统可以获得的积分可达到最高 2.1 TiB 积分余额,对于大于 1 TiB 的文件系统,可达到每 TiB 存储 2.1 TiB 的积分余额。此行为意味着文件系统可以累积足够的点数来持续突增长达 12 小时。

对切换吞吐量和更改预配置量的限制

可以切换现有文件系统的吞吐量模式并更改吞吐量。但是,在将吞吐量模式切换到预配置吞吐量或更改预配置吞吐量后,以下操作将在 24 小时内受到限制:

  • 从预配置吞吐量模式切换到弹性吞吐量模式或突增吞吐量模式。

  • 减少预配置吞吐量。

Amazon EFS 性能提示

在使用 Amazon EFS 时,请记住以下性能提示。

平均 I/O 大小

Amazon EFS 的分布式特性实现了高水平的可用性、持久性和可扩展性。这种分布式架构使得每次文件操作只产生很小的延迟开销。由于这种每次操作的延迟,总吞吐量通常会随着平均 I/O 大小增加而增加,因为开销在更大量数据之间分摊。

优化需要高吞吐量和 IOPS 的工作负载

对于需要高吞吐量和 IOPS 的工作负载,请使用配置了通用性能模式和弹性吞吐量的区域文件系统。

注意

要实现频繁访问的数据的最大读取 IOPS 为 250,000,文件系统必须使用 Elastic 吞吐量。

要实现最高级别的性能,必须通过按如下方式配置应用程序或工作负载来利用并行化。

  1. 在所有客户端和目录之间均匀分配工作负载,目录数至少与使用的客户端数量相同。

  2. 通过将各个线程与不同的数据集或文件对齐,最大限度地减少争用。

  3. 将工作负载分配到 10 个或更多的 NFS 客户端,单个装载目标中每个客户端至少有 64 个线程。

同时连接

您可以同时在多达数千个 Amazon EC2 和其他 Amazon 计算实例上挂载 Amazon EFS 文件系统。如果可以跨更多实例并行执行应用程序,则可以在跨计算实例的聚合中提高文件系统的吞吐量级别。

请求模型

如果启用对文件系统的异步写入,则待处理的写入操作会在 Amazon EC2 实例上缓冲,然后再异步写入 Amazon EFS。异步写入通常具有较低的延迟。在执行异步写入时,内核使用额外内存进行缓存。

启用了同步写入的文件系统或使用绕开缓存选项(例如 O_DIRECT)打开文件的文件系统将向 Amazon EFS 发出同步请求。每个操作都将在客户端和 Amazon EFS 之间往返一次。

注意

您选择的请求模型将在一致性(如果您使用多个 Amazon EC2 实例)和速率之间进行取舍。使用同步写入可以在处理下一个请求之前完成每个写入请求事务,从而提高数据一致性。使用异步写入可通过缓冲待处理的写入操作来提高吞吐量。

NFS 客户端挂载设置

确认您使用的是 挂载 EFS 文件系统其他挂载注意事项 中推荐的挂载选项。

在 Amazon EC2 实例上挂载文件系统时,Amazon EFS 支持网络文件系统版本 4.0 和 4.1(NFSv4)协议。与 NFSv4.0(每秒少于 1 千个文件)相比,NFSv4.1 为并行小文件读取操作提供了更高的性能(每秒大于 1 万个文件)。对于运行 macOS Big Sur 的 Amazon EC2 macOS 实例,仅支持 NFSv4.0。

请勿使用以下挂载选项:

  • noacactimeo=0acregmax=0acdirmax=0 – 这些选项会禁用属性缓存,这会对性能产生非常大的影响。

  • lookupcache=poslookupcache=none – 这些选项会禁用文件名查找缓存,这会对性能产生非常大的影响。

  • fsc – 此选项启用本地文件缓存,但不会更改 NFS 缓存的一致性,也不会减少延迟。

注意

在挂载文件系统时,请考虑将 NFS 客户端的读写缓冲区大小增加到 1 MB。

优化小文件性能

可以通过最大限度地减少文件重新打开次数、增加并行度,以及尽可能捆绑参考文件来提高小文件的性能。

  • 尽量减少往返服务器的次数。

    如果以后在工作流中需要文件,请不要不必要地关闭这些文件。保持文件描述符处于打开状态可以直接访问缓存中的本地副本。文件打开、关闭和元数据操作通常不能以异步方式或通过管道进行。

    读取或写入小文件时,两次额外往返非常重要。

    每次往返(文件打开、文件关闭)所花费的时间可能与读取或写入兆字节批量数据一样多。在计算作业开始时打开一次输入或输出文件,并在整个作业期间保持打开状态会更有效。

  • 使用并行度来减少往返时间的影响。

  • 将参考文件捆绑到 .zip 文件中。有些应用程序使用大量较小的主要是只读文件的参考文件。将这些文件捆绑到一个 .zip 文件中,只需一次打开-关闭往返操作即可读取多个文件。

    .zip 格式允许随机访问单个文件。

优化目录性能

在同时修改的超大目录(超过 10 万个文件)上执行列出操作(ls)时,Linux NFS 客户端可能会挂起而不返回响应。此问题已在内核 5.11 中修复,该内核已移植到 Amazon Linux 2 内核 4.14、5.4 和 5.10。

我们建议您在可能的情况下,将文件系统上的目录数保持在 1 万以内。尽可能多地使用嵌套子目录。

列出目录时,如果不需要文件属性,应避免获取这些属性,因为它们并未存储在目录本身中。

优化 NFS read_ahead_kb 的大小

NFS read_ahead_kb 属性定义了 Linux 内核在顺序读取操作期间要提前读取或预取的千字节数。

对于 5.4.* 之前的 Linux 内核版本,read_ahead_kb 值是通过 NFS_MAX_READAHEAD 乘以 rsize(挂载选项中设置的客户端配置的读取缓冲区大小)的值来设置的。使用推荐的挂载选项时,此公式将 read_ahead_kb 设置为 15 MB。

注意

从 Linux 内核版本 5.4.* 开始,Linux NFS 客户端使用默认 read_ahead_kb 值 128 KB。我们建议将此值增加到 15 MB。

挂载文件系统后,amazon-efs-utils 版本 1.33.2 及更高版本中提供的 Amazon EFS 挂载帮助程序会自动将 read_ahead_kb 值修改为等于 15 * rsize 或 15 MB。

对于 Linux 内核 5.4 或更高版本,如果不使用挂载帮助程序来挂载文件系统,请考虑手动将 read_ahead_kb 设置为 15 MB 以提高性能。挂载文件系统后,可使用以下命令重置 read_ahead_kb 值。在使用此命令之前,替换以下值:

  • read-ahead-value-kb 替换为所需的大小(以千字节为单位)。

  • efs-mount-point 替换为文件系统的挂载点。

device_number=$(stat -c '%d' efs-mount-point) ((major = ($device_number & 0xFFF00) >> 8)) ((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00))) sudo bash -c "echo read-ahead-value-kb > /sys/class/bdi/$major:$minor/read_ahead_kb"

以下示例将 read_ahead_kb 大小设置为 15 MB。

device_number=$(stat -c '%d' efs) ((major = ($device_number & 0xFFF00) >> 8)) ((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00))) sudo bash -c "echo 15000 > /sys/class/bdi/$major:$minor/read_ahead_kb"