PROD欧洲主权BaaS平台打开仪表板 →

工程 · 9 最小读取值

WebAssembly 冷启动:基准测试显示了什么

Affane Daylami · Fondateur · 2026年6月19日

返回博客

目前还没有 WebAssembly 运行时发布由第三方根据共享、分类和可重现的协议测量的冷启动数据。 Wasmtime、Wasmer 和 WasmEdge 都显示了快速启动参数,但很少对“启动”一词有相同的定义。本文不会再添加一个数字:它解释了冷启动真正衡量的是什么,为什么公布的数字不能进行比较,以及 Aurabase 的真实情况,它在生产中运行 wasmtime,但尚未发布自己的基准。

该英文文本是根据法文原文自动生成的,尚未经过审查。
该页面已自动翻译。英文版具有权威性。

This is the logical continuation of our benchmark methodology, this time applied to a specific metric. For details of the architecture of our Edge functions, see our pillar article on theRust architecture of Aurabase, or our comparison Wasmtime vs Wasmer for the architectural differences between the two runtimes.

要点

WebAssembly 冷启动添加了多个阶段(加载、提交、编译或链接、实例化、首次调用),并且不包含相同阶段的两个图形不具有可比性,即使它们显示相同的单元。 Wasmer 营销 Instaboot 作为对这一主题的直接营销回应,但其公众人物在没有分类方法的情况下不包含在此处。 Aurabase 运行 wasmtime 版本 43 作为其 Edge 功能的生产依赖项(在 aura-functions/Cargo.toml中验证),但迄今为止尚未发布任何可重现的冷启动基准。本文中没有给出 Aurabase 数据:方法才是主题。

#
观察

为什么 WebAssembly 冷启动再次成为有争议的营销论点

冷启动再次成为 WebAssembly 运行时之间商业差异化的轴心,而不仅仅是学术研究的主题。 Wasmer 通过名为 Instaboot 的功能将此作为一个明确的卖点,作为冷启动问题的直接答案。

这种反射完全让人想起我们在 后端基准测试方法的文章中记录的动态:几个竞争供应商在自己的产品页面上显示性能数据,而不总是指定生成它们的协议。没有方法的冷启动数据只不过证明了没有方法的延迟数据。

与任何其他基准测试相同的陷阱

在营销页面上发布的冷启动图,没有材料,没有工作量,没有明确定义测量的起点和终点,与口号没有什么区别。这适用于本文引用的所有运行时,包括发布数据当天的 Aurabase。

#
定义

冷启动实际上测量了什么,以及为什么这个定义改变了一切

冷启动不是单一操作:它是不同阶段的总和,两个供应商不一定以相同的名称测量相同的阶段。

加载中恢复 .wasm 模块:网络、磁盘或已存在于内存中
验证执行前检查 WebAssembly 字节码结构
编译或链接即时 JIT(Cranelift、LLVM)或链接已预编译的工件 (AOT)
实例化分配线性内存、表和全局变量,执行可能的启动函数
第一次通话请求本身的处理,有时包含在公布的数字中,有时排除在外

仅计算已加载并已编译到内存中的模块的实例化的图在机械上看起来比包含网络加载和编译的图更好。两者本身都不是错误的:当我们比较它们而不指定测量两者中的哪一个时,问题就会出现。

#
学术研究

学术文献显示了什么,以及为什么其数据不能相互比较

近年来在 arXiv 上作为预印本发表的学术工作测量了 WebAssembly 模块在不同运行时的实例化时间。这些作品之间的共同点并不是一个收敛的数字:根据测试的运行时、模块的大小和使用的硬件,这是一个显着的差异。

我们自愿不在本文中包含从这些出版物中获取的任何精确数据。在撰写本文时,如果没有对每篇论文的方法进行彻底的双重检查,重新发布一个孤立的数字将准确地重现本文所记录的问题:一个没有上下文的数字,无法让我们知道它真正测量的是什么。

另一方面,这种方差学到的东西是直接有用的:冷启动很大程度上取决于测量上下文,正如我们的一般方法文章中描述的 环境奇偶校验 规则所回忆的那样(相同的硬件、相同的区域、所有比较的系统的相同缓存状态)。

#
运行时景观

Wasmtime、Wasmer、WasmEdge:不同的编译优先级

本次辩论中引用最多的三个独立 WebAssembly 运行时并没有以相同的方式平衡编译速度和执行性能,这在一定程度上解释了为什么它们的冷启动数据不能逐项进行比较。

瓦斯姆时代Cranelift 编译后端,历史上在部署之前有可能的预编译路线Aurabase 在生产中用于边缘功能
瓦斯默长期以来记录了多个可互换的后端,包括为编译速度而不是运行时性能而设计的后端市场 Instaboot,通过已初始化实例的快照重新启动
瓦斯姆边缘公共定位注重快速启动,并有自己的竞争论据替代运行时也活跃在这个营销领域
此表用于说明不可比性,而不是对运行时间进行分类

这些架构由项目本身公开记录。我们没有在本文中逐个版本地重新验证它们,并且它们不构成性能排名。它们只是解释了为什么三个不同运行时间显示的三个冷启动数据都可以准确但彼此不具有可比性。

有关无服务器讨论中最常反对的两个运行时之间的完整架构细节,请参阅我们的专门比较 Wasmtime 与 Wasmer。

#
重新认证

Instaboot 显示的内容以及其产品页面本身无法证明的内容

根据Wasmer公开传达的产品定位,Instaboot通过快照机制恢复已经初始化的实例,而不是每次请求都重新启动一次完整的启动。这是一个真正的架构选择,与其目标问题一致。

然而,本文并没有重复 Wasmer 产品页面上显示的性能数据。在不知道什么硬件、什么工作负载以及什么测量协议产生这个数字的情况下,重新发布它将会犯上面记录的错误:将营销数字视为独立的基准结果。

证明这种谨慎的先例

像“冷启动小于 1 毫秒”这样的数字已经公开流传,包括在之前的 Aurabase 内容中,但没有得到可复制基准的支持。现在它在内部被视为不受支持。同样的规则适用于竞争运行时(包括 Instaboot)显示的任何数字,只要没有分类方法伴随即可。

#
已签入代码

Aurabase 今天对自己的冷启动能说些什么,不能说些什么

Aurabase 在生产环境中而不是在试点项目中在 Wasmtime 上运行其边缘功能。这正是该申请所允许的内容,也是该主张的结束。

3
引用的 WASM 运行时
Wasmtime、Wasmer、WasmEdge
0
基准冷启动 AURABASE 发布
迄今为止没有可重复且过时的测量
43
生产中的 WASMTIME 版本
aura-functions/Cargo.toml,产品依赖

在服务的生产依赖项中,而不是在 dev-dependency 或注释中,激活了 async 和 cranelift 功能,该依赖项是硬声明的:

Cargo.tomltoml
# 从存储库中实际提取
[dependencies]

# WASM 运行时
wasmtime = { version = "43", features = ["async", "cranelift"] }

该文件未说明的内容:目前此运行时的存储库中不存在根据 基准方法 中描述的协议测量的冷启动数据。在发布包含分类百分位数、硬件和工作负载的过时测量结果之前,不应引用任何 Aurabase 数据作为产品的测量特征。有关平台的总体架构,请参阅我们的支柱文章 Aurabase Rust 架构。有关冷启动 WASM 和冷启动容器之间的具体比较(与此处讨论的方法问题无关),请参阅我们的专门文章 WASM 与容器。

#
阅读网格

如何在您相信之前阅读冷启动数字

任何冷启动人物都要问七个问题,包括我们发布那天的问题。

  1. 包括哪些阶段? 网络加载、验证、编译、实例化、首次调用:只统计部分的数字与全部统计的数字没有可比性。
  2. 模块真的“冷”吗? 已在内存或磁盘缓存中的模块不会测试与首次加载的模块相同的内容。
  3. JIT 编译还是预编译工件 (AOT)? 这两种策略具有结构上不同的启动成本。
  4. 个位数还是分布? 十次最佳运行与一千次运行中 p95 的值不同。
  5. 指定设备和区域? 第三方无法复制没有硬件规格的图形。
  6. 同等负载和拓扑下的比较? 将自托管运行时与托管服务进行比较而不报告它会扭曲读数。
  7. 测试的运行时的日期和版本? 一个正在快速发展的项目的未注明日期的数字在几个月后就毫无意义了。
#
常见问题解答

常见问题解答

WebAssembly 冷启动到底是什么?+
这是对尚未激活的功能的请求到达与其首次有效响应之间的时间间隔。这次添加了几个不同的阶段:加载模块、验证字节码、编译或链接、实例化(线性内存、表、全局变量),然后处理请求。两个冷启动数据不一定测量相同的相位。
“WebAssembly 冷启动时间小于 1 毫秒”的数字是真的吗?+
该数字已公开传播,包括在之前的 Aurabase 内容中,但没有得到具有分类硬件、工作负载和方法的可重复基准的支持。现在它在内部被视为不受支持。同样的注意事项也适用于没有发布方法的竞争运行时显示的任何冷启动数字。
什么是 Instaboot、Wasmer 功能?+
根据 Wasmer 公开传达的产品定位,Instaboot 会恢复已通过快照初始化的实例,而不是每次请求时都重新启动一次完整的启动。本文不包括 Wasmer 产品页面上显示的任何性能数据:如果没有单独的方法和材料,重新发布此图将重现其记录的问题。
Aurabase 是否发布了其 Edge 功能的冷启动数据?+
不会。Aurabase 将 Wasmtime 版本 43(异步和cranelift 功能)作为 aura-functions 中的生产依赖项运行,这一事实在服务的 Cargo.toml 中直接得到验证。但目前该运行时的存储库中不存在遵循可重现且过时协议的冷启动基准。
WebAssembly 启动速度比容器快吗?+
从架构上来说,WebAssembly 模块的启动表面比容器更小(没有来宾内核,没有要挂载的完整文件系统),这使得快速冷启动变得可行。但实际差异很大程度上取决于测试的场景。我们专门讨论 WASM 与容器比较的文章通过具体案例探讨了这一点。

引用的外部来源:公共产品文档 Wasmer (Instaboot),公共项目文档 Wasmtime (字节码联盟),在准备本文时查阅,但没有对它们显示的性能数据进行独立的双重检查。

准备好部署了吗?

五分钟内完成您的后端。

无需信用卡 · 500 MB 免费 · 50,000 MAU