#14312·wasmtime

Cranellift: 以~8-18%的速度在信号 基于 taps(假相)下在内存绑定回旋

作者: stevendore创建于 2026年9月10日更新于 2026年9月15日
标签bugcranelift

我们在高通量的HTTP代理中嵌入了时间,并将吞吐量回归到14230(b5b8f49a04,"使LastStores成为正版的花纹"). 由内存捆绑的来宾回路根据引擎配置情况,运行速度会慢到8-18%,而股票配置没有受到影响,这很可能是上游基准没有抓住的原因. 完整的数据,二分虫,以及一字节可复制源重现如下.

测试案例

这是一个运行时间性能回归(~8-18%在一个内存捆绑的WASM回路上),不是错误编译或崩溃,所以没有降低.clif这个"失败". 回归是整个热函数中丢失的冗余负载消除,而"clif-util bugpoint"不适用于perf Dertas.

热功能为平相相相(Rust源入下方,WASM建设可与被绑起的工具链进行字节复制). 其CLIF可在两种修改中倾销:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 时间编译 --emit-clif < dir >
-O基于信号的陷阱=n -O 内存保存=0x800000
-O 内存 - 可能 - 移动=y 长凳 - 工作负荷。

乐于附加前/后为 #14230 CLIF 或分解来进行排序函数,如果此功能对分解有用的话.

* 重现步骤

* 构建来宾部分(用被绑住的工具链进行字节决定-下面的全源内含: WIT世界+~170-行'lib.rs' +'Cargo.toml'/'Cargo.lock'):

嘘
锈蚀工具链安装 1.94.1 -- 最小规格
锈蚀目标增加 " 黄泥 " -- -- 工具链1.94.1
货物 + 1.94.1 建造 -- -- 目标为:hem32-wasp2 -- -- 释放
md5sum目标/wasm32-wasp2/放出/bnch 工作量. WASM
# cebda31ff7808793ae03be52e211cc80 - 确切的文物所有数字
# 以下测量

(.cargo/config.toml' sets '-C link-arg=-zstack-small=131072',标准的WASI 02.0 WIT包在wit/deps/'下销售:cli、时钟、文件系统、io、随机和插座 -- -- 例如,WebAssembly/wasi-cli 0.2.0放出。 )

  • 建造A/B跑道(通过货物包更名将两个原时修正连接在一起的单一二进制-下文附录中的来源):wt old = rev bc2f967927,wt new = rev 774dec1c5e.

运行它与组件, 被钉住,静静的机器:

嘘 任务-c 8 货物运行 -- -- 释放 -- -- 长凳 -- -- 工作量。


跑跑者将所有进口物作为陷阱(`Linker:define unknown imports as traps' -- -- 板凳路径称为不进口)和 " invoke ("bench sort group",[]) " 时间 " -- -- 线性内存中降出`i32'的一种泡沫 -- -- 每配置3发交替。

预期成果

bc2f967927至774dec1c5e的同型WASM和同型 " Config " 在所有配置上的可比较性。


实际结果

当内存访问被编译为明确的边框检查控制流时,被调用的时间递减. 股票配置不受影响(21位医生的电话):

* 旧(`bc2f967927')
|.
· 股票 · · · 24.91 ms · 25.04 ms · + 0.5% · ·
`信号-基于-陷阱(假)' ++
. . . . . . .

内容来源: bytecodealliance/wasmtime