分离内核架构
Multikernel 系统将全部设备驱动与中断处理卸载到专用的设备内核。应用程序运行在隔离的应用内核中,拥有专用资源和原生硬件性能。
为何需要分离内核架构
传统 Linux 内核在同一批核心上运行应用程序代码、设备驱动和中断处理程序。负载升高时,中断处理会抢占本应属于应用程序的 CPU 周期。isolcpus、irqaffinity、NAPI 线程模式以及 RPS/RFS 等内核层面的变通手段能够缓解这一问题,但无法根除它。只要处于同一个内核之内,下半部(bottom-half)工作总有办法触达应用程序所在的核心。
分离内核架构从设计层面消除了这种争用。设备处理卸载到专用核心上的专用内核。应用程序运行在各自的内核中,中断在结构上根本不存在。由于 Multikernel 直接运行在硬件之上,不依赖虚拟机管理程序,因此它既可以运行在裸金属上,也可以运行在您现有的虚拟机内部,在不产生嵌套虚拟化性能损耗的前提下提供内核级隔离。
Multikernel 系统
三个组件协同工作:为应用程序提供隔离的应用内核、处理全部 I/O 的共享设备内核,以及连接二者的无锁共享内存层。
应用内核
每个应用程序都在自己的 Linux 内核中,独占专用核心。这些内核不包含任何设备驱动、中断处理程序或网络协议栈。几乎全部计算与内存资源都直接供应给应用程序。
设备内核
全部设备驱动、中断处理程序、TCP/IP 协议栈以及 I/O 处理都运行在专用核心上的专用设备内核中。该内核为每一个应用内核提供服务,拥有独立的更新与故障域。
DAXFS 共享内存
应用内核与设备内核通过 DAXFS 通信——这是一个构建在共享 DRAM 之上、采用无锁 CAS 协调机制的文件系统。零拷贝,无需序列化,也没有网络往返开销。
工作原理
完全构建在现有 Linux 基础设施之上。没有新操作系统,没有定制虚拟机管理程序,也没有兼容性缺口。
通过 Kexec 生成内核
新的内核实例通过 Linux 的 kexec 机制启动,该机制经过扩展,可与正在运行的内核并行启动,而非将其替换。每个新生成的内核都在分配给它的 CPU 与内存上启动,完全独立。
资源分区
CPU、内存和设备队列通过标准 Linux 热插拔接口分配给每个内核。资源可以在运行时于各内核之间重新平衡,无需重启。
硬件队列隔离
现代网卡和 NVMe 设备都暴露多个硬件队列。设备内核独占访问这些设备队列。无需软件网桥,无需 SR-IOV。这是真正的硬件级 I/O 隔离。
Docker 集成
新生成的内核通过 DAXFS 共享容器根文件系统,直接启动进 Docker 镜像。无需为每个实例执行完整的操作系统初始化。应用程序无需修改,即可使用标准 Linux 接口运行。
分离内核架构与现有方案对比
分离内核架构兼具独立内核的隔离性与原生硬件性能,既没有虚拟化的开销,也不受内核调优的局限。
| 能力 | 容器 | 虚拟机 | Multikernel |
|---|---|---|---|
| 隔离性 | 共享内核 | 完全隔离(虚拟机管理程序) | 独立内核 |
| 性能开销 | 极小 | 5%-20% | 无 |
| 内核定制 | 否 | 可以 | 可以,按工作负载定制 |
| 动态资源分配 | 可以 | 有限 | 可以(CPU/内存热插拔) |
| 零停机内核热升级 | 否 | 需借助编排系统 | 可以 |
| 单个工作负载的攻击面 | 完整内核 | 已缩减 | 极小(精简内核) |
| 嘈杂邻居效应 | 存在 | 已缓解 | 已消除 |
| 可在云虚拟机内运行 | 可以 | 需要嵌套虚拟化 | 可以 |
应用场景
分离内核架构适用于需要强隔离、可预测性能或独立内核生命周期管理的工作负载。
延迟敏感型工作负载
交易系统、实时分析和游戏服务器等场景中,中断抖动会直接影响结果。应用内核所在的核心从设计上就不会看到任何中断。
AI 智能体沙箱
每个 AI 智能体运行在自己的应用内核中,拥有完整的 GPU 访问权限和内核级隔离。智能体与硬件之间没有虚拟化层。
零停机更新
在应用程序持续运行的同时替换设备内核。回滚有问题的驱动更新,无需重启任何一个工作负载。
故障容错
设备内核中的驱动崩溃不会影响应用内核。设备内核可独立恢复,应用程序则持续运行不受影响。
混合工作负载隔离
在同一台机器上运行数据库、Web 服务器和机器学习训练任务。每个工作负载都拥有自己的内核、专用资源,不受嘈杂邻居干扰。
CXL 内存共享
通过 DAXFS 在多个内核实例或 CXL 互连主机之间共享数据,具备无锁并发访问能力和共享页缓存。