大家好,我是何三,独立开发者

<20ms 克隆一个正在运行的虚拟机,2个4GB VM只用1GB内存,比Firecracker快10倍。这就是Clone——一个用Rust写的轻量级VMM,正在颠覆多租户shell托管和FaaS平台的成本结构。

传统共享shell托管有个致命问题:所有用户共享同一个内核。容器逃逸每月都有新漏洞,2026年了,没人敢让不信任的用户共享内核。VM能解决安全问题,但每个VM都要独占内存,跑100个shell用户就得100个VM,成本直接爆炸。

我们试过所有现有VMM——QEMU、Firecracker、Cloud Hypervisor,没一个能在VM级隔离下,做到共享shell级别的资源效率。

所以有了Clone。

Shadow Clone技术,核心就一句话:启动一个模板VM,热好所有二进制文件,然后像Linux fork进程一样,用Copy-on-Write(CoW)的方式fork出隔离副本。所有fork共享相同的物理内存页,直到它们写入——只有脏页才消耗额外内存。

数据说话:2个fork出来的4GB Ubuntu VM,只用了1GB主机内存(传统方案需要8GB)。3个Alpine VM,总共13MB RSS(模板本身127MB)。10个512MB的空闲VM,只用~200MB内存,而不是5GB。

Clone

我看了下demo视频,从模板fork到网络就绪,确实在160ms左右,这速度在VMM领域还是很不错的

Clone封面

为什么需要这种级别的效率?

场景一:Unix Shell托管

unixshells.com(项目背后的公司)用Clone作为shell托管的VMM。传统共享shell不安全,容器逃逸是家常便饭。但给每个用户一个完整VM,内存成本又受不了。

Clone的解决方案: 1. 启动一个4GB Ubuntu模板,预装200多个开发工具 2. 热好所有二进制文件,创建快照 3. 用户登录时,fork一个副本——~160ms 4. 每个用户获得完整KVM硬件隔离,但内存像共享一样高效

# 模板准备
sudo ./shell-template/build.sh
sudo ./shell-template/warm.sh

# 给用户fork shell
clone fork --template /templates/shell-base --net

场景二:FaaS平台

Serverless函数冷启动是个老大难问题。AWS Lambda用Firecracker,冷启动也要5-10ms(还得用定制内核)。Clone用Alpine模板,<20ms就能fork一个运行环境。

关键是,运行时已经预热好了。Python解释器、ML库、Node.js进程,全在内存里等着。fork出来就能执行,不用重新加载。

场景三:CI/CD Runner

共享基础镜像+每个构建独立的可写覆盖层。强隔离,快速销毁。

sudo clone run --kernel vmlinuz --rootfs ubuntu-ci.img --overlay --net

技术细节(能看懂多少看多少)

Clone的核心是三层内存管理:

  1. OvercommitMAP_NORESERVE,页表先分配,物理内存等第一次写入时才真正分配
  2. KSMMADV_MERGEABLE,跨VM去重相同内存页
  3. Balloon:分级回收——空闲30秒回收25%,2分钟回收50%,5分钟到最低水位

结果就是:内存像水一样流动。活跃VM用满分配的内存,空闲VM自动释放给其他VM用。

Shadow Clone fork流程

Boot template  warm binaries  snapshot memory + registers

New VM = mmap(snapshot, MAP_PRIVATE)  ~160ms

Inject identity (hostname, CID, IP, MAC)

Transport reset  agent reconnects  exec ready

所有fork共享相同的物理页,直到写入时才触发CoW。没有内核启动过程,没有设备重新枚举。用户空间vsock和网络后端处理fork状态,不需要内核参与。

Clone架构

实测数据: - Shadow Clone fork (Alpine, minimal): <20ms - Shadow Clone fork (4GB Ubuntu, to exec): ~160ms - 增量快照大小: 192KB (比完整快照小682倍) - 实时迁移停机时间: 1ms

(这数据让我想起Firecracker刚出来时的震撼,但Clone在内存效率上更激进)

上手试试

安装很简单(需要Linux + KVM):

# 构建
cargo build --release

# 创建rootfs
sudo clone rootfs create --distro ubuntu --size 2G -o ubuntu.img
sudo clone rootfs create --distro alpine --size 1G -o alpine.img

# 启动VM
sudo clone run --kernel /boot/vmlinuz-$(uname -r) --rootfs alpine.img

# 带网络
sudo clone run --kernel vmlinuz --rootfs alpine.img --net --mem-mb 512

# 带主机目录共享
sudo clone run --kernel vmlinuz --rootfs alpine.img --shared-dir /tmp/shared:myfs

如果你要做多租户shell托管,项目提供了完整模板:

# 构建Ubuntu 24.04模板,带200+开发工具
sudo ./shell-template/build.sh

# 预热二进制文件,创建快照
sudo ./shell-template/warm.sh

# 给用户fork shell
clone fork --template /templates/shell-base --net

跑起来后,可以attach到控制台,或者在VM里执行命令:

# attach到串口控制台(Ctrl-Q退出)
clone attach

# 在运行中的VM里执行命令
clone exec -- ls /

应用场景

同类工具链

如果你对轻量级虚拟化感兴趣,最近还有几个类似项目值得关注:

  1. smolvm - 便携式虚拟机,<200ms冷启动,支持macOS原生虚拟化
  2. Firecracker - AWS Lambda背后的VMM,安全性和性能都很出色
  3. Cloud Hypervisor - Intel和微软维护的VMM,virtio设备支持最全

Firecracker现在也有snapshot功能,但Clone在内存共享上更激进,适合高密度多租户场景

总结

Clone解决了一个经典矛盾:安全隔离 vs 资源效率。传统方案要么不安全(容器),要么太贵(完整VM)。Clone用CoW内存共享,在保持KVM硬件隔离的同时,把内存成本降到了接近容器的水平。

25K行Rust代码,单二进制,63个端到端测试(62通过,1跳过)。代码很干净,没有fork任何现有VMM代码库。

对于做shell托管、FaaS平台、CI/CD系统的团队,这可能是2026年最重要的基础设施升级。内存成本降80%,安全性从容器级提升到VM级,fork速度从秒级降到毫秒级。

话说隔壁的云厂商还在卖按核按内存计费的VM,这种技术普及后,他们的利润率怕是要被挤压了。

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用