快速上手 Multikernel
将你的 Linux 内核分离为多个独立实例,分别用于应用程序和设备处理。无需虚拟机管理程序,没有虚拟化开销,完整硬件访问权限。
构建内核
克隆并编译支持 multikernel 的 Linux 内核
配置启动
为生成的内核实例预留内存池
启动实例
使用 kerf 创建、配置并运行内核实例
什么是 Multikernel Linux?
Multikernel 将 Linux 内核分离为多个独立实例,在同一台物理机器上同时运行。你的应用程序获得属于自己的内核,拥有专用 CPU、内存,且不受任何中断干扰。设备驱动与 I/O 处理运行在独立核心上的另一个内核中。无需虚拟机管理程序,原生性能。
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Web Server │ │ Database │ │ ML Training │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ Linux Kernel │ │ Linux Kernel │ │ Linux Kernel │
│ (Web-tuned) │ │ (I/O-optimized)│ │ (GPU-optimized)│
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ CPU + NIC │ │ CPU + NVMe │ │ CPU + GPU │
└─────────────────┘ └─────────────────┘ └─────────────────┘
每个工作负载都运行在拥有定制配置的独立内核中,与其他实例完全隔离。某个实例中的驱动崩溃或内核漏洞利用无法影响其他实例。可以在运行时使用标准 Linux 热插拔机制在各内核之间重新平衡资源。
| 容器 | 虚拟机 | Multikernel | |
|---|---|---|---|
| 隔离性 | 共享内核 | 完全隔离(虚拟机管理程序) | 独立内核 |
| 性能 | 接近原生 | 5%-20% 开销 | 原生 |
| 内核定制 | 否 | 可以 | 可以 |
| 动态资源 | 可以 | 有限 | 可以(热插拔) |
| 零停机更新 | 仅应用 | 需借助编排系统 | 内核 + 应用 |
| 攻击面 | 完整内核 | 已缩减 | 单个实例极小 |
1 构建 Multikernel 内核
克隆支持 multikernel 的 Linux 内核,并开启 multikernel 支持进行构建。
git clone https://github.com/multikernel/linux.git
cd linux
make menuconfig # Enable CONFIG_MULTIKERNEL
make -j$(nproc)
sudo make install
这样会生成一个带有 multikernel 扩展的标准 Linux 内核。它会作为你的常规内核运行,并且还能额外生成新的内核实例。
2 预留内存池
生成的内核需要一段连续的内存区域。请在你的引导加载程序(GRUB、systemd-boot 等)中添加以下内核启动参数:
mkkernel_pool=1023M@0x40000000
这会从物理地址 0x40000000 开始预留 1023 MB 供 multikernel 使用。主内核不会使用这部分内存,它将可供生成的实例使用。
你也可以使用 Lazy CMA 在运行时分配这部分内存,无需任何启动参数。
3 安装 Kerf 管理工具
Kerf 是用于创建、配置和管理 multikernel 实例的命令行工具,负责资源分配、内核加载以及实例生命周期管理。
git clone https://github.com/multikernel/kerf.git
cd kerf
pip install -e .
4 启动你的第一个实例
初始化资源池,创建实例,然后将其启动:
# Initialize: make CPUs 4-31 available for spawned kernels
kerf init --cpus=4-31
# Create an instance with 4 CPUs and 2 GB of memory
kerf create web-server --cpus=4-7 --memory=2GB
# Load a kernel and initrd into the instance
kerf load web-server --kernel=/boot/vmlinuz --initrd=/boot/initrd.img
# Boot the instance
kerf exec web-server
生成的内核会在分配到的 CPU 和内存上启动,直接运行在硬件之上。它拥有自己的调度器、自己的网络协议栈,以及对分配给它的设备的独立视图。
关键组件
multikernel 技术栈由多个开源项目组成:
- Multikernel Linux - 内核补丁,支持使用 kexec 子系统生成并管理额外的内核实例
- Kerf - 用于管理内核实例、资源和生命周期的编排工具
- DAXFS - 使用直接内存访问在多个内核实例之间共享的文件系统,支持共享容器根文件系统和零拷贝数据共享
- Lazy CMA - 运行时连续内存分配器,为生成的内核提供内存池,无需启动时预留
底层工作原理
- 通过 kexec 生成内核 - 新内核使用 Linux 现有的 kexec 机制启动,该机制经过扩展,可与主内核并行运行,而非将其替换
- 资源分区 - CPU、内存和设备通过标准热插拔接口在各内核之间分配
- 硬件队列共享 - 现代网卡和 SSD 拥有多个硬件队列;每个内核独占访问特定队列,实现真正的硬件级隔离
- 内核间通信 - 各内核通过共享内存并使用 vsock 通信,这是一种标准的 Linux 套接字类型,应用程序无需修改即可使用
- Docker 集成 - 生成的内核可以使用 DAXFS 共享容器根文件系统,直接启动进 Docker 镜像,无需操作系统初始化层
准备好试试了吗?
全部 multikernel 组件均为开源。欢迎查看代码、提交 issue,或联系我们进行技术评估。