Создать исполняемый файл из скрипта bcc python
bcc использует python для компиляции программ ebpf, есть ли какой-либо удобный способ сгенерировать исполняемый файл из этих сценариев python, чтобы я мог запускать эти программы трассировки на серверах, где не установлены среда clang и llvm?
1 ответ
TL;DR. Нет, не с BCC. Возможно, вы захотите проверить BPF CO-RE.
Для решения этой проблемы для bcc есть две части. Во-первых, вам нужно скомпилировать объектный файл с программой BPF и карты, которые будут работать в вашей целевой системе (та же версия / заголовки ядра и те же соглашения, что и загрузчик BPF Linux). Во-вторых, вам понадобится компонент пользовательского пространства BCC, чтобы распознавать и работать с этой программой и картами.
В настоящее время BCC не поддерживает ни один из них. У моего форка есть (несколько устаревшая) ветка, где я реализовал поддержку сброса объектного файла на диск с соглашениями, которые позволяют загружать его в ядро Linux. Вероятно, это неполно для вашей цели, так как я только пытался загрузить программу в ядро; Что случилось потом, меня не волновало. Также была проведена некоторая работа по запуску инструментов BCC в удаленных системах, но я не знаю, каково это сейчас.
Одно из предпринимаемых усилий, направленных на решение вашей проблемы, - это BPF CO-RE. BPF CO-RE позволяет разрабатывать программы трассировки BPF, переносимые между версиями Linux. Поэтому вам не нужно компилировать с заголовками Linux целевой системы и больше не нужен LLVM/Clang. Команда, стоящая за этим усилием, недавно опубликовала две статьи о принципах и внутренней работе BPF CO-RE и о том, как это будет применяться к инструментам BCC.