选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

Amazon EFS 性能

聚焦模式
Amazon EFS 性能 - Amazon Elastic File System

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

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

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

性能摘要

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

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

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

    重要

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

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

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

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

文件系统类型

吞吐量模式

读取操作

写入操作

读取操作

写入操作

P er-file-system read 1

P er-file-system 写入 1

按客户端读取/写入

区域性

弹性

低至 250 微秒(µs)

低至 2.7 毫秒 (ms) 900,000—2,500,000 2 500,000 2

每秒 10—60 千兆字节 () GiBps

1—5 GiBps

每秒 1,500 兆字节 (3) MiBps

区域性

已预置

低至 250 微秒

低至 2.7 毫秒 55,000 25000

3—10 GiBps

1—3.33 GiBps

500 MiBps

区域性

突增

低至 250 微秒

低至 2.7 毫秒 35000 7,000

3—5 GiBps

1—3 GiBps

500 MiBps

单区

弹性、预配置、爆发

低至 250 微秒

低至 1.6 毫秒

35000 7,000

3 GiBps 4

1 GiBps 4

500 MiBps
注意

脚注:

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

  2. 默认情况下,使用弹性吞吐量的文件系统对不经常访问的数据最多可带动 90,000 个读取 IOPS,为经常访问的数据带来 250,000 个读取 IOPS,50,000 个写入 IOPS。如果您的工作负载需要更高的 IOPS,则您可以请求将这些数字最多增加 10 倍。有关更多信息,请参阅 您可以提高的 Amazon EFS 配额。其它建议适用于实现最大 IOPS。有关更多信息,请参阅 优化需要高吞吐量和 IOPS 的工作负载

  3. MiBps 对于使用弹性吞吐量并使用版本 2.0 或更高版本的 Amazon EFS 客户端(amazon-efs-utils 版本)或 Amazon EFS CSI 驱动程序(aws-efs-csi-driver)装载的文件系统,最大合并读写吞吐量为 1,500。对于所有其他文件系统,吞吐量限制为 500 MiBps。有关 Amazon EFS 客户端的更多信息,请参阅安装 Amazon EFS 客户端

  4. 使用突增吞吐量的单区域文件系统可以驱动与使用突发吞吐量的区域文件系统相同的 per-file-system读取和写入吞吐量(读取的最大读取量为 5,写入的最大读 GiBps 取量为 3 GiBps )。

存储类

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

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

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

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

性能模式

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

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

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

    重要

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

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

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

吞吐量模式

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

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

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

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

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

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

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

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

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

弹性吞吐量

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

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

注意

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

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

预配置吞吐量

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

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

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

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

突增吞吐量

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

当突发积分可用时,文件系统最多可以将吞吐量提高到 MiBps每 TiB 存储 100,不 AWS 区域 超过限制,最小为 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 计量数据
  • 以 GiBps 只读模式突变为 3,每天 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,文件系统必须使用 Elastic 吞吐量。

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

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

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

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

同时连接

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

请求模型

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

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

注意

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

NFS 客户端挂载设置

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

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

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。