Возможно ли использовать eBPF для отслеживания кода на уровне стека Python?

dtrace на платформах, отличных от Linux, давно рекламировалась, чтобы иметь возможность динамически инструментировать код node.js для выполнения динамической трассировки на уровне узлов, например, чтобы разрешить отладку программ узлов на уровне стековых фреймов и переменных JavaScript (вместе с более низкими отслеживание уровня) из дампа ядра.

Достиг ли eBPF в Linux такого уровня сложности? В частности, меня интересует Python, но я бы посоветовал ответить на этот вопрос, если бы он отвечал для любого аналогичного динамического языка

Если нет, то что еще нужно сделать, чтобы поддержать это?

1 ответ

Решение

Да, вы можете использовать зонды BPF и USDT для отслеживания скриптов Python. Вы должны будете собрать свою среду исполнения Python с помощью зондов USDT.

bcc содержит несколько скриптов трассировки для Python. Например, вы можете использовать pythoncalls.sh распечатать 2 верхних метода с именем:

$ ./pythoncalls.sh -T 2 -p 26914
Tracing calls in process 26914 (language: python)... Ctrl-C to quit.

METHOD                                              # CALLS
<stdin>.<module>                                          1
<stdin>.fibo                                       14190928
^C

Обратите внимание, что некоторые другие виртуальные машины поддерживают зонды USDT, например, Java, Perl, PHP, Ruby и Tcl.

Другие вопросы по тегам