2023-03-06 18:17:13
Wassup, что же такое eBPF и bpftrace?
eBPF (
Enhanced Berkeley Packet Filter) — это расширенная версия Беркли-фильтра (BPF). Это абстрактная виртуальная машина (VM), которая работает внутри ядра
Linux, подобно ядру виртуальной машины Java. Он позволяет программистам создавать специализированные программы, которые могут быть загружены в ядро Linux и запущены для анализа сетевых пакетов и других системных данных. Он также используется для создания инструментов для отслеживания производительности, которые могут использоваться для диагностики и отладки сетевых проблем.
• apt install libbpf-tools.
Для диагностики используем:
tcplife. Эта основанная на
eBPF утилита демонстрирует полностью установленные
TCP сессии с их
ID процесса (
PID), именем команды (
COMM), отправленными и полученными байтами (
TX_KB —
передать/
Trancieve,
RX_KB —
получить/
Recieve), а также длительность в миллисекундах (MS):
• root@linux:~# tcplife
PID COMM LADDR LPORT RADDR RPORT TX_KB RX_KB MS
5654 ssh 127.0.0.1 4192 127.0.0.1 666 0.00 0.00 0.04
• apt install bpftrace.
BPFtrace — это гибкая и мощная утилита для анализа и отладки производительности ядра Linux, которая использует движок
eBPF (
расширенный фильтр пакетов Беркли). Он позволяет вам писать сценарии для анализа и отладки производительности ядра в виде скриптов языка
BPFtrace. Эти скрипты могут быть использованы для выявления проблем с производительностью в ядре Linux и даже для настройки производительности.
• root@linux:~# bpftrace -e 'tracepoint:syscalls:sys_enter_execve { printf("%s -> %s\n", comm, str(uptr(args->filename))); }'
И сразу смотрим вывод, мой взгляд сразу упал на мои плагины:
panel-> /asus/scripts/rx_tx.sh.
Эта команда использует инструмент
bpftrace для считывания точек трассировки для системных вызовов sys_enter_execve, и выводит на экран
имя запущенного процесса и
имя его исполняемого файла. Чтобы получить отчет, вы должны запустить эту команду и просмотреть вывод, который она выводит на экран.
Мы можем вывести
PID процесса, изменив всего: { printf("%d -> %s\n",pid, str(uptr(args->filename))); }' или { printf("%d,%s -> %s\n",pid,comm, str(uptr(args->filename))); }'.
Вам может быть полезно следующие:
• Руководство по bpftrace.
• Bpftrace с примерами-однострочниками.
Для сетевых инженеров, системных администраторов, да и разработчиков,
eBPF — не заменимая утилита. Особенно, если речь идет о бэкенд разработке )
Antichrist Blog & Andromeda, IT, APK, Music, Chat, Archive
4.0K views15:17