Я пытаюсь создать инструмент, похожий на flamegraph , но использующий другой интерфейс. У меня есть некоторые проблемы, чтобы понять вывод perf-скрипта.
Прежде всего, я записываю данные perf
с perf record -a -g -o /my/output/file.data
, если я правильно понял, как работает perf
, это займетсэмплы каждый определенный момент времени и посмотреть, где находится IP в этот момент.
Затем я генерирую вывод perf-скрипта (тот, который я планирую проанализировать) с помощью perf script -i /my/input/file.data --fields trace:comm,pid,tid,cpu,time,event,ip,sym,dso,trace
, и я получаю следующий вывод:
...
swapper 0 [000] 22925.999132: 68882 cycles:
ffffffffa9311275 rcu_prepare_for_idle+0x5 ([kernel.kallsyms])
ffffffffa93131be rcu_irq_exit+0x6e ([kernel.kallsyms])
ffffffffa9c01d4f call_function_single_interrupt+0xf ([kernel.kallsyms])
ffffffffa99060d4 cpuidle_enter_state+0xc4 ([kernel.kallsyms])
ffffffffa99064d9 cpuidle_enter+0x29 ([kernel.kallsyms])
ffffffffa92c431e do_idle+0x1de ([kernel.kallsyms])
ffffffffa92c4559 cpu_startup_entry+0x19 ([kernel.kallsyms])
ffffffffaa91617b start_kernel+0x58c ([kernel.kallsyms])
ffffffffa92000d4 secondary_startup_64+0xa4 ([kernel.kallsyms])
...
Я не понимаю, что означает время (22925.999132
).
Я также не понимаю значения счетчика циклов, сначала я подумал, что это былокак долго выполнялась функция, но если она просто выбирает IP, нет смысла иметь эту информацию.