
forkd vs Docker vs gVisorN100并发沙箱启动实测为什么比容器快3000倍【免费下载链接】forkd高性能Agent沙箱预热虚拟机可以在约 100 毫秒内派生出 100 个独立实例运行过程中约 150 毫秒“分叉”出一个新的运行环境。底层使用 KVM 隔离并利用快照写时复制降低资源开销。项目地址: https://gitcode.com/deeplethe/forkdforkd 是一个高性能 Agent 沙箱运行时一台预热虚拟机可以在约100 毫秒内派生出 100 个相互隔离的 microVM 实例底层采用 KVM 硬件隔离 快照写时复制Copy-on-Write。本文在同一台物理机上实测 forkd、Dockerrunc、gVisorrunsc、Firecracker 等 7 种沙箱方案在 N100 并发下的启动耗时。结论先说forkd 只花 101 毫秒而 Docker 需要 335 秒快了约 3300 倍。 测试环境与基准方法所有数字均来自同一台主机保证对比公平项目配置操作系统Ubuntu 24.04Linux 6.14CPU / 内存20 vCPU / 30 GiB虚拟化KVM 已启用负载并发启动 100 个沙箱每个执行import numpy; numpy.zeros(5).tolist()计时口径从第一个沙箱请求发出到第 100 个沙箱返回结果wall-clock需要说明的一点公平性细节Docker 和 gVisor 的数字包含每个沙箱冷启动后重新import numpy的开销——这是公平预算。而 forkd 的父镜像在打快照前就已导入过 numpy子沙箱直接继承省掉了这部分时间。完整测试方法见 bench/README.md各后端的驱动逻辑在 bench/compare-all.py 和 bench/bench-spawn-100.sh。 N100并发沙箱启动耗时实测对比沙箱方案N100 总耗时相对 forkdforkd快照 写时复制101 ms1×Firecracker 冷启动759 ms7.5×CubeSandbox池化快速路径1.06 s10.5×BoxLite113.2 s1120×OpenSandbox122.0 s1208×gVisorrunsc288.6 s2857×Dockerrunc335.3 s3320×直观感受一下量级差距Docker 启动 100 个沙箱约5 分半gVisor 约4 分 48 秒而 forkd 在0.1 秒内让 100 个沙箱全部就绪——这就是标题里快 3000 倍的由来对 Docker 约 3300 倍对 gVisor 约 2850 倍。为什么容器的并发表现这么差核心原因是每加一个沙箱就要多付一次完整启动成本容器要走一遍 OCI 运行时创建流程 重新解释器初始化gVisor 还要额外拉起一个用户态内核runsc模拟系统调用。并发度越高启动路径上的排队和重复工作就越明显耗时近似线性放大。 为什么 forkd 比容器快预热快照 写时复制forkd 的做法跳出了每次冷启动的框架分三步只启动一次父虚拟机。父 VM 完整启动 Python 环境、import numpy以及你的任何依赖、JIT 缓存、甚至已加载的 ML 模型进入热状态后暂停并写成快照——包含内存镜像memory.bin和设备状态vmstate。派生子沙箱时不做启动。每个子沙箱是一个独立的 Firecracker 进程用mmap(MAP_PRIVATE)映射父镜像直接恢复到热状态。内核级写时复制共享内存。100 个子沙箱共享同一份父内存只有在某一页真正被写入时才复制该页——所以并发 100 个沙箱的额外内存开销只有0.12 MiB/个。一句话概括forkd 把启动沙箱从冷启动一台虚拟机变成了fork 一个进程开销接近fork(2)系统调用而不是虚拟机引导。同时每个子沙箱仍是独立的 KVM microVM拥有完整 Linux 内核、独立网络命名空间和 cgroup 内存限额隔离强度远高于容器命名空间。设计细节可参考 docs/design/branching.md方案定位对比见 docs/COMPARISON.md。此外 forkd 还支持对运行中的沙箱做 BRANCH暂停约 56 msv0.4 live 模式p50即可把正在思考到一半的 Agent 状态完整分叉出去适合多分支并行推理这类场景。 内存开销对比写时复制的隐性收益启动速度之外fan-out 场景更怕的是沙箱越多、内存越爆。N100 时每个沙箱带来的宿主内存增量如下forkd0.12 MiB/沙箱——子进程只私有化自己写过的页Firecracker 冷启动84 MiB/沙箱每个 VM 独占全量内存Docker约 4 MiB容器共享宿主内核本身就很省。在 Kubernetes 上这意味着一个 8 GiB 的 Pod 理论上可容纳约 50 个空闲池化 Agent按 vCPU 和进程数瓶颈估算内存几乎从不是 fan-out 的上限。 如何快速上手 forkd 沙箱3 步forkd 要求 x86_64 Linux KVMUbuntu 22.04。最快路径是官方 quickstart它会自动完成主机预检KVM、tap 设备、guest 内核、烘焙 Python 快照并分叉 10 个子沙箱curl -sSL https://github.com/deeplethe/forkd/releases/download/v0.5.3/forkd-v0.5.3-x86_64-linux.tar.gz \ | sudo tar -xz -C /usr/local/bin/ sudo -E forkd quickstart更省事的玩法是直接从快照 Hub 拉取现成镜像然后一条命令 fork 100 个子沙箱下方演示为官方实测录屏100/100 存活、约 200 ms 完成forkd pull deeplethe/langgraph-react sudo -E forkd fork --tag langgraph -n 100 --per-child-netnsHub 机制与快照分发见 docs/HUB.md图表可由 bench/generate_charts.py 在你自己的机器上复现。✅ 结论什么时候该用哪种沙箱你的场景建议少量、长生命周期的普通容器Docker 足够成熟生态需要更强隔离、但并发不高gVisor百级并发、扇出式 Agent 沙箱代码解释器、并行评测、逐用户执行forkd——这是它的设计甜点区forkd 的快 3000 倍不是靠牺牲隔离换来的每个子沙箱都是真实 KVM 虚拟机逃逸需要击破 hypervisor 或内核漏洞而不是绕过某个 runc 缺陷。它的代价也很明确——目前单宿主部署且收益取决于父镜像预热这一步。如果你的负载形态是从同一个热状态扇出大量短命沙箱Anthropic / OpenAI / Modal 式代码解释器、SWE-bench 并行评测等可参考 recipes/e2b-codeinterpreter/forkd 是目前开源方案里唯一把快照 fork做进核心原语的选项。【免费下载链接】forkd高性能Agent沙箱预热虚拟机可以在约 100 毫秒内派生出 100 个独立实例运行过程中约 150 毫秒“分叉”出一个新的运行环境。底层使用 KVM 隔离并利用快照写时复制降低资源开销。项目地址: https://gitcode.com/deeplethe/forkd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考