

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

# Amazon FSx for Lustre 性能
<a name="performance"></a>

本章提供了 Amazon FSx for Lustre 性能主题，包括一些有关最大限度地提高文件系统性能的重要提示和建议。

**Topics**
+ [概述](#performance-overview)
+ [Lustre 文件系统的工作原理 FSx](#how-lustre-fs-work)
+ [文件系统元数据性能](#dne-metadata-performance)
+ [单个客户端实例的吞吐量](#throughput-clients)
+ [文件系统存储布局](#storage-layout)
+ [对文件系统中的数据进行条带化](#striping-data)
+ [监控性能和使用情况](#performance-monitoring)
+ [SSD 和 HDD 存储类别的性能特点](ssd-storage.md)
+ [Intelligent-Tiering 存储类别的性能特征](intelligent-tiering-file-systems.md)
+ [性能提示](performance-tips.md)

## 概述
<a name="performance-overview"></a>

Amazon FSx for Lustre 建立在流行的高性能文件系统之上Lustre，可提供随文件系统大小线性增加的横向扩展性能。 Lustre文件系统可在多个文件服务器和磁盘之间水平扩展。这种扩展让每个客户端可以直接访问存储在每个磁盘上的数据，从而消除传统文件系统中存在的诸多瓶颈。Amazon FSx for Lustre 建立在Lustre可扩展架构之上，可支持大量客户的高水平性能。

## Lustre 文件系统的工作原理 FSx
<a name="how-lustre-fs-work"></a>

每个 FSx for Lustre 文件系统都由客户机与之通信的文件服务器和一组连接到存储数据的文件服务器的磁盘组成。每台文件服务器都使用快速内存缓存来增强最常访问数据的性能。根据存储类别，可为文件服务器预置可选的 SSD 读取缓存。当客户端访问存储在内存缓存或 SSD 缓存中的数据时，文件服务器无需从磁盘读取数据，这样便可降低延迟并增加您可以驱动的总吞吐量。下图阐明了写入操作、从磁盘提供的读取操作以及从内存缓存或 SSD 缓存提供的读取操作的路径。

![\[FSx 用于 Lustre 性能架构。\]](http://docs.aws.amazon.com/zh_cn/fsx/latest/LustreGuide/images/LustrePerfDiagram.png)


 当读取存储在文件服务器的内存缓存或 SSD 缓存中的数据时，文件系统的性能取决于网络吞吐量。当将数据写入文件系统或读取未存储在内存缓存中的数据时，文件系统的性能取决于网络吞吐量和磁盘吞吐量中的较低者。

要详细了解网络吞吐量、磁盘吞吐量以及 SSD 和 HDD 存储类别的 IOPS 特性，请参阅 [SSD 和 HDD 存储类别的性能特点](ssd-storage.md) 和 [Intelligent-Tiering 存储类别的性能特征](intelligent-tiering-file-systems.md)。

## 文件系统元数据性能
<a name="dne-metadata-performance"></a>

文件系统元数据的每秒 IO 操作数（IOPS）决定了每秒可创建、列出、读取和删除的文件和目录的数量。

Persistent 2 文件系统可让您独立于存储容量之外预置元数据 IOPS，并提高对文件系统上客户端实例驱动的元数据 IOPS 数量和类型的可见性。借助 SSD 文件系统，可根据预置的存储容量自动预置元数据 IOPS。Intelligent-Tiering 文件系统不支持自动模式。

 FSx 对于 Lustre Persistent 2 文件系统，您预配置的元数据 IOPS 数量和元数据操作的类型决定了您的文件系统可以支持的元数据操作的速率。您预置的元数据 IOPS 级别决定了为文件系统的元数据磁盘预置的 IOPS 数。


| 操作类型 | 每秒可以为每个预置元数据 IOPS 执行的操作次数  | 
| --- | --- | 
|  文件创建、打开和关闭  |  2  | 
|  文件删除  |  1  | 
|  目录创建、重命名  |  0.1  | 
|  目录删除  |  0.2  | 

对于 SSD 文件系统，可选择使用“自动”模式预置元数据 IOPS。在自动模式下，Amazon FSx 会根据您的文件系统的存储容量自动配置元数据 IOPS，如下表所示：


| 文件系统存储容量 | 自动模式下包含的元数据 IOPS | 
| --- | --- | 
|  1200 GiB  |  1500  | 
|  2400 GiB  |  3000  | 
|  4800–9600 GiB  |  6000  | 
|  12000–45600 GiB  |  12000  | 
|  ≥ 48000 GiB  |  每 24000 GiB 有 12000 的 IOPS  | 

在“用户预置”模式下，可以选择指定要预置的元数据 IOPS 数。有效值如下所示：
+ 对于 SSD 文件系统，有效值为 `1500`、`3000`、`6000`、`12000` 和 `12000` 的倍数，最大值为 `192000`。
+ 对于 Intelligent-Tiering 文件系统，有效值为 `6000` 和 `12000`。

有关如何配置元数据 IOPS 的信息，请参阅 [管理元数据性能](managing-metadata-performance.md)。请注意，您需要为预置元数据 IOPS 数超出文件系统默认元数据 IOPS 数的部分付费。

## 单个客户端实例的吞吐量
<a name="throughput-clients"></a>

如果您要创建吞吐容量超过 10 GBps % 的文件系统，我们建议您启用 Elastic Fabric Adapter (EFA) 以优化每个客户端实例的吞吐量。为了进一步优化每个客户端实例的吞吐量，启用 EFA 的文件系统还支持支持 EFA 的 NVIDIA 基于 GPU 的客户端实例的 GPUDirect 存储，以及支持 ENA Express 的客户端实例的 ENA Express。

可以驱动到单个客户端实例的吞吐量取决于所选择的文件系统类型和客户端实例上的网络接口。


| 文件系统类型 | 客户端实例网络接口 | 每个客户端最大吞吐量，以 Gbps 计 | 
| --- | --- | --- | 
|  非启用 EFA 的文件系统  |  Any  |  100Gbps\$1  | 
|  启用 EFA 的文件系统  |  ENA  |  100Gbps\$1  | 
|  启用 EFA 的文件系统  |  ENA Express  |  100 Gbps  | 
|  启用 EFA 的文件系统  |  EFA  |  700 Gbps  | 
|  启用 EFA 的文件系统  |  使用 GDS 的 EFA  |  1200 Gbps  | 

**注意**  
\$1 Lustre 对象存储服务器的单个 FSx 客户端实例和个人客户端实例之间的流量限制为 5 Gbps。有关支持 f [文件系统的 IP 地址](using-fsx-lustre.md#ip-addesses-for-fs) or Lustre 文件系统的对象存储服务器 FSx 的数量，请参阅。

## 文件系统存储布局
<a name="storage-layout"></a>

中的所有文件数据Lustre都存储在名为*对象存储目标 (OSTs) 的存储*卷上。所有文件元数据（包括文件名、时间戳、权限等）都存储在名为*元数据目标* (MDTs) 的存储卷上。Amazon f FSx or Lustre 文件系统由一个或多个 MDTs 和多个 OSTs文件系统组成。Amazon FSx for Lustre 将您的文件数据分散到 OSTs 构成您的文件系统的各个部分，以平衡存储容量与吞吐量和 IOPS 负载。

要查看构成文件系统的 MDT 的存储使用情况，请在装有文件系统的客户机上运行以下命令。 OSTs 

```
lfs df -h mount/path
```

此命令的输出如下所示。

**Example**  

```
UUID                             bytes       Used   Available Use% Mounted on
mountname-MDT0000_UUID           68.7G       5.4M       68.7G   0% /fsx[MDT:0]
mountname-OST0000_UUID            1.1T       4.5M        1.1T   0% /fsx[OST:0]
mountname-OST0001_UUID            1.1T       4.5M        1.1T   0% /fsx[OST:1]

filesystem_summary:               2.2T       9.0M        2.2T   0% /fsx
```

## 对文件系统中的数据进行条带化
<a name="striping-data"></a>

您可以利用文件条带化来优化文件系统的吞吐量性能。Amazon FSx for Lustre 会自动将文件分散到各 OSTs 处，以确保所有存储服务器都能提供数据。通过配置如何在多个文件之间进行条带化处理，可以在文件级别应用相同的概念 OSTs。

条带化意味着可以将文件分成多个块，然后将其存储在不同的区块中。 OSTs当一个文件跨多个条带化时 OSTs，对该文件的读取或写入请求会分散在这些文件中 OSTs，从而增加应用程序可以驱动的总吞吐量或 IOPS。



以下是 Amazon FSx for Lustre 文件系统的默认布局。
+ 对于 2020 年 12 月 18 日之前创建的文件系统，默认布局将条带计数指定为 1。这意味着，除非指定不同的布局，否则使用标准 Linux 工具在 Amazon FSx for Lustre 中创建的每个文件都存储在单个磁盘上。
+ 对于 2020 年 12 月 18 日之后创建的文件系统，默认布局为渐进式文件布局，在这种布局中，大小低于 1GiB 的文件存储在一个条带中，而更大的文件则会分配条带计数 5。
+ 对于 2023 年 8 月 25 日之后创建的文件系统，默认布局为 4 个组件的渐进式文件布局，如 [渐进式文件布局](#striping-pfl) 中所述。
+ 对于所有文件系统，无论其创建日期如何，从 Amazon S3 导入的文件都不使用默认布局，而是使用文件系统 `ImportedFileChunkSize` 参数中的布局。大于 s3 的导入文件`ImportedFileChunkSize`将存储在多个文件中，条 OSTs带计数为。`(FileSize / ImportedFileChunksize) + 1``ImportedFileChunkSize` 的默认值为 1GiB。

您可以使用 `lfs getstripe` 命令查看文件或目录的布局配置。

```
lfs getstripe path/to/filename
```

此命令会报告文件的条带计数、条带大小和条带偏移量。*条带计数是 OSTs 指*文件被条带化的数量。*条带大小*是一个 OST 上存储的连续数据量。*条带偏移量*是文件被条带化的第一个 OST 的索引。

### 修改条带化配置
<a name="striping-modify"></a>

文件的布局参数是在首次创建文件时设置的。使用 `lfs setstripe` 命令创建新的空文件，并指定布局。

```
lfs setstripe filename --stripe-count number_of_OSTs
```

`lfs setstripe` 命令仅影响新文件的布局。您可以在创建文件前，用它来指定文件的布局。您也可以定义目录的布局。在目录上进行设置后，该布局将应用于添加到该目录的每个新文件，但不适用于现有文件。您创建的任何新子目录也会继承新布局，然后应用于您在该子目录中创建的任何新文件或目录。

要修改现有文件的布局，请使用 `lfs migrate` 命令。此命令按需复制文件，以便根据您在命令中指定的布局分发其内容。例如，追加的文件或大小增加的文件不会更改条带计数，因此您必须迁移这类文件才能更改文件布局。或者，您可以使用 `lfs setstripe` 命令创建新文件以指定其布局，将原始内容复制到新文件中，然后重命名新文件以替换原始文件。

在某些情况下，默认布局配置可能不是您工作负载的最优选择。例如，包含数十 OSTs 和大量多 GB 文件的文件系统如果将文件条带分成超过默认条带计数值 5，则性能可能会更高。 OSTs创建条带数量较低的大文件可能会导致 I/O 性能瓶颈，也可能 OSTs 导致数据填满。在这种情况下，您可以为这些文件创建一个条带计数更大的目录。

为大型文件（尤其是大于 1 GB 的文件）设置条带化布局非常重要，原因如下：
+ 允许多台服务器及其关联服务器在读取 OSTs 和写入大型文件时提供 IOPS、网络带宽和 CPU 资源，从而提高吞吐量。
+ 降低一小部分 OSTs 成为限制整体工作负载性能的热点的可能性。
+ 防止单个大文件填满 OST，从而导致磁盘已满错误。

没有适合所有使用案例的最优布局配置。有关文件布局的详细指南，请参阅 Lustre.org 文档中的 [Managing File Layout（Striping）and Free Space](https://doc.lustre.org/lustre_manual.xhtml#managingstripingfreespace)。以下是一般准则：
+ 条带化布局对大型文件最为重要，特别是对于文件大小通常为数百兆字节或以上的使用案例。因此，新文件系统的默认布局会为大小超过 1GiB 的文件分配的条带计数为 5。
+ 条带计数是您应针对支持大型文件的系统进行调整的布局参数。条带计数指定了将存放条带化文件块的 OST 卷的数量。例如，如果条带计数为 2，条带大小为 1MiB，则将文件的 1MiB 交替区块Lustre写入两个区块中。 OSTs
+ 有效条带计数是 OST 卷的实际数量和您指定条带计数值中的较小者。您可以使用特殊条带计数值 `-1` 来表示应在所有 OST 卷上放置条带。
+ 为小文件设置较大的条带计数并不是理想做法，因为对于某些操作，Lustre 需要网络往返布局中的每个 OST，即使文件非常小，无法占用所有 OST 卷上的空间。
+ 您可以设置渐进式文件布局（PFL），允许文件布局随大小变化。PFL 配置可以简化对具有大文件和小文件的文件系统的管理，而无需为每个文件明确设置配置。有关更多信息，请参阅 [渐进式文件布局](#striping-pfl)。
+ 默认情况下，条带大小为 1MiB。在特殊情况下，设置条带偏移量可能很有用，但一般而言，最好不指定条带偏移量并使用默认值。

### 渐进式文件布局
<a name="striping-pfl"></a>

您可以为目录指定渐进式文件布局（PFL）配置，以便在填充目录前为小文件和大文件指定不同的条带配置。例如，您可以在将任何数据写入新文件系统前，在顶级目录上设置 PFL。

要指定 PFL 配置，请使用 `lfs setstripe` 命令和 `-E` 选项为不同大小的文件指定布局组件，例如以下命令：

```
lfs setstripe -E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32 /mountname/directory
```

此命令设置了四个布局组件：
+ 第一个组件（`-E 100M -c 1`）表示大小不超过 100MiB 的文件的条带计数值为 1。
+ 第二个组件（`-E 10G -c 8`）表示大小不超过 10GiB 的文件的条带计数为 8。
+ 第三个组件（`-E 100G -c 16`）表示大小不超过 100GiB 的文件的条带计数为 16。
+ 第四个组件（`-E -1 -c 32`）表示大于 100GiB 的文件的条带计数为 32。

**重要**  
向使用 PFL 布局创建的文件追加数据会填充其所有布局组件。例如，使用上面显示的 4 组件命令，如果您创建一个 1MiB 文件，然后在文件末尾添加数据，则该文件的布局将扩展为条带计数为 -1，即系统 OSTs 中的所有条带计数。这并不意味着数据会被写入每个 OST，但是读取文件长度之类的操作会并行向每个 OST 发送请求，从而给文件系统增加巨大的网络负载。  
因此，对于任何随后可能追加数据的任何中小长度文件，请注意限制其条带计数。由于日志文件通常通过附加新记录而增长，因此 Amazon for Lustre 会 FSx 为在追加模式下创建的任何文件分配默认条带计数 1，无论其父目录指定的默认条带配置如何。

亚马逊上在 2023 年 8 月 25 日之后创建 FSx 的 Lustre 文件系统的默认 PFL 配置是使用以下命令设置的：

```
lfs setstripe -E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32 /mountname
```

如果客户的工作负载对中型和大型文件具有高度并发访问权限，则客户可能会受益于这样的布局：在较小的尺寸下使用更多的条带，而 OSTs 对于最大的文件，则在所有条带上都采用条带化处理，如四部分示例布局所示。

## 监控性能和使用情况
<a name="performance-monitoring"></a>

Amazon f FSx or Lustre 每分钟都会向亚马逊发布每个磁盘（MDT 和 OST）的使用率指标。 CloudWatch

要查看聚合文件系统使用情况的详细信息，可以查看每个指标的 Sum 统计数据。例如，`DataReadBytes`统计数据总和报告文件系统 OSTs 中所有人看到的总读取吞吐量。同样，`FreeDataStorageCapacity` 统计数据 Sum 会报告文件系统中文件数据的总可用存储容量。

有关监控文件系统性能的更多信息，请参阅[监控 Amazon FSx for Lustre 文件系统](monitoring_overview.md)。