跳到正文
Hacker News· mau·· 9 天前AI 评分58

Nanvix 开源轻量沙箱:Micro-VM 加多内核 OS 设计

Nanvix – Lightweight Sandbox

AI 导读

Nanvix 开源了一套用于运行不可信应用的沙箱实现,通过只暴露虚拟处理器和内存的 Micro-VM 提供硬件隔离,并用 guest 侧 Microkernel 与 host 侧 Macro-Kernel 组成的多内核 OS 灵活放置系统组件。

正文 · AI 翻译

Join us on Slack! GitHub commit activity GitHub last commit GitHub Actions Workflow Status

Nanvix 是一种沙箱技术,用于在硬件隔离环境中以极低开销运行不受信任的应用程序。

注意:本仓库包含该沙箱的实现。如果你想使用 Nanvix,请参阅 nanvix-python,这是 Nanvix 的 Python 发行版。

概述

Nanvix 采用独特的协同设计架构,融合了两项关键创新:

  • 一个专门构建的 Micro-VM,以极低开销提供硬件强制隔离。该 Micro-VM 设计得尽可能轻量,仅向客户机暴露虚拟处理器和内存,并剥离了所有设备仿真及其他会增加延迟的功能。

  • 一个多内核操作系统,支持灵活的系统组件放置与共享。该设计将操作系统拆分到两个内核:运行在 Micro-VM 内的客户机侧微内核,提供必要的操作系统功能;以及运行在宿主平台上的宿主侧宏内核,提供网络和存储软件交换机。系统组件作为特殊进程运行在任一内核之上,具体取决于部署配置。

在我们的论文中阅读更多关于此架构的内容:Nanvix:面向高密度无服务器部署的多内核操作系统设计。

   ┌─────────────────────────────────────┐
   │               Micro-VM              │   Microkernel on Micro-VM runs:
   │              Microkernel            │     • The untrusted application.
   │                                     │     • Essential system services (scheduler, etc.).
   │   ┌─────────────┐ ┌──────────────┐  │     • Optional in-guest components (e.g. filesystem).
   │   │ Application │ │  Filesystem  │  │
   │   └─────────────┘ └──────────────┘  │
   └──────────────────┬──────────────────┘
                      │  selected I/O
                      │  (e.g. network)
                      ▼
   ┌─────────────────────────────────────┐
   │             Macro-Kernel            │   Macro-Kernel on host platform runs:
   │              (host OS)              │     • Network software switch.
   │                                     │     • Storage software switch.
   │           ┌──────────────┐          │     • Host-side system components (e.g. network stack).
   │           │   Network    │          │
   │           └──────────────┘          │
   └─────────────────────────────────────┘

主要特性

  • 轻量级虚拟机:以极低开销实现硬件隔离——无设备仿真,仅提供虚拟处理器和内存。
  • 自定义客户机微内核:一个薄内核,暴露丰富的功能集和 POSIX API,以支持广泛的应用(参见我们的软件目录)。
  • 灵活的系统组件放置:文件系统和网络协议栈等组件既可以运行在客户机侧,也可以运行在宿主侧。
  • 跨平台支持:可运行在 Linux 和 Windows 宿主上。
  • 快速启动时间:应用程序启动在数十毫秒范围内,适用于无服务器和智能体工作负载。
  • 低内存占用:每个 Micro-VM 的内存消耗为数十兆字节,对资源受限环境和高密度部署友好。

快速对比

特性 Nanvix Unikraft Firecracker gVisor Docker WebAssembly
灵活组件放置 ✅ ❌ ❌ ❌ ❌ ❌
多客户机进程 ✅ ❌ ✅ ✅ ✅ ❌
硬件隔离 ✅ ✅ ✅ ❌ ❌ ❌
启动时间 ~30ms ~320ms ~70ms ~160ms ~1s ~1ms
内存占用 ~10MB ~10MB 10–100MB 10–50MB ~100MB ~1MB
部署密度 ~10k ~1k ~1k ~1k ~100 ~10k
完整 Linux 兼容性 ❌ ❌ ✅ ✅ ✅ ❌

启动时间是服务首个 HTTP echo 请求的 p50 延迟;内存占用是同一工作负载下每实例对宿主内存的贡献,通过 MemAvailable 在 /proc/meminfo 中测量。Nanvix 和 Firecracker 使用快照恢复(生产无服务器配置);Unikraft 和 gVisor 使用冷启动(无可用生产快照路径)。范围涵盖冷启动和快照恢复变体(如适用)。Docker 和 WebAssembly 为近似社区值。有关方法的更多信息,请参见 arXiv:2604.11669。

权衡

  • Linux 兼容性:Nanvix 提供包含 150 多个系统调用的 POSIX API,但它并非与所有 Linux 应用程序完全兼容,运行某些应用程序可能需要一些修改。
  • 不断壮大的软件生态系统:可运行应用程序的目录正在不断增长,因此引入新工作负载通常需要针对 Nanvix 工具链进行移植和交叉编译。请参阅目录以获取已移植应用程序的列表。

快速开始

Linux

需要 Ubuntu 24.04,具有 sudo 权限并启用 KVM。

# Run on Bash.

# Clone this source code.
git clone https://github.com/nanvix/nanvix.git && cd nanvix

# Setup the development environment.
./z setup

# Build Nanvix.
./z build -- all

# Run an example application.
./bin/nanvixd.elf -console-file /dev/stdout -- ./bin/hello-rust-nostd.elf

Windows

需要 Windows 11,PATH 中包含 GNU Make,启用 Windows Hypervisor Platform,打开开发者模式,并通过 rustup 安装 Rust 工具链。

# Run on PowerShell.

# Clone this source code (symlinks require Developer Mode).
git clone -c core.symlinks=true https://github.com/nanvix/nanvix.git; cd nanvix

# Setup the development environment.
.\z.ps1 setup

# Build Nanvix.
.\z.ps1 build -- all

# Run an example application.
.\bin\uservm.exe -kernel .\bin\kernel.elf -initrd .\bin\hello-rust-nostd.elf -standalone

更多详细信息,请参阅完整的安装、构建和运行指南。

文档

使用声明

本项目是一个原型。因此,我们不保证其能够正常工作,您使用该代码需自行承担任何风险。我们欢迎评论和反馈。请将任何问题或评论发送给以下项目维护者:

发送反馈即表示您同意其可用于本项目的进一步开发。

许可证

本项目在 MIT 许可证下分发。

来源:Hacker News · github.com