В настоящее время я могу сказать trace-cmd
(внешний интерфейс ftrace) использовать инфраструктуру графа функций ftrace для трассировки указанной рабочей нагрузки. Используя некоторые инструменты обработки данных трассировки, я могу просмотреть частоту вызова функций и соответствующую общую продолжительность каждого вызова функции. Пример вывода может выглядеть следующим образом, где я отслеживаю вызовы функций ext4, сгенерированные моей рабочей нагрузкой:
# trace-cmd post-processing example output
# function name, frequency, total duration (us)
ext4_alloc_inode(),1,35.567
ext4_read_inode_bitmap(),1,12.076
ext4_init_io_end(),2,41.216
ext4_journal_check_start(),39,716.3
ext4_da_write_end(),10,102.661
ext4_da_get_block_prep(),9,257.46999999999997
ext4_block_write_begin(),2,88.069
ext4_bio_write_page(),1,33.016
Я видел невероятные графики пламени, которые можно создать с помощью eBPF
, systemtap
, perf
. , и т. д., которые заставили меня поверить, что я смогу добиться вывода, аналогичного моему выводу trace-cmd
, используя perf
или eBPF
. Однако есть несколько препятствий:
- Моя рабочая нагрузка может длиться до 15 минут, что может привести к созданию огромных журналов, если я буду использовать
perf
. Для справки вы можете просмотреть пример вывода, который отслеживает bash гораздо дешевле. время. - Я недостаточно хорошо знаком с
eBPF
, чтобы определить, могу ли я получить такие же данные/вывод, как в моем примере постобработкиtrace-cmd
.
Для тех из вас, кто знаком с eBPF
или perf
лучше, чем я, я хотел бы знать:
- Можно ли использовать
eBPF
илиperf
для достижения моей цели? - Если да, то почему это возможно?
Если вы чувствуете себя особенно щедрым, буду признателен за примеры кода/команд, которые помогут мне достичь моей цели.