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

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

亚马逊 EFS 性能

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

性能摘要

文件系统性能通常使用延迟、吞吐量和每秒输入/输出操作数 (IOPS) 等维度来衡量。Amazon EFS 在这些方面的性能取决于您的文件系统的配置。以下配置会影响 Amazon EFS 文件系统的性能:

  • 存储类别 — EFS 标准存储或 EFS 单区域

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

    重要

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

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

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

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

存储类别

吞吐量模式

读取操作

写入操作

读取操作

写入操作

P er-file-system read 2

P er-file-system writ e 2

每个客户端的读取/写入

标准

Elastic

低至 250 微秒

As low as 2.7 ms 55,000 25,000

3—10 GiBps

1—3 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. 延迟性能适用于在 2022 年 12 月 17 日当天或之后创建的所有可用 Amazon EFS Amazon Web Services 区域 的地方创建的文件系统和挂载目标。要在该日期之前创建的文件系统上达到指定的延迟性能,您需要删除并重新创建与该文件系统关联的挂载目标。

    向成本优化的存储类别(标准 IA 和 One Zone-IA)读写文件数据的延迟很低,为两位数毫秒。

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

存储类别和性能

Amazon EFS 使用以下存储类别:

  • EFS 单区域存储类别 — EFS 单区域和 EFS 单区域不频繁访问(EFS 单区域-IA)。EFS One Zone 存储类在单个可用区内复制数据。

  • EFS 标准存储类别 — EFS 标准和 EFS 标准-IA。EFS 标准存储类跨多个可用区(多可用区)复制数据。

读取或写入任一 IA 存储类别时的首字节延迟高于 EFS 标准或 EFS One Zone 存储类别的延迟。

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

性能模式

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

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

  • Max I/O 模式是上一代性能类型,专为高度并行化的工作负载而设计,这些工作负载可以容忍比通用模式更高的延迟。最大 I/O 模式支持一组有限的 EFS 特性和功能。例如,最大 I/O 不能用于 EFS One Zone 文件系统或使用弹性吞吐量模式的文件系统。

    重要

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

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

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

吞吐量模式

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

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

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

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

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

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

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

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

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

弹性吞吐量模式

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

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

注意

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

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

预配置吞吐量模式

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

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

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

有关每个区域的预配置吞吐量限制的信息,请参阅。您可以增加的 Amazon EFS 配额

突增吞吐量模式

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

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

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

了解 Amazon EFS 突发积分

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

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

例如,在 EFS 标准存储中包含 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 小时内受到限制:

  • 从预配置模式切换到弹性模式或突发模式。

  • 减少预配置吞吐量。

亚马逊 EFS 性能提示

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

平均 I/O 大小

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

同时连接

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

请求模型

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

已启用同步写入功能的文件系统,或者使用绕过缓存的选项打开文件的文件系统(例如O_DIRECT),会向 Amazon EFS 发出同步请求。每项操作都要在客户端和 Amazon EFS 之间往返。

注意

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

NFS 客户端装载设置

请确认您使用的是中装载 EFS 文件系统和中概述的推荐装载选项其他安装注意事项

在亚马逊 EC2 实例上安装文件系统时,Amazon EFS 支持网络文件系统版本 4.0 和 4.1 (NFSv4) 协议。与 NFSv4.0(每秒少于 1,000 个文件)相比,NFSv4.1 为并行小文件读取操作(每秒大于 10,000 个文件)提供了更好的性能。对于运行 macOS Big Sur 的亚马逊 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 中修复,该内核已移植到亚马逊 Linux 2 内核 4.14、5.4 和 5.10。

如果可能,我们建议将文件系统上的目录数保持在 10,000 以下。尽可能使用嵌套子目录。

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

优化 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。

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

对于 Linux 内核 5.4 或更高版本,如果您不使用挂载帮助程序来装载文件系统,请考虑手动设置为 15 MB read_ahead_kb 以提高性能。挂载文件系统后,您可以使用以下命令重置该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"