DAX 驱动操作

直接访问设备驱动最初旨在为类内存块设备提供类似内存的访问机制。 它被扩展为支持 CXL 内存设备,该设备提供用户配置的内存设备。

CXL 子系统依赖于 DAX 子系统,以:

  • 通过 /dev/daxN.Y 生成类似文件的用户空间接口,或者

  • 启用内存热插拔接口,将 CXL 内存添加到页面分配器。

DAX 子系统通过 cxl_dax_region 驱动程序公开此功能。dax_region 提供 CXL memory_regionDAX 设备 之间的转换。

DAX 设备

DAX 设备 是在 /dev/daxN.Y 中公开的类似文件的接口。 可以通过用户空间软件,使用 mmap() 系统调用访问通过 DAX 设备公开的内存区域。 结果是直接映射到任务的页表中的 CXL 容量。

希望手动处理 CXL 内存分配的用户应该使用此接口。

kmem 转换

dax_kmem 驱动程序将 DAX 设备 转换为由 kernel/memory-hotplug.c 管理的一系列 热插拔内存块。 此容量将在用户选择的内存区域中公开给内核页面分配器。

memmap_on_memory 设置(全局的和 DAX 设备本地的)决定了内核将在哪里分配此内存的 struct folio 描述符。 如果设置了 memmap_on_memory,内存热插拔将留出部分内存块容量来分配页面。 如果未设置,则通过正常的 GFP_KERNEL 分配来分配内存 - 因此很可能位于执行热插拔操作的 CPU 的本地 NUM 节点上。