您的位置:  首页 > 技术杂谈 > 正文

WasmEdge 0.9.0 发布,提升性能、稳定性与互操作性

2021-12-23 11:00 https://my.oschina.net/u/4532842/blog/5377231 WasmEdge 次阅读 条评论

WasmEdge 0.9.0 发布啦。新版的 WasmEdge 迎着新年的脚步走来了!是时候为大家揭晓 WasmEdge 的新特性,一起解锁 2022年的新技能吧!

此版本的 WasmEdge 专注于云原生基础架构的性能、稳定性以及与互操作性。 具体来说,WasmEdge 现在支持:

SIMD 和其它 WebAssembly 提案

WasmEdge 从 0.7.0 版本开始支持 WebAssembly SIMD(单指令多数据)提案。 从 WasmEdge 0.9.0开始,它默认启用 SIMD。

对于具有多个 CPU 内核的现代设备,SIMD 允许数据处理程序充分利用 CPU。 SIMD 可以大大提高数据应用程序的性能。

除了 SIMD 规范之外,WasmEdge 0.9.0 还增加了对 W3C 目前正在考虑的许多 WebAssembly 提案的支持,包括Import/Export mutable globals 提案、Non-trapping float-to-int conversions 提案、Sign-extension operators 提案和Multi-value提案。 这些提案在 WasmEdge 中是默认启用的。

如果你想禁用其中一些特性,你可以在 wasmedgewasmedgec中使用--disable-proposal-name

增强的 JavaScript 支持

在 WebAssembly runtime 中运行 JavaScript 程序有着非常明显的好处。 WasmEdge 可以充当与 Linux 应用程序容器并行运行的安全应用程序容器,但只消耗一小部分资源并提供更好的可移植性和安全性。

WasmEdge 不仅支持 JavaScript 应用程序,还支持将 JavaScript 与 Rust 等高性能语言混合使用。在 WasmEdge 0.9.0 版本中,我们增强了对 JavaScript 生态系统的支持。 WasmEdge 现在支持重用 ES6 模块CommonJS (CJS) 模块NPM 模块。我们还有一个运行 React SSR JavaScript 函数的示例 。

随着 WasmEdge networking socket API 及其 JavaScript runtime 的持续优化,我们的目标是在不久的将来支持复杂的应用场景,例如 React SSR Streaming。

性能提升

虽然 WasmEdge 已经是性能很好的 WebAssembly runtime 之一,但我们也知道在某些特殊情况下,WasmEdge 可能表现不佳。 其中一种情况是在 WasmEdge 中运行 JavaScript 解释器。 但现在这种情况发生改变了! WasmEdge 0.9.0 是 QuickJS 解释器引擎测试中的花费时最短的 WebAssembly runtime。

另一个与性能相关的更改是我们在 WasmEdge 0.9.0 中将 runtime 的统计指标收集和报告设为可选。 如果你想查看 WasmEdge 的性能统计信息,可以使用以下命令行选项。

  • 使用 --enable-time-measuring 展示执行时间。
  • 使用 --enable-gas-measuring 来显示使用的 gas 量。
  • 使用 --enable-instruction-count 来展示执行的命令数量。
  • 或者使用 --enable-all-statistics 来启动所有的数据选择。

改进的 C API

C API 在 WasmEdge 0.9.0 有很多改变和提升。 我们更新了与 host 函数相关的 API、Wasm 类型上下文和实例创建 API。 我们重命名了 Interpreter API 并简化了 WASI 创建和初始化。 我们还广泛重构了 C API 的内部实现以提高性能。

C API 中也有一些新特性。一个新的 WasmEdge C API 用于列出来自 AST 模块上下文的导入和导出。 开发者可以查询WASI 和 AOT 编译器相关配置。

有关 C API 更改内容的详细说明,请查看 changelog

Universal wasm binary

WasmEdge 的大部分原始性能来自其高度优化的 AOT 编译器。 开发者可以使用 wasmedec XYZ.wasm XYZ.so 命令或使用 SDK 从 AOT 编译器创建 Linux 原生 .so 文件。 然而,虽然 .so 文件的性能要高得多,但它不可移植。 从 0.9.0 开始,WasmEdge AOT 编译器工具将原生二进制文件包装到原始 wasm 文件中的自定义部分。 它允许 Wasm 应用程序在不受支持的操作系统或平台上从 AOT 编译优雅地降级到解释器执行。

开发者可以使用 wasmedgec XYZ.wasm XYZ.wasm 来创建通用的 wasm 二进制文件

有了这个特性,开发者可以在其它 wasm runtime 像运行常规 wasm 文件一样运行由 WasmEdge AOT 编译器生成的 wasm 文件。 但是如果你使用 WasmEdge 来运行 wasm 文件,WasmEdge 将从自定义部分中提取原生二进制文件并执行它。

容器和 k8s 工具

云原生 WebAssembly 应用程序可以由容器工具管理,并在 k8s 集群中与 Linux 容器应用并行运行。 作为最受欢迎的 OCI runtime 项目之一,crun 增加了内置的 WasmEdge 0.9.0 支持,云原生 WebAssembly 愿景终于成为现实。

要了解如何利用 Kubernetes、Docker、containerd 和 CRI-O 等容器工具来编排、管理和运行轻量级 WebAssembly 应用程序,请参阅文章-使用容器和 Kubernetes 工具管理 WebAssembly 应用程序

了解更多有关 WasmEdge 0.9.0 的相关信息,请查看我们的 changelog

最后,我们要感谢社区成员的贡献,包括 @q82419, @ibmibmibm, @hydai, @SAtacker, @juntao, @LFsWang, @yanganto, @apekuss, @alabulei1, @dm4, @0yi0, @nhynes, @eee4017, @LuiHsu, @avinal, @MileyFu, @O3OI, @vss96, @kenvifire, @ZhangHanDong, @CaptainVincent, @slidoooor, @robnanarivo, @Peter-Chang, @PsiACE, @spider0061, @Jayita10, @actly, @William-Mou, @L-jasmine, @chenyukang, @Yoname, @MaaKhan711635, @tpmccallum。

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接