重新思考进程快照:让 Serverless 冷启动接近热启动(OSDI 2026)

原题:Rethinking Process Snapshots for Near-Warm Serverless Cold Starts

一句话总结:现有进程快照把工作集按 I/O 顺序排列后,必须用大量细粒度映射和系统调用恢复地址空间与内核状态;Spice 用 SHELF 文件格式、spliceVMA 和批量元数据恢复解耦磁盘布局与虚拟地址布局,使代表性 Java、Python、Node.js 函数的恢复延迟达到 0.6–18 ms,并将端到端延迟平均降低 7.5×(相对进程方案)和 9.5×(相对 VM 方案)。

问题与动机

Serverless 函数的冷启动通常包含容器建立、语言运行时初始化、库加载和函数自身启动逻辑。对于短函数,这些开销可能超过真正的执行时间。保留常驻进程或从常驻父进程 fork 能缓解问题,但长尾函数无法都保留 warm state;论文引用的生产观测显示,许多应用每分钟最多调用一次,内存压力也会使冷启动多于热启动。

从磁盘恢复初始化后的快照是更节省常驻内存的路径。进程级快照能复用主机 page cache 中的共享库页,但 CRIU 一类方案需要重放大量系统调用;VM 快照避免了这些调用,却把 guest OS 状态也一起保存和恢复,工作集更大。论文的核心判断是:瓶颈来自 OS 接口与快照表示之间的不匹配,而不只是磁盘带宽不足(图 1、图 2)。

关键观察 / 隐含假设

  • 观察 1:磁盘上的高效布局与虚拟地址上的高效重建互相牵制。 将工作集页按预测访问顺序连续存放能提高预取吞吐,但这些页在虚拟地址中是稀疏、重排的,传统 mmap 会产生大量小 VMA;论文在 RNN 工作负载中观察到需要 3212 个映射(§5.2、图 4)。
    • 依赖假设:启动后的访问顺序具有足够稳定性,工作集预取值得提前进行。
    • 可能失效场景:输入驱动的代码路径、JIT 行为或租户变化导致预测访问页不准时,预取会浪费 I/O,未预取页仍需同步 fault。
  • 观察 2:进程元数据恢复的系统调用重放随运行时复杂度增长。 文件描述符、线程、信号处理器和定时器缺少统一的批量导入接口,进程恢复必须执行数百到数千次细粒度操作(§2.1、图 2)。
    • 依赖假设:快照格式能够安全、完整地描述这些内核对象;恢复过程可被信任且不会把旧运行环境中的不可迁移状态带入新实例。
  • 观察 3:进程边界能同时保留共享页复用和较小的恢复状态。 VM 工作集比进程快照大 1.2–3.4×,其中 19–50% 的工作集页可在进程方案中从共享 page cache 复用(图 3、表 2)。
    • 可能失效场景:共享库版本、文件内容或安全隔离边界不一致时,复用机会下降;高并发恢复仍可能使存储带宽成为瓶颈。

核心方法

Spice 是在进程-OS 边界恢复 Serverless 函数的执行引擎。其 SHELF(Snapshot Hybrid ELF)格式借鉴 ELF,但以页粒度索引表达稀疏、重排的快照。文件头之后连续保存按访问时间排序的工作集页,便于一次顺序读;索引同时记录页是私有快照页、共享文件页还是零页,以及写入状态(§3.1)。

spliceVMA 是配套的内核映射抽象。一个 spliceVMA 可覆盖原有的连续虚拟地址范围,并用区间树把其中的页关联到 SHELF 中不连续的存储位置(图 7)。缺页处理时,内核直接查找对应来源,因而无需为每个稀疏区间建立独立映射,也无需先把页逐一复制到临时缓冲区。这回应了观察 1:磁盘布局可以为顺序 I/O 优化,而进程地址空间仍保持紧凑映射。

内核中的 SHELF loader 由 reexec() 触发。它批量建立 VMA、异步预取预测工作集,并主动安装 PTE,允许函数开始执行后继续预取,同时减少后续 minor fault 和用户态/内核态往返(§3.3)。

对于文件描述符、信号、线程和定时器等状态,Spice 用紧凑序列化描述配合 Junction LibOS 原型实现批量恢复,而非重放原始系统调用。该路径使 Spice 能保留进程级快照的较小状态和 page-cache 共享,同时接近 VM 方案的元数据恢复成本(§3.4)。

设计取舍

  • 取舍 1:引入新的文件格式和 Linux 内核接口。 SHELF 与 spliceVMA 消除了现有 mmap 接口的结构性限制,但需要修改内核、维护新的快照格式,并让快照生成器、恢复器和内核保持版本兼容。
  • 取舍 2:依赖访问预测与预取。 预取降低了执行期间的 fault,但预测错误会增加存储读和内存压力。论文保留未预测页的按需恢复以维持正确性,代价是偏离工作集时延迟可能回升。
  • 取舍 3:批量恢复牺牲了通用 OS 接口的开放性。 论文原型借助 Junction 实现元数据恢复;对于未被序列化格式覆盖的内核对象、设备状态或复杂权限关系,迁移边界仍需额外定义。

实验与结果

  • 在 Intel Xeon Gold 5420+、128 GB RAM 和 PCIe 5.0 NVMe 上,Spice 的 warm-invocation 恢复延迟为 0.6–18 ms;对比系统为 3.6–1197 ms。端到端结果中,Spice 相对 FaaSnap* 降低 17–96%,相对 REAP* 降低 18–95%,相对 CRIU* 降低 14–96%(§5.1、图 10)。
  • 在 Python、Java 和 Node.js 的 FunctionBench 函数上,Spice 为 warm invocation 的 1.01–6.34×;短函数收益最大,因为恢复时间占执行时间比例更高(§5.1)。
  • RNN Python 函数的消融显示,加入 spliceVMA 和内核批量 VMA 创建、PTE 安装、异步预取后,端到端执行只比 warm invocation 多约 2 ms(23%);基线多 21 ms(2.5× warm)(§5.2、图 11)。
  • 元数据批量恢复相对 CRIU 的系统调用重放降低 63–99% 成本(图 12)。page-cache 共享在 25 个并发恢复下减少 20% I/O 带宽,并提高 30% 可实现吞吐(图 14)。
  • 混合 Azure 公开 Serverless trace 的缩放实验在 25 个并发恢复下达到单并发理想吞吐的 76%(§5.3、图 15)。换用慢盘时,只要带宽未成为单函数瓶颈,异步预取能隐藏大部分读延迟差异(§5.4、图 16)。

论断—证据表

论断证据评测边界置信度
OS 的映射接口是重排快照恢复的主要瓶颈3212 个 VMA 的 RNN 基线;spliceVMA 消除该开销(§5.2、图 11)单机、FunctionBench、原型 Linux
进程级边界可同时降低状态量并复用共享页VM 工作集增大 1.2–3.4×;19–50% 页可复用(图 3、表 2)论文所选函数与库环境
Spice 接近 warm-start 延迟0.6–18 ms 恢复延迟,端到端为 warm 的 1.01–6.34×(§5.1、图 10)Xeon 5420+、单 NVMe、冷 page cache
设计能扩展到并发恢复25 并发达到理想吞吐的 76%(§5.3、图 15)合成自 Azure trace 的函数混合,单机

批判性分析

论证链条

论文把问题拆成地址空间重建和非内存元数据恢复,两条瓶颈分别由 spliceVMA 和批量恢复接口处理;消融实验也支持内存路径中各组件的作用。端到端结果覆盖了三种运行时和多个函数,足以支撑“在该原型与工作负载上显著降低恢复延迟”。但“接近 warm memory”更强的含义仍受单机、单盘和稳定访问模式限制,不能直接外推到多租户集群的总成本或最坏尾延迟。

假设压力测试

SHELF 把工作集页按访问时间排列,收益依赖 profiling trace 对实际请求的代表性。论文展示了未预测访问仍可正确恢复,但没有给出预测错误率、错误预取量或输入分布漂移下的 P99。spliceVMA 的区间树查找在静态恢复路径上很合适;频繁修改映射的进程、共享页权限变化或更复杂的内核对象可能需要新的同步与安全检查。

实验可信度

实验包含强基线 CRIU、REAP 和 FaaSnap*,并明确使用冷 page cache;消融和存储敏感性实验覆盖了主要机制。限制在于不计入与函数无关的容器隔离配置成本,理由是该成本可移出调用关键路径。这个假设对稳定的预热池合理,但对按需创建 sandbox、强隔离或频繁扩缩容的部署未被验证。实验报告吞吐和恢复延迟,却未系统报告 P99、故障恢复、快照生成成本和安全隔离开销。

系统性缺陷

Spice 需要定制内核和快照格式,部署门槛明显高于用户态 CRIU。论文未讨论内核升级、快照跨版本兼容、恶意快照校验、密钥/凭据处理和恢复失败后的回滚。25 并发的 76% 理想吞吐表明专用内核线程和存储带宽仍是共享资源;更高并发、多盘或 NUMA 拓扑下的隔离性需要单独测量。

局限与后续工作

  • 局限 1:评测主要在一台高性能 NVMe 机器上进行,云环境中的网络存储、虚拟化层和共享盘竞争未覆盖。
  • 局限 2:未量化访问预测错误对 I/O、内存占用和 P99 的影响。
  • 局限 3:批量元数据恢复由 Junction 原型支撑,完整 Linux 内核中更多对象类型的可迁移性仍待验证。
  • 后续工作 1:在生产 trace 回放中改变请求输入和代码路径,分别测量预测命中率、额外读取量、P50/P99 与恢复正确性。
  • 后续工作 2:实现跨内核版本的 SHELF 兼容检查,并对快照签名、凭据隔离和恢复失败回滚做端到端评测。

相关