ACPI 表¶
ACPI 是“高级配置和电源接口”,它是一个标准,定义了平台和操作系统如何管理电源和配置计算机硬件。 就本操作理论而言,当我们提到“ACPI”时,通常指的是“ACPI 表”——平台(BIOS/EFI)通过它向操作系统传递静态配置信息。
以下 ACPI 表包含关于 CXL 设备的静态配置和性能数据。
SRAT 表还可以包含通用端口/启动器内容,这些内容旨在描述通用端口,但不包含有关到端点的路径其余部分的信息。
Linux 使用这些表为静态配置(由 BIOS/EFI)的 CXL 设备配置内核资源,例如
NUMA 节点
内存层
NUMA 抽象距离
SystemRAM 内存区域
加权交错节点权重
ACPI 调试¶
acpidump -b
命令将 ACPI 表转储为二进制格式。
iasl -d
命令将文件反汇编为人类可读的格式。
示例 acpidump -b && iasl -d cedt.dat
[000h 0000 4] Signature : "CEDT" [CXL Early Discovery Table]
常见问题¶
此处描述的大多数故障会导致驱动程序无法将内存作为 DAX 设备和/或 kmem 展示。
CEDT CFMWS 目标列表 UID 与 CEDT CHBS UID 不匹配。
CEDT CFMWS 目标列表 UID 与 DSDT CXL 主桥 UID 不匹配。
CEDT CFMWS 限制位不正确。
CEDT CFMWS 内存区域对齐不佳。
CEDT CFMWS 内存区域跨越平台内存空洞。
CEDT CHBS UID 与 DSDT CXL 主桥 UID 不匹配。
CEDT CHBS 规范版本不正确。
SRAT 缺少 CEDT CFMWS 中描述的区域。
结果:无法为该区域创建 NUMA 节点,或者该区域放置在错误的节点中。
HMAT 缺少 CEDT CFMWS 中描述的区域的数据。
结果:NUMA 节点放置在错误的内存层中。
SLIT 具有错误的数据。
结果:内核中的许多性能机制将非常不高兴。
所有这些问题都会向用户显示,就好像驱动程序无法支持 CXL 一样 - 但实际上,它们都是平台未能正确配置 ACPI 表的故障。