秒级恢复的核心:内存快照 + userfaultfd 惰性缺页
30 秒导读: 一个暂停过的沙箱可能带着几 GB 的 guest 内存。恢复它时,E2B 不把这几 GB 整块读回来——那要花好几秒。它改用一个 Linux 内核特性
userfaultfd:先把 guest 的整片内存标成"缺页"(还没有真实内容),让 VM 立刻跑起来;等 VM 真的访问到某一页时,内核才发一个缺页事件,E2B 的用户态处理器只把那一页从快照里拉出来填进去。绝大多数页永远不会被碰到,于是也永远不用加载。这一章讲清楚"为什么恢复能这么快"。
本章是全仓工程含量最高的一支。它假设你已经读过沙箱生命周期(知道 Firecracker microVM、Pause/Resume 大致是什么);存储侧(内存 diff 如何分层去重、上传下载)只点到为止,细节交给写时复制块存储。
1. 这是什么(零基础也能懂)
先说问题:恢复一个 VM,慢在哪
一个运行中的沙箱,它的"活着"分两半:
| 状态 | 是什么 | 有多大 |
|---|---|---|
| 磁盘(rootfs) | 文件系统 | 交给块存储层,本章不管 |
| 内存(guest RAM) | VM 里进程的堆栈、页缓存、内核数据…… | 几百 MB 到几 GB |
暂停(Pause)时,这几 GB 内存被存成一个内存快照文件。恢复(Resume)时,理论上你得把这个文件的内容重新灌回 VM 的物理内存,VM 才能从暂停的那一刻继续跑。