写了一个轻量的 WebAssembly JIT 运行时 PWART - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
pursuer
V2EX    分享创造

写了一个轻量的 WebAssembly JIT 运行时 PWART

  •  1
     
  •   pursuer
    partic2 2022-10-13 20:25:52 +08:00 2239 次点击
    这是一个创建于 1093 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址 https://github.com/partic2/pwart https://gitee.com/partic/pwart

    找了几个 WebAssembly JIT 引擎,感觉比较重,像 wasmtime 的话至少需要建 Rust 环境,WAMR 的话现在是用 LLVM 生成程序的,内存占用和库尺寸都会比较大(fast-jit 版本好像在开发中了,不过不知道什么时候完成)。后来碰到个 jit 库 SLJIT ,看起来比较简单,就找了一个 wasm 解释器 wac,用 sljit 做代码生成,慢慢改了一个。源码全部是 C 的。

    虽然有做一些测试,但都是比较简单的测试用例,没有跑过大的应用,可能还会存在一些 BUG ,欢迎提 Issue 和 PR 。接下来是在写这个项目时的一些想法和吐槽,可能有一些错误,欢迎大佬指出。

    webassembly 中的 memory 要求是一块线性的内存,存取数据使用一个 32 位的 int,而不是指针,因此在实现上每次存取 memory 的数据我都要将地址加上基址偏移,虽然在项目中已经把基地址存放到寄存器里以加速这个过程,但感觉还是有点多余。同样的函数的间接调用也是要将函数放在 table 里再用索引去调用。引入指针 /引用概念,并增加类似获取 sizeof(void *)的指令感觉会不会好一些?

    跳转必须以块为单位向外跳转,没有任意 label 跳转的模式,作为 ir ,或者 v-isa ,似乎是增加了一些代码生成器的工作量,还降低了一些代码优化空间。为什么 wasm 会选择这样的设计呢?

    另外,可能是我学艺不精,我一开始看 webassembly spec 的文档像在看天书,各种符号,后面结合解释器的源码才勉强看明白。 做这个项目的本来还有个想法是让 wasm 成为可以衔接各种语言的一个平台,不过在做的过程中发现,从生态来讲,用 C 作为一个目标平台似乎更好的选择。所以我还建了个将 tinycc 裁剪一下主要为满足 JIT 需要的分支 https://github.com/partic2/tinycc-min.git

    EulerChen
        1
    EulerChen  
       2022-11-14 14:17:38 +08:00
    请问您做的这个轻量级 JIT 打算是应用在什么场景下呢?

    我们团队这边目标场景是区块链,也做了一个对标 WAMR fastjit 的轻量级 JIT ,并已经上线蚂蚁链生产环境,JIT 整体编译+执行时间比 wasmer-singlepas 、wasmer-cralieft 、wasmer-llvm 都要好
    pursuer
        2
    pursuer  
    OP
       2022-11-14 19:32:22 +08:00
    @EulerChen
    原想法是 写一个承载各种语言的跨平台通用运行时 /虚拟机,实现生态复用(类似 minijvm 项目,不过是 wasm)。不想依赖 llvm ,是因为 llvm 太重,在客户端场景使用可能效果不理想。再加上发现了比较成熟的轻量 jit 引擎 sljit ,支持很多 cpu 和操作系统,于是就实现了这个库。

    现在的想法就像正文里写的。从现在的语言生态来说,使用 c(tinycc) + js(quickjs)作为轻量通用跨平台层似乎更好,毕竟上面两个语言已经承载了非常庞大的生态。当然这还要看 wasm 后续生态的发展。

    虽然暂时工作重心不在这个项目,不过如果有人报 BUG 或者 PR ,我也会花时间搞一搞。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:42 PVG 02:42 LAX 11:42 JFK 14:42
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86