我如何测量 CPU 缓存和 JavaScript 引擎中的预取未命中?

How do I measure CPU cache and prefetch misses in JavaScript engines?

我想要一种命令行方式来评估低级贡献者以降低 Node.js 应用程序的每瓦性能。即,JIT 生成的本机代码的 L1、L2 和预取缓存未命中,以及 JavaScript 运行 时间本身的 JIT/GC/interpteter。

JavaScriptCore、v8 和 ChakraCore 都为 运行ning 基准测试提供命令行 REPL。我可以 运行 在基于 Intel、AMD 和 ARMv6 的硬件上使用什么分析器来合理准确地收集这些统计数据?我希望有一种方法可以在至少两个操作系统上执行此操作:Windows、Mac、and/or Linux.

V8 和 Linux perf 工具相互支持,请参阅 the documentation。如果你有一个非常新的系统(IIRC 内核 >= 4.4 和 perf >= 4.10),你可以跳过编译你自己的内核和 perf.

的步骤

您可以使用 Valgrind。引用他们的常见问题解答,"Valgrind can handle dynamically generated code, so long as none of the generated code is later overwritten by other generated code"。

它也支持各种平台,包括 X86/Linux、X86/Darwin 等