在云计算时代,内核漏洞修复或系统升级后的“重启”往往意味着业务中断和巨大的 SLA 压力。传统的kexec虽然缩短了引导时间,但它本质上仍是一个“冷启动”过程:新内核对旧内核的状态一无所知。
为了打破这一僵局,Linux 内核引入了Kexec HandOver (KHO)基础架构,并在此之上构建了Live Update Orchestrator (LUO)协调器。两者结合,真正实现了跨内核的资源继承。
1. 核心挑战:为什么传统的 kexec 不够?
传统的kexec将自己视为纯粹的引导加载程序。进入新内核时,旧内核留下的所有状态都被视为无效。
内存丢失:虚拟机(VM)的内存、页表等会被清空。
设备断连:IOMMU、VFIO 和 PCI 设备必须重新初始化,导致 DMA 传输中断。
手动划片:以前的替代方案(如 PRMEM, PKRAM)通常需要管理员在命令行手动预留固定物理内存,灵活性极差。
2. 基石:Kexec HandOver (KHO)
KHO解决了最根本的问题:如何在两个内核之间传递元数据?
2.1 机制:FDT 传递
KHO 引入了一个基于扁平设备树 (Flattened Device Tree, FDT)的元数据文件。FDT 格式在 Linux 内核中已有成熟的解析器,非常适合描述复杂的资源依赖。
2.2 创新:Scratch Regions(擦除区)
为了防止新内核启动时覆盖掉需要保留的内存,KHO 引入了“Scratch Regions”:
系统在