1. NVIDIA GPUDirect Storage Release Notes#

NVIDIA® Magnum IO GPUDirect® Storage 的发布信息。

2. 简介#

面向开发者和用户的 NVIDIA® GPUDirect® Storage (GDS) 发布信息。

NVIDIA Magnum IO GPUDirect Storage (GDS) 是 GPUDirect 技术家族的成员之一。GDS 支持 GPU 内存和存储之间直接内存访问 (DMA) 传输的直接数据路径。此直接路径增加了 IO 带宽,减少了 IO 延迟,并降低了主机 CPU 的利用率负载。

GDS 通常在第三方存储解决方案上可用,例如 DDN EXAScaler、Dell EMC Isilon、IBM Spectrum Scale、NetApp ONTAP 和 BeeGFS、WekaFS、VAST NFS、Dell Isilon 和 Micron。有关完整列表,请参阅支持矩阵。GDS 文档和在线资源为 GPUDirect Storage 的最佳使用和理解提供了额外的背景信息。

有关 GDS 的更多信息,请参阅以下指南

要了解有关 GDS 的更多信息,请参阅以下文章

3. 新特性和变更#

v1.13 中添加了以下特性

  • 改进了使用线程池的较大 IO 大小的未注册缓冲区 IO 性能。

  • 通过增加内部反弹缓冲区大小,改进了未注册缓冲区 IO 性能。可以使用 JSON 参数 per_buffer_cache_size_kb 将大小配置为最大 16MiB。

  • 在 Grace+Hopper 系统上,DDN Exascaler GDS p2p 模式支持 64K 内核页面大小,用于 4KB 对齐但不 64K 对齐的传输大小。

  • 更新了 nvidia-fs.ko 以支持更多 PCIe 设备,以支持 Amazon Fsx for Lustre。

  • 驱动程序关闭和批量关闭操作期间的稳定性修复。

  • 为 GDS 添加了对新的 “NVME P2PDMA” 特性的支持。此模式支持带有 NVMe linux 上游驱动程序的 GDS,最低内核版本 >= 6.2 (Ubuntu 22.04) 和 5.14 (RHEL 9.4) 在 x86_64 平台上。此特性将消除对自定义 MOFED NVMe 补丁和 nvidia-fs.ko 的需求,以支持带有 Ext4 和 XFS 以及 NVMe 驱动器的 GDS。

先前版本中引入的特性

v1.11.1

  • 各种错误修复。

v1.11

  • 添加了对 RHEL 8.10、RHEL 9.4 和 UB 24.04 的支持。

  • 各种错误修复。

v1.10.1

  • 各种错误修复。

v1.10

  • 各种错误修复。

v1.9.1

  • 各种错误修复。

v1.9

  • 添加了对 RHEL 9.3 和 UB 22.04.3 的支持。

v1.8.1

  • 在 Grace Hopper 平台上为 EXT4 文件系统与本地 NVMe 添加了对 RHEL 9.2 的支持,具有 64K 主机 OS 页面大小。

  • 通过在兼容模式下添加拓扑感知,提高了应用程序的 IO 吞吐量性能。

v1.8

  • 各种错误修复。

v1.7.2

  • 为 Ubuntu 22.04 上具有 HWE 内核的 EXT4 文件系统与本地 NVMe 添加了 Grace Hopper 平台支持,具有 64K 主机 OS 页面大小。

  • 不支持专有的 NVIDIA 内核模块。仅支持 NVIDIA 开放内核 模块。

  • cuFile API 可以在兼容模式下的云服务提供商环境中使用。

v1.7

  • 完成了对 API cuFileStreamRegistercuFileStreamDeregistercuFileReadAsynccuFileWriteAsync 的支持。这使得可以将 CUDA 流与 cuFile API 一起使用。

  • cuFile API 可以与系统内存一起使用。

  • cuFile API 现在可以与非 O_DIRECT 文件描述符一起使用。

  • 默认情况下启用线程池支持,并且对于支持 CUDA 流的 cuFile API 是必需的。

v1.6.1

  • 改进了批量 API 性能。

  • 在 cuFile 库中实现了线程池,以实现并行性并提高使用单个用户线程的大型 IO 请求的吞吐量。

v1.5.1

  • 各种错误修复。

v1.5

  • 为带有 cuFile API 的 cuMem* 内存分配添加了支持。

v1.4

  • Hopper PCIe 支持。

  • RHEL 9.0 和 Ubuntu 22.04 支持。

v1.3.1

  • 现在可以通过 CUDA .run 文件安装 GDS。

  • 支持 Ubuntu 22.04 和 RHEL9。

  • 改进了用户空间 RDMA 文件系统的 NIC 到 GPU 的亲和性。

v1.3

  • Linux dma-buf 的初始支持。

v1.2.1

v1.2

  • BeeGFS 支持。

  • XFS 支持。

  • 可用于使用的批量 API(Alpha 级别支持)。

v1.1.1

  • 对于用户空间 RDMA 文件系统(GPFS、Weka),使用 nvidia_peermem 默认值。为了使用 nvidia_peermem,请使用以下命令加载它

    # modprobe nvidia_peermem
    
  • 添加了对 BeeGFS 的支持(预览)。

v1.1

  • XFS 文件系统已添加到受支持文件系统的列表中,处于 beta 支持级别。

  • 改进了对未注册缓冲区的支持。

  • 为每个作业选项的 gdsio 配置文件添加了选项 start_offsetio_size

  • 提高了本地文件系统的 4K 和 8K IO 大小的性能。

  • 为内部 cuFile CUDA 流添加了用户可配置的优先级。

v1.0

  • cuFile 库的新配置和环境变量。

  • 修复了 Weka 可重试和不受支持的错误的处理行为。

  • 移除了对 librcu-bp 的硬依赖。

  • 添加了对 IBM Spectrum Scale 的读取支持。

v0.95

  • 默认情况下启用与 POSIX IO 的兼容性。

  • RHEL 8.3 的 Alpha 级别支持。

  • GDS 可作为 DGX OS 的技术预览版使用。

  • 支持 NVMe 和 NVMeOF 的 MLNX_OFED 5.3。

  • 支持 Excelero NVMesh 设备。

  • 支持 ScaleFlux 计算存储。

  • 与 DALI® 和 PyTorch 集成。

  • cuDF 的实验性 RAPIDS 集成,未优化,仅读取。

4. MLNX_OFED 和文件系统要求#

以下是 GDS 的 MLNX_OFED 和文件系统要求

  • 必须在安装 GDS **之前**安装 MLNX_OFED。有关安装 MLNX_OFED 的更多信息,请参阅安装 GPUDirect Storage

  • nvidia-fs.ko 需要 Linux 内核 4.15.x 及以上版本。

注意

目前任何公开可用的 MLNX_OFED 版本均不支持 Ubuntu 22.04.3。

MLNX_OFED 版本

支持的发行版

注释

5.4-x (LTS)

Ubuntu 18.04、20.04、22.04、RHEL 8.x (>8.4)、RHEL 9

长期支持版本

5.5-x

Ubuntu 18.04、20.04、RHEL 8.4、RHEL 8.6

5.6-x

Ubuntu 18.04、20.04、RHEL 8.4、RHEL 8.6

5.7-x

Ubuntu 18.04、20.04、RHEL 8.4、RHEL 8.6

不支持 RHEL9 和 UB22.04

5.8-x (LTS)

Ubuntu 18.04、20.04、22.04、RHEL 8.x (>8.4)、RHEL 9、Rocky Linux 9.x、RockyLinux 8.x

5.9-x

UB22.04 和 RHEL 9.1、8.7

NVMeOF 不起作用。

23.04-x

UB22.04 和 RHEL 9.2、8.8

NVMeOF 不起作用。

23.07-x

UB22.04 和 RHEL 9.2、8.8

NVMeOF 不起作用

23.10

UB22.04 和 RHEL 9.2

24.04-x

UB24.04 和 RHEL 9.4

5. 支持矩阵#

支持的 GPU:计算能力 > 6 的数据中心和 Quadro(桌面)卡在 GDS 模式下受支持,此处列出。所有其他卡仅在兼容模式下受支持。

合作伙伴/分布式文件系统

合作伙伴公司

合作伙伴产品版本

兼容的 GDS 版本

日期

DDN

EXAScaler 5.2 及更高版本

EXAScaler 6.0 及更高版本

1.1 及更高版本

2021 年 11 月

DellEMC

PowerScale 9.2.0.0

1.0

2021 年 10 月

Hitachi Vantara

HCSF

1.0

2021 年 10 月

HPE Ezmeral

5.5

1.3.1 及更高版本

2023 年 2 月

HPE Cray ClusterStor

Neo 4.2 及更高版本

1.0 及更高版本

2021 年 9 月

HPE GreenLake File Storage

3.0

1.10

2024 年 6 月

IBM

Spectrum Scale 5.1.2 及更高版本

1.1 及更高版本

2021 年 11 月

NetApp

ONTAP 9.10.1

1.0 及更高版本

2022 年 1 月

NetApp

ThinkParQ

System Fabrics Works

7.3.0

1.1.1 及更高版本

2022 年 3 月

Pure Storage

FlashBlade

1.7 及更高版本

2023 年 12 月

VAST

Universal Storage 4.1

1.1 及更高版本

2021 年 11 月

WekaIO

WekaFS 3.13

1.0

2021 年 6 月

注意

基于 Grace CPU(NVIDIA 的 Arm 架构 CPU)的平台不支持分布式文件系统。

6. GDS 启用的库/框架#

GDS 已在以下库和框架中启用

7. 包含的软件包#

GDS 软件包包含以下 Debian 软件包

  • gds-tools-12-8_*.deb

  • libcufile-12-8*.deb

  • libcufile-dev-12-8_*.deb

  • nvidia-fs_2.24.*.deb

  • nvidia-fs-dkms_2.24.*.deb

  • nvidia-gds-12-8_*.deb

  • nvidia-gds_12-8.*.deb

注意

每个组件都有一个 README 文件。例如,对于 gds-tools,README 文件位于 /usr/local/CUDA-12-8/gds/tools/ 目录中。

8. 次要更新和错误修复#

版本 1.13 中进行了以下次要更新和错误修复

  • 次要错误修复。

9. 已知问题#

  • RHEL 9.5 的 x86 上目前不支持 NVME P2PDMA 模式。

  • 当 linux 内核中启用 KASLR 时,NVME P2PDMA 在 x86_64 平台上可能会失败。可以通过指定 nokaslr 内核参数来禁用此功能。

  • 在未启用 nvidia-persistenced 的情况下,NVME P2PDMA 可能会增加 B200 平台启动驱动程序初始化所需的时间。

  • 与带有 nvidia-fs.ko 的 GDS P2PDMA 相比,x86_64 平台上使用 NVME P2PDMA 的 Ext4 上稀疏文件 IO 性能较慢。

  • 通过 .run 文件安装时,如果未安装 MLN_OFED,则 GPUDirect Storage 组件的安装将失败。

  • 当应用程序无法访问 udev 信息时,cuFile 库可能无法正确加载 GPU 拓扑信息。确保已安装正确的 udev 库。

  • 当用户在未在注册缓冲区上调用 cuFileBufDeregister 的情况下释放 CUDA 内存时,nvidia-fs 可能会在 nv_p2p_dma_map_pagesnv_p2p_mem_info_free_callback 函数中死锁。

  • 在 DDN EXAScaler 文件系统上

    • 对于 2.12.5_ddn10 之前的版本,当条带计数 > 1 时,cuFileReadcuFileWrite 在启用轮询模式的情况下不起作用。

    • 对于 2.12.5_ddn10,任何超出 EOF 的读取都会导致 nvidia-fs 内部的 BUG_ON。

  • 当处理具有多个 GPU 的 cuMemMap 分配时,如果对 GPU 缓冲区的 IO 请求未 4K 对齐且跨越多个 GPU,则 cuFileReadcuFileWrite API 将失败。

10. 已知限制#

本节提供有关此 GDS 版本中已知限制的信息。

  • RAID0 和多路径 NVMe 支持不支持带有 NVME P2PDMA 特性的 GPUDirect Storage。

  • vGPU 支持最新的带有 OpenRM 的 GPU;也就是说,支持带有 Ada Lovelace、Hopper 及更高版本的 GPU。A100 和更早版本的 GPU 不支持 OpenRM。

  • Grace-Hopper 的所有 OS(BaseOS/RHEL/SLES)都需要启用持久性。

  • 基于 CUDA 流的 API

    • CUDA 图形不支持 cuFile Stream API。

    • GPFS 和 WekaFS 的 cuFile Stream API 仅在兼容模式下受支持。

    • 当 cuFile 配置参数 execution.parallel_io 为 false 或 execution.max_io_threads 设置为 0 时,不支持 cuFile Stream API。

    • 使用 cuFileDriverGetProperties 查询时,Props.fflags 中未设置 CU_FILE_STREAMS_SUPPORTED 位。

  • nvidia-smi 实用程序报告的可用 BAR1 内存不准确,这是由于 CUDA 工具包的一些内部开销造成的。因此,即使 nvidia-smi 实用程序显示有可用的 BAR1 内存,任何 GDS 应用程序对 BAR1 内存的大量分配都可能遇到 ENOMEM 错误。

  • P2P 模式下的 GPUDirect storage 不支持 NVMe 端到端数据保护功能。为了支持 p2p 模式下的 GDS,NVMe 必须使用保护信息进行格式化,其中 Metadata Size 设置为零字节。

  • 不再支持 CentOS 7.x。

  • 必须为 GDS 禁用文件系统客户端侧的校验和。

  • 使用 fork() 系统调用的应用程序不支持 cuFile API。

  • GDS 兼容模式仅在 GDS 合格的文件系统上进行测试:ext4、EXAScaler、XFS、WekaFS、IBM Spectrum Scale、VAST 和 BeeGFS。

  • 在 x86-64 平台上,不能保证启用 “IOMMU=on” 或 ACS 的 GDS 在功能上或性能上都能正常工作。

  • 有关 IBM Spectrum Scale 与 GDS 的限制,请参阅以下文档:https://www.ibm.com/docs/en/spectrum-scale/5.1.5?topic=architecture-gpudirect-storage-support-spectrum-scale

  • Linux 内核版本和 nv_peer_mem 的升级

    WekaFS 不支持带有 GDS 的较新 MLNX_OFED 版本 5.3.x 及以上版本。nvidia-peer-memory-dkms=1.1-0-nvidia2 是 WekaFS 的 GDS 支持所必需的。请按照 GDS 故障排除和安装指南 的第 2.2 节中的说明进行操作。

  • RHEL 8.3 或更高版本没有用于检测 RAID 成员的默认 udev 规则,这会禁用 RAID 卷上的 GDS。请参阅 GDS 安装和故障排除指南 中的 “为 RAID 卷添加 udev 规则” 部分。

  • 使用 “NVME P2PDMA” 功能时,稀疏文件读取性能可能很慢。

11. 声明#

本文档仅供参考,不应被视为对产品的特定功能、状况或质量的保证。NVIDIA Corporation(“NVIDIA”)对本文档中包含信息的准确性或完整性不作任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。NVIDIA 对因使用此类信息而造成的后果或使用,或可能因其使用而侵犯第三方专利或其他权利的行为不承担任何责任。本文档不构成对开发、发布或交付任何材料(如下定义)、代码或功能的承诺。

NVIDIA 保留随时对此文档进行更正、修改、增强、改进和任何其他更改的权利,恕不另行通知。

客户在下订单之前应获取最新的相关信息,并应验证此类信息是否为最新且完整。

NVIDIA 产品根据订单确认时提供的 NVIDIA 标准销售条款和条件进行销售,除非 NVIDIA 和客户的授权代表签署的个别销售协议(“销售条款”)另有约定。NVIDIA 特此明确反对将任何客户通用条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档不直接或间接地形成任何合同义务。

NVIDIA 产品并非设计、授权或保证适用于医疗、军事、飞机、航天或生命维持设备,也不适用于 NVIDIA 产品的故障或故障可能合理预期会导致人身伤害、死亡或财产或环境损害的应用。NVIDIA 对在此类设备或应用中包含和/或使用 NVIDIA 产品不承担任何责任,因此,此类包含和/或使用由客户自行承担风险。

NVIDIA 不保证或声明基于本文档的产品将适用于任何特定用途。NVIDIA 不一定会执行每个产品的所有参数的测试。客户全权负责评估和确定本文档中包含的任何信息的适用性,确保产品适合且适用于客户计划的应用,并为该应用执行必要的测试,以避免应用或产品的默认设置。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同的条件和/或要求。NVIDIA 对可能基于或归因于以下原因的任何默认设置、损坏、成本或问题不承担任何责任:(i)以任何与本文档相悖的方式使用 NVIDIA 产品,或(ii)客户产品设计。

本文档未授予 NVIDIA 专利权、版权或其他 NVIDIA 知识产权下的任何明示或暗示的许可。NVIDIA 发布的有关第三方产品或服务的信息不构成 NVIDIA 授予的使用此类产品或服务的许可,也不构成对其的保证或认可。使用此类信息可能需要获得第三方在其专利或其他知识产权下的许可,或获得 NVIDIA 在其专利或其他 NVIDIA 知识产权下的许可。

只有在事先获得 NVIDIA 书面批准的情况下,才允许复制本文档中的信息,复制时不得进行更改,并且必须完全遵守所有适用的出口法律和法规,并且附带所有相关的条件、限制和声明。

本文档和所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”)均按“原样”提供。NVIDIA 对材料不作任何明示、暗示、法定或其他形式的保证,并明确声明不承担任何关于不侵权、适销性和适用于特定用途的暗示保证。在法律未禁止的范围内,在任何情况下,NVIDIA 均不对因使用本文档而引起的任何损害(包括但不限于任何直接、间接、特殊、偶然、惩罚性或后果性损害,无论因何种原因造成,也无论责任理论如何)承担责任,即使 NVIDIA 已被告知可能发生此类损害。尽管客户可能因任何原因而遭受任何损害,但 NVIDIA 对本文所述产品的客户的累计责任应根据产品的销售条款进行限制。

12. OpenCL#

OpenCL 是 Apple Inc. 的商标,已获得 Khronos Group Inc. 的许可使用。

13. 商标#

NVIDIA、NVIDIA 徽标、CUDA、DGX、DGX-1、DGX-2、DGX-A100、Tesla 和 Quadro 是 NVIDIA Corporation 在美国和其他国家/地区的商标和/或注册商标。其他公司和产品名称可能是与其关联的各自公司的商标。