如何使用 D8 获取 WebAssembly 的功能优化状态?

How to get function optimization status for WebAssembly using D8?

在JavaScript中存在%GetOptimizationStatus函数,其中returns一个函数在编译流水线中的当前状态。 此外,--trace-opt/--trace-deopt/--trace-baseline 与 JavaScript 源代码一起工作。

WebAssebmly 优化状态,另一方面似乎无法用这些技术进行研究。怎样才能看到WebAssembly函数成功通过Liftoff/Turbofan?

%IsLiftoffFunction(自然只对JS可见的函数有效,即导出函数),还有--trace-wasm-compilation-times.

通常,跟踪功能是在开发人员 (1) 需要它时构建的,并且 (2) 假设它在未来会足够有用以实际登陆代码,而不是仅仅入侵一些 printfs 在本地,然后在手头的问题解决后丢弃它们。 Wasm 执行模型非常简单(目前),因此没有太多需要为其构建跟踪。 (在我们几个月前启用动态分层之前,它曾经更简单。)


截至今天(2022-05-29,这部分可能不会老化),在默认配置下:

  • 在第一个函数开始执行之前,所有函数都使用 Liftoff(Wasm 基线编译器)编译。 (唯一的例外是 hopefully-rare 缺少硬件支持的情况,例如在非 SSE4.1 x86 硬件上使用 SIMD 指令的函数:它们会立即使用 Turbofan 进行编译。我希望看到修复,但工作量很大而且并不紧急。)
  • 当函数运行时间足够长时,它会使用 Turbofan 进行优化,并在下次调用时使用优化后的代码。
  • 没有 OSR,没有 deopts,没有回到未优化的代码(除非你开始使用 DevTools 调试)。