概述¶
本节介绍 CXL Type-3 内存设备的配置过程,以及最终如何通过内核的页面分配器将其作为 DAX
设备或普通内存页面暴露给用户。
标有项目符号的部分是生成某些内核对象的点。
早期启动
BIOS、构建和启动参数
EFI_MEMORY_SP
CONFIG_EFI_SOFT_RESERVE
CONFIG_MHP_DEFAULT_ONLINE_TYPE
nosoftreserve
内存映射创建
EFI 内存映射 / E820 咨询软保留
CXL 内存被预留由 CXL 驱动程序处理
为 CFMWS 条目创建软保留 IO 资源
NUMA 节点创建
节点从 ACPI CEDT CFMWS 和 SRAT 邻近域 (PXM) 创建
内存层创建
使用所有节点创建一个默认的 memory_tier。
连续内存分配
任何请求的 CMA 都从在线节点分配
初始化完成,驱动程序开始探测
ACPI 和 PCI 驱动程序
检测 PCI 设备是否为 CXL,将其标记为由 CXL 驱动程序探测
CXL 驱动程序操作
基本设备创建
创建 root、端口和 memdev 设备
CEDT CFMWS IO 资源创建
解码器创建
创建 root、交换机和端点解码器
逻辑设备创建
创建 memory_region 和端点设备
设备彼此关联
如果使用自动解码器(BIOS 编程的解码器),驱动程序会验证配置,构建关联,并在探测时锁定配置。
如果用户配置,则验证和关联在解码器提交时构建。
区域作为 DAX 区域公开
创建 dax_region
通过 DAX 驱动程序创建 DAX 设备
DAX 驱动程序操作
DAX 驱动程序将 DAX 区域作为两种 dax 设备模式之一公开
kmem - dax 设备转换为热插拔内存块
DAX kmem IO 资源创建
hmem - dax 设备保留为 daxdev,可以作为文件访问。
如果是 hmem,则到此结束。
DAX kmem 将内存区域公开给内存热插拔,以作为“驱动程序管理的内存”添加到页面分配器
内存热插拔
mhp 组件将 dax 设备内存区域作为多个内存块公开给页面分配器
块出现在
/sys/bus/memory/devices
中并链接到 NUMA 节点
块已联机到请求的区域(NORMAL 或 MOVABLE)
内存被标记为“驱动程序管理”,以避免 kexec 将其用作内核更新的区域