使用vtune和jitprofiling.h支持编译nodejs

时间:2014-10-24 16:09:42

标签: javascript node.js vtune

我唯一的目的是使用vTune在Node.js下分析JavaScript代码。

我尝试按照此帖子中显示的步骤进行操作:Profiling Nodejs with vTune,但我没有运气。

我使用Debian 7 x86_64,我的vTune Amplifier XE版本是2015(评估模式)。这些模块在启动时加载了service sep3_15 start,我可以通过lsmod看到它们。另外,我构建了随vTune提供的示例jitprofiling项目,它可以工作(我可以看到动态内容)。所以,我的问题是使用vTune支持构建Node.js。

如果我执行上述步骤,并且只是使用vcbuild.bat nosign./configure更改make,则会收到错误" ../ src / node.cc:22 :67:致命错误:v8-vtune.h:没有这样的文件或目录",并且唯一正确继续编译的解决方案是添加node.gyp中的下一行:

  'include_dirs': [
    // ...
    'deps/v8/src/third_party/vtune',
    // ...

这是获取包含(v8-vtune.h)和编译节点的唯一方法。

但是当使用vTune Amplifier导入时,我看不到Dynamic code和JS的来源。

我尝试了很多不同的东西,例如构建节点以便使用./configure --build甚至./configure --debug --gdb进行调试,然后强制执行来自node的{​​{1}}二进制文件,而不是{ {1}}。我可以看到它有符号定义(out/Debug/node比Release版本大得多),因为它在使用vTune进行概要分析时不会发出警告。虽然我可以看到所有节点源代码,但我看不到out/Release/node

我甚至尝试在strings node | wc -l下强制变量Dynamic codegdbjit=on

我尝试了夜间构建0.11.11和最新的0.11.14。

我不知道该怎么做。

编辑:我正在用不同的选项进行更多的编辑(上面提到的)。最后,我可以看到它如何工作到0.11.12版本,但没有0.11.13或0.11.14。

1 个答案:

答案 0 :(得分:1)

由于V8的变化,node.js 0.11.13所针对的V8中的VTune支持被破坏。它在最新的V8版本中得到了解决。 对于node.js 0.11.13,您需要手动修复它:

  1. 按照此说明Profiling Nodejs with vTune。我假设你已经完成了它。
  2. 修复损坏的VTune支持:
  3. [nodejs-v0.11.13] \ deps \ v8 \ include \ v8.h文件: 取代

    Handle<Script> script;
    

    Handle<UnboundScript> script;
    

    [nodejs-v0.11.13] \ deps \ v8 \ src \ log.cc file:in&#34; void JitLogger :: LogRecordedBuffer(...)&#34;功能,替换

    event.script = ToApiHandle<v8::UScript>(script_handle);
    

    event.script = ToApiHandle<v8::UnboundScript>(script_handle);
    

    [nodejs-v0.11.13] \ deps \ v8 \ src \ third_party \ vtune \ vtune-jit.cc file:in&#34; void VTUNEJITInterface :: event_handler(const v8 :: JitCodeEvent * event)&#34 ;功能,替换

    Handle<Script> script = event->script;
    

    Handle<UnboundScript> script = event->script;
    

    应该有所帮助。