专栏名称: 阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
今天看啥  ›  专栏  ›  阿里云开发者

WASM性能分析-插桩方案

阿里云开发者  · 公众号  · 科技公司  · 2024-08-22 08:30

主要观点总结

本文主要介绍了通过插桩计时对WebAssembly(WASM)进行性能分析的方法和实现。首先介绍了WebAssembly和WAVM的相关知识,然后详细描述了性能分析的方法,包括插桩函数设计、优化方案、插桩WASM的具体步骤和输出火焰图的过程。最后总结了性能分析的不足和参考链接。

关键观点总结

关键观点1: 介绍WebAssembly(WASM)和WAVM

WASM是一种低级别的字节码格式的汇编语言,可以从C/C++、Rust等高级语言编译而来,最初设计是在Web端实现接近原生的执行效率。WAVM是WASM的一个执行环境,采用JIT模式执行WASM。

关键观点2: 性能分析的方法

通过对WASM进行插桩计时来进行分析,包括插入perf_start和perf_end函数,记录函数执行时间和调用栈结构。使用哈希表记录数据,优化开销,最终生成火焰图。

关键观点3: 插桩WASM的具体步骤

包括将perf_start和perf_end函数添加到WASM的Import Section,修改WASM的其它Section,如Type Section、Function Section等。插桩完成后生成新的WASM文件。

关键观点4: 输出火焰图

将插桩后的WASM文件运行,生成perf.folded文件,然后使用flamegraph.pl脚本将perf.folded文件转换为火焰图,直观展示调用流程和开销占比。

关键观点5: 性能分析的不足

插桩后WASM执行效率下降,观察者效应导致准确率下降;性能分析流程复杂,增加了一个插桩的过程,对WASM文件需要重新构建,加大了实际分析的复杂性。


文章预览

阿里妹导读 本文结合了代码插桩和性能火焰图的技术,以 WebAssembly 为例介绍了性能分析的方法和相关实现。 最近对 WebAssembly 代码性能分析(Profiling)做了一些实践,发现一些思路和方法对其他即时编译(JIT)代码也是通用的。本文以 WebAssembly 为例介绍一下性能分析的方法。 WebAssembly 和 WAVM 首先简单介绍一下  WebAssembly  (下简称 WASM)[1],WASM是一个 low-level 的字节码格式的汇编语言,可以从 C/C++,Rust 等高级语言编译而来,最初设计是在Web端实现接近原生的执行效率(目前主流浏览器都支持了), 应用的例子[2] 有 Web 版的 Unity,Tensorflow, AutoCAD,Google Earth 等。 由于 WASM 可移植性好,很多项目也开始在非浏览器环境用 WASM,即通过 VM/Runtime 运行 WASM。本文讨论的就是对 VM 执行 WASM 进行性能分析,WASM 的 VM/Runtime 很多,近年也有一些陆续做了性能分析的 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览