Дамп вывода v8 JIT с узла

Может ли node.js (или какой-либо другой интерфейс v8 или оболочка вокруг v8) выводить сгенерированную сборку из JIT v8?

Я хотел бы посмотреть, как выглядит сгенерированная сборка для различных фрагментов.


person slipheed    schedule 08.06.2012    source источник
comment
Я пробовал это, но ничего не выводит: node --expose-debug-as=d -e "function f(){return 1;}; d.Debug.disassemble(f)"   -  person slipheed    schedule 08.06.2012
comment
есть ли конкретный фрагмент, который вы хотели бы исследовать?   -  person Vyacheslav Egorov    schedule 08.06.2012


Ответы (1)


Вам необходимо убедиться, что node.js собран с включенным дизассемблером V8. В отладочных сборках он будет включен по умолчанию. Для выпускных сборок (в достаточно недавнем узле, использующем сборку GYP) вы можете включить его, выполнив:

GYP_DEFINES="v8_enable_disassembler=1 v8_object_print=1" ./configure

и восстановление узла.

Когда дизассемблер включен, вы можете использовать такие флаги, как --print-code, --print-code-stubs, --print-opt-code и --code-comments, чтобы проверить код, сгенерированный V8.

Если вы хотите исследовать IR, используемый оптимизирующим компилятором, используйте --trace-hydrogen и посмотрите на hydrogen.cfg (его можно просмотреть с помощью C1 Visualizer).

person Vyacheslav Egorov    schedule 08.06.2012
comment
Эта информация еще актуальна? - person Oleksii Rudenko; 03.12.2015
comment
@OleksiiRudenko да, в основном. Зачем? В наши дни в Node по умолчанию дизассемблер включен как в релизе, так и в отладке (github .com/nodejs/node/blob/master/common.gypi#L21). Также я рекомендую использовать IRHydra (mrale.ph/irhydra/2) вместо C1 Visualizer - но в остальном все флаги одинаковые. - person Vyacheslav Egorov; 03.12.2015
comment
IRHydra выглядит очень круто! Спасибо, приятно знать, что теперь мне не нужно перекомпилировать узел. Интересно, интегрируется ли IRHydra с Benchmark.js? Я имею в виду, может ли он исключить из анализа нерелевантный код Benchmark.js? И действительно ли имеет смысл захватывать артефакты компиляции непосредственно из бенчмарков или имеет смысл создавать отдельные примеры? - person Oleksii Rudenko; 04.12.2015
comment
@OleksiiRudenko нет, это ничего не исключает - оно не зависит от кода, на который вы смотрите, на самом деле довольно сложно определить, что актуально, а что нет. Ответ на ваш второй вопрос зависит от того, какой код вы просматриваете. В некоторых случаях вам понадобится отдельный пример, в некоторых случаях (микро)бенчмарк дает достаточно данных - нет универсального ответа, когда вы решите оптимизировать на таком низком уровне. - person Vyacheslav Egorov; 04.12.2015