29.6. Linux/x86-64 下 CPU 热插拔的固件支持

Linux/x86-64 现在支持 CPU 热插拔。由于各种原因,Linux 希望在启动时预先知道可以插入系统的最大 CPU 数量。ACPI 3.0 目前没有正式的方法将此信息从固件提供给操作系统。

在 ACPI 中,每个 CPU 都需要在 MADT 表中有一个 LAPIC 对象(ACPI 3.0 规范中的 5.2.11.5)。ACPI 已经通过将 LAPIC 对象中的“已启用”位设置为零来禁用 LAPIC 对象。

对于 CPU 热插拔,Linux/x86-64 现在期望任何可能的未来可热插拔 CPU 都已在 MADT 中可用。如果 CPU 尚未可用,则应将其 LAPIC “已启用”位设置为 0。Linux 将使用禁用的 LAPIC 的数量来计算未来最大 CPU 数量。

在最坏的情况下,用户可以使用命令行选项(additional_cpus=...)覆盖此选择,但建议在 MADT 中提供正确的数字(或合理的近似值,宁可多不要少),以避免手动配置。