本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 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) |
注意
脚注:
-
延迟性能适用于在 2022 年 12 月 17 日当天或之后创建的所有可用 Amazon EFS Amazon Web Services 区域 的地方创建的文件系统和挂载目标。要在该日期之前创建的文件系统上达到指定的延迟性能,您需要删除并重新创建与该文件系统关联的挂载目标。
向成本优化的存储类别(标准 IA 和 One Zone-IA)读写文件数据的延迟很低,为两位数毫秒。
最大读取和写入吞吐量取决于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 的计量数据 |
|
|
标准存储中有 1 TiB 的计量数据 |
|
|
标准存储中有 10 TiB 的计量数据 |
|
|
通常,较大的文件系统 |
|
|
注意
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。
请勿使用以下挂载选项:
noac
、actimeo=0
、acregmax=0
、acdirmax=0
— 这些选项会禁用属性缓存,这会对性能产生非常大的影响。lookupcache=pos
,lookupcache=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 "echoread-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"