原文链接:
https://www.usenix.org/system/files/osdi24-chen-haibo.pdf
“Microkernel Goes General: Performance and Compatibility in the HongMeng Production Microkernel” 由 Haibo Chen 等人撰写,介绍了鸿蒙内核(HM)的设计与实现。HM 是一款商业化的通用微内核,在保持微内核优势的同时,解决了在通用场景下的性能和兼容性问题。
- 研究背景
- 微内核的优势与局限:微内核具有安全性、可靠性和可扩展性等优点,在嵌入式和安全关键场景中得到广泛应用。然而,在面向智能手机和智能汽车等更通用的场景时,面临性能和兼容性问题。
- 通用场景的需求:新兴场景如智能车辆和智能手机需要丰富的外设和应用,强调安全性和可靠性,同时对性能要求较高。现有的操作系统难以同时满足这些需求。
- HM 的设计理念
- 最小化微内核与隔离的 OS 服务:保留微内核的最小化原则,将必要的功能放在核心内核中,其他组件作为隔离的 OS 服务放在核心内核之外。采用细粒度的访问控制,以保持最小特权原则。
- 最大化兼容性:通过实现 Linux API/ABI 兼容和高效的驱动重用来集成现有软件生态系统。使用 ABI 兼容的垫片来识别和重定向 Linux 系统调用,通过驱动容器重用未修改的 Linux 驱动。
- 性能优先:在不违反微内核架构原则的前提下,优先考虑性能。采用灵活的组合方式来减少 IPC 开销,通过地址令牌补充能力来实现高效的内核对象合作,支持无策略的内核分页。
- 性能设计
- 同步 RPC - like IPC Fastpath:采用类似 RPC 的线程迁移作为 IPC 的快速路径,解决了异步 IPC 在新兴场景中的问题。同时,考虑了 IPC 的内存占用、资源耗尽和资源核算等问题。
- 差异化隔离类:根据 OS 服务的特性采用差异化隔离类,为不同的服务提供定制的隔离和性能。包括核心 TCB、机制强制隔离和地址空间隔离等类别。
- 灵活组合:允许在性能要求较高的场景下合并紧密耦合的 OS 服务,以减少 IPC 频率和消除状态重复记账。同时,在安全关键场景下保留分离服务的能力。
- 基于地址令牌的访问控制:提出基于地址令牌的访问控制方法,解决了基于能力的访问控制在新兴场景中的性能问题。通过将内核对象映射到地址空间,实现了高效的内核对象合作。
- 无策略内核分页:采用集中式内存管理,通过预先做出策略驱动的决策,在核心内核中留下无策略的页面故障处理机制,提高了处理匿名内存页面故障的性能。
- 兼容性设计
- Linux ABI 兼容性:通过在 IC0 放置 ABI 兼容的垫片来实现 Linux ABI 兼容性,垫片将 Linux 系统调用重定向到适当的 OS 服务,并作为全局状态的中央存储库,支持 fd 复用和 fork 等功能。
- 驱动容器:通过驱动容器重用 Linux 设备驱动,容器提供必要的 Linux KAPIs,允许现有驱动在不修改的情况下运行。采用控制平面和数据平面分离的方法提高驱动的性能。
- 实际应用与性能对比
- 实现与部署:HM 的核心内核由 90k 行 C 代码实现,其他 OS 服务可单独部署,总计超过 100 万行代码。已在数千万台设备上进行了部署,根据不同场景进行了配置。
- 性能对比:在智能手机、智能车辆和智能路由器等新兴场景中,与 Linux 相比,HM 在上下文切换、网络、应用启动时间、帧丢失和中断延迟等方面具有更好的性能,同时减少了内存占用和系统启动时间。
- 经验与教训
- 兼容性优先,逐步本地化:兼容性是商业部署的关键第一步,通过大规模测试来检查兼容性。
- 先部署,再持续优化:微内核难以在初始阶段满足所有性能目标,需要进行全系统优化。采用半形式化验证和自动化验证来提高代码质量。
- 硬件故障的放大:在大规模部署时,一些低概率的硬件故障可能会影响用户体验,通过隔离关键驱动和创建监视器来缓解这些问题。
- 大内核锁在新兴场景中不可扩展:在新兴场景中,大内核锁面临可扩展性问题,需要采用其他方法来解决并发问题。
- 结论与未来工作
- HM 是一款商业化的通用微内核,保留了微内核的原则,同时解决了在新兴场景中的兼容性和性能问题。为未来微内核在生产中的应用提供了参考。
- 未来的工作包括进一步探索微内核在硬件异构性和容错方面的应用,以及提高自动化验证的效率。