首页 Multikernel Private Cloud Multikernel Sandbox Multikernel LiveUpdate 技术 常见问题 快速上手 博客 关于我们 English GitHub 预约演示

快速上手 Multikernel

将你的 Linux 内核分离为多个独立实例,分别用于应用程序和设备处理。无需虚拟机管理程序,没有虚拟化开销,完整硬件访问权限。

1

构建内核

克隆并编译支持 multikernel 的 Linux 内核

2

配置启动

为生成的内核实例预留内存池

3

启动实例

使用 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,或联系我们进行技术评估。