优化 Azure 托管 Lustre 中的文件和目录布局

本文提供有关使用 AMLFS 缩放文件和目录布局以实现最佳性能的信息。

概述

Azure 托管 Lustre AMLFS 使用 Lustre 文件系统的高级文件和目录条带化技术来提供可扩展的高性能存储。 了解文件和目录如何在存储节点之间分布,这一点对于最大程度地提高性能和高效管理大型数据集至关重要。 本文概述了 AMLFS 的默认文件和目录布局,并提供高级优化建议。

AMLFS 中的文件和目录条带化

Lustre 的一个关键性能特性——AMLFS 也同样具备这一特性——是能够将文件和目录同时条带化(或分片)到多个存储资源上,以平衡并优化系统性能。 使用 AMLFS 实例部署的对象存储目标(OST)和元数据目标服务器(MDT)的数量决定了文件和目录的分布方式。 较大的 AMLFS 部署通常具有更多的 OST 和 MDT,从而提高容量和并行性能。

若要查看部署中的 OST 和 MDT 数量,请在装载 Lustre 的任何客户端节点上运行以下命令:

lfs df -h

AMLFS 中的默认文件布局

默认情况下,AMLFS 对所有文件使用渐进式文件布局(PFL)。 PFL 根据文件大小调整条带化,以平衡性能和资源使用情况。 布局是使用以下命令在文件系统的根目录中预设的:

lfs setstripe -E 1G -c 1 -E 100G -c 5 -E 500G -c 10 -E -1 -c -1 [/lustrefs]
  • 小于 1 GB 的文件存储在单个 OST 上,将开销降至最低,并最大程度地提高小型文件的性能。
  • 从 1 GB 到 101 GB 的数据分布在 5 个 OST 之间。
  • 将 101 GB 到 601 GB 的数据分布在 10 个 OST 上。
  • 超过 601 GB 的数据分布在所有可用的 OST 中,以最大化大型文件的吞吐量。
  • 如果部署少于 10 个 OST,则 AMLFS 会根据前面引用的大小使用可用的最大数量。

此默认布局适用于大多数用例。 高级用户可以使用 lfs setstripe 命令为特定性能要求自定义文件条带化。 例如,若要通过始终在所有 OST 中进行条带化来最大化单个大型文件的并行吞吐量,可以尝试通过以下方法创建该文件:

lfs setstripe -c -1 [file]

无论文件大小如何,文件都会在所有可用的 OST 中自动条带化。

这种条带化可能会使高度并行的工作负荷受益,这些工作负荷依赖于跨多个装载的客户端的单个文件的最大读取吞吐量。

不建议在小型文件上使用。

注释

修改条带化参数是一项高级操作。 不当使用可能会影响性能或存储效率。 请参阅 Lustre 手册 ,并查看 lfs setstripe -h 详细选项。 在生产环境中应用新配置之前对其进行基准测试。

目录大小和组织

Lustre 支持分层命名空间,与平面对象存储系统(如 Blob 存储)不同。 规划目录结构时,请记住以下最佳做法:

  • 将数据组织成具有多个目录的分层结构,而不是单个大型目录。 此多目录结构可减少并行工作负荷的争用并提高整体元数据性能。
  • 虽然 Lustre 在技术上可以管理每个目录数亿个条目甚至更多,但当需要进行高并发元数据访问或目录扫描操作(如使用 ls -lRrm -Rf)时,大型目录可能会导致性能下降或锁争用。
  • 最大程度地减少大型目录的重复并行扫描,尤其是包含 Linux stat 操作,例如 ls -l ,以避免元数据瓶颈。

使用多个 MDT 优化目录布局

大型 AMLFS 部署(在许多 SKU 上达到 1 PiB 以上,或在其他 SKU 上达到 2.5 PiB)通过预配多个元数据目标 (MDT) 以扩大元数据操作能力和文件计数。 每个 MDT 在正确配置时,可以线性扩展元数据操作的最大每秒处理量和最大文件计数,这取决于平均文件大小。

若要检查有多少 MDT 可用,请从装载的客户端运行以下命令:

lfs df -h

如果您的部署中只有一个MDT(主目录树),那么默认布局优化就足够了,同时请遵循上一部分中关于目录大小的最佳实践。 使用多个 MDT 时,AMLFS 会在首次部署 AMLFS 时运行以下默认的根级命令,通过所有 MDT 依次轮流自动旋转目录:

lfs setdirstripe -D -i -1 -c 1 --max-inherit=-1 --max-inherit-rr=-1 [/lustrefs]
  • 通过为根目录下创建的所有目录配置循环分配策略,将它们在 MDT 中均匀分布,以优化性能平衡。
  • 分层结构中具有许多目录的工作负荷会自动受益于此布局,从而最大程度地提高元数据吞吐量和可伸缩性。

此默认方案无需手动放置目录,并且适用于大多数用户。 此外,包括包含多个目录而不是单个大型目录的分层目录方案,有助于在 AMLFS 实例的 MDT 之间自动平衡元数据工作负荷。

高级目录布局选项

高级用户可以使用 lfs setdirstripe 任何 Lustre 客户端进一步自定义目录放置,以便:

  • 使用 -c 参数 lfs setdirstripe 将单个大型目录分布到多个 MDT 上,以提高元数据性能。 这可以通过将大型目录跨多个 MDT 条带化来提高并行文件访问性能,但可能对并行目录扫描没有显著改善。
  • 将特定的 MDT 分配给关键目录或高性能目录。
  • 使用 lfs migrate.. 重新平衡创建后的目录。

Important

这些优化是高级的,应谨慎处理。 在更改超出默认配置之前,请参阅 Lustre 手册 并使用 lfs setdirstripe -h 帮助。 在将更改部署到生产工作负荷之前,请务必对其进行基准测试。

后续步骤

本文介绍了 AMLFS 如何自动为大多数工作负荷应用优化的文件和目录布局。 若要了解有关 Azure 托管 Lustre 的详细信息,请参阅 Azure 托管 Lustre 文档