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 时,才使用此配置。
流程
将默认规则复制到本地覆盖目录中:
# cp /usr/lib/udev/rules.d/40-redhat-hotplug.rules /etc/udev/rules.d/通过在内存热插规则中将
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}"重新载入
udev规则以应用更改:# udevadm control --reload-rules重启系统。
或者,删除该设备并将其重新添加到系统中,以确保新配置生效。
验证
-
验证应用此配置后,RHEL 将裸机系统上的新内存块分配给
ZONE_NORMAL,而不是ZONE_MOVABLE。当您的硬件和驱动程序堆栈支持时,设备驱动程序可以从这些块分配支持 DMA 的内存。