13.2. 为 GPGPU 和其他 CXL 加速器内存用例配置 ZONE_NORMAL


当 GPGPU 或其他加速器工作负载需要稳定的直接内存访问(DMA)来共享 CXL 内存时,将 CXL 内存配置为 ZONE_NORMAL。在 DMA 传输过程中,页面地址必须保持固定,因此内核会从 ZONE_NORMAL 分配该内存。

通过 udev 覆盖将 CXL 内存配置为 ZONE_NORMAL,适用于需要稳定的 DMA 访问 CXL 内存的 GPGPU 设备和其他基于 CXL 的加速器。

常规进程使用 ZONE_MOVABLE 内存区域,但内核和驱动程序没有。如果内核或驱动程序在内存设备上使用区域,则无法删除该设备。

GPGPU 设备和其他基于 CXL 的加速器可能需要将 CXL 内存设备区域用于人工智能(AI)处理。在这种情况下,默认的 udev 设置将内存分配给 ZONE_MOVABLE,并可在以下工作负载中防止稳定的 DMA 传输:

  • 使用共享 CXL 内存在 GPU 间存储和引用数据。例如,AI 或大型语言模型工作负载中的键值缓存。
  • 处理超过板载 GPU 内存或标准双数据率(DDR)内存的大规模 GPGPU 数据。

先决条件

  • 您在系统中具有 root 权限。
  • 您检查了设备驱动程序文档,并确认稳定的 DMA 到 CXL 内存需要 ZONE_NORMAL 内存。

    重要

    当您将内存配置为 ZONE_NORMAL 时,内核和驱动程序可以使用它。您可能无法安全地删除关联的内存设备。只有在工作负载需要设备 DMA 访问 CXL 内存,且受影响内存设备不需要 hot-remove 时,才使用此配置。

流程

  1. 将默认规则复制到本地覆盖目录中:

    # cp /usr/lib/udev/rules.d/40-redhat-hotplug.rules /etc/udev/rules.d/
  2. 通过在内存热插规则中将 online_movable 改为 online_kernel,在文本编辑器中编辑 /etc/udev/rules.d/40-redhat-hotplug.rules

    删除前:

    ENV{.state}="online"
    CONST{virt}=="none", ENV{.state}="online_movable"
    ATTR{state}=="offline", ATTR{state}="$env{.state}"

    删除后:

    ENV{.state}="online"
    CONST{virt}=="none", ENV{.state}="online_kernel"
    ATTR{state}=="offline", ATTR{state}="$env{.state}"
  3. 重新载入 udev 规则以应用更改:

    # udevadm control --reload-rules
  4. 重启系统。

    或者,删除该设备并将其重新添加到系统中,以确保新配置生效。

验证

  • 验证应用此配置后,RHEL 将裸机系统上的新内存块分配给 ZONE_NORMAL,而不是 ZONE_MOVABLE。当您的硬件和驱动程序堆栈支持时,设备驱动程序可以从这些块分配支持 DMA 的内存。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部