bpftrace — это язык трассировки высокого уровня для Linux. bpftrace использует LLVM в качестве бэкэнда для компиляции сценариев в байт-код eBPF и использует libbpf и bcc для взаимодействия с подсистемой Linux BPF, а также существующие возможности трассировки Linux: динамическую трассировку ядра (kprobes), динамическую трассировку на уровне пользователя (uprobes). ), точки трассировки и т. д. Язык bpftrace основан на awk, C и предшественниках трассировщиков, таких как DTrace и SystemTap. bpftrace был создан Аластером Робертсоном.
Как установить и собрать
Руководство/Справочное руководство
Учебное пособие
Примеры однострочников
Видео
Инструменты
Способствовать
Разработка
Поддерживать
Руководство по миграции
Типы зондов
Плагины
Лицензия
Следующие однострочники демонстрируют различные возможности:
# Files opened by thread name bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %sn", comm, str(args->filename)); }' # Syscall count by thread name bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }' # Read bytes by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read /args->ret/ { @[comm] = sum(args->ret); }' # Read size distribution by thread name: bpftrace -e 'tracepoint:syscalls:sys_exit_read { @[comm] = hist(args->ret); }' # Show per-second syscall rates: bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @ = count(); } interval:s:1 { print(@); clear(@); }' # Trace disk size by PID and thread name bpftrace -e 'tracepoint:block:block_rq_issue { printf("%d %s %dn", pid, comm, args->bytes); }' # Count page faults by thread name bpftrace -e 'software:faults:1 { @[comm] = count(); }' # Count LLC cache misses by thread name and PID (uses PMCs): bpftrace -e 'hardware:cache-misses:1000000 { @[comm, pid] = count(); }' # Profile user-level stacks at 99 Hertz for PID 189: bpftrace -e 'profile:hz:99 /pid == 189/ { @[ustack] = count(); }' # Files opened in the root cgroup-v2 bpftrace -e 'tracepoint:syscalls:sys_enter_openat /cgroup == cgroupid("/sys/fs/cgroup/unified/mycg")/ { printf("%sn", str(args->filename)); }'
Можно легко создать более мощные сценарии. Примеры см. в разделе «Инструменты».
Примечание. Некоторая информация в этих видеороликах может быть устаревшей. Источником истины является текущее справочное руководство.
Повышение эффективности bpftrace – 2023 г.
Рецепты Bpftrace: 5 решенных реальных проблем — 2023 г.
Отслеживание Linux стало проще с помощью bpftrace — 2022 г.
Заранее скомпилированные программы bpftrace — 2021 г.
Начало работы с наблюдаемостью BPF – 2021 г.
Внутренние компоненты bpftrace — 2020
Использование bpftrace с Performance Co-Pilot и Grafana — 2020
Введение в язык трассировки bpftrace — 2020
Вклады приветствуются! Пожалуйста, смотрите раздел разработки ниже для получения дополнительной информации. Для новых инструментов bpftrace добавьте их в новый репозиторий пользовательских инструментов. Инструменты, существующие в этом репозитории, представляют собой небольшую коллекцию, которую курируют сопровождающие bpftrace.
Отчеты об ошибках и запросы на добавление функций: система отслеживания проблем.
IRC разработки: #bpftrace на irc.oftc.net.
Хорошие первые выпуски
Рекомендации по кодированию
Руководство по разработке
Дорожная карта развития
Фаззинг
Никс
Процесс выпуска
Тесты
Для получения дополнительной помощи/обсуждения используйте нашу страницу обсуждений.
Мы также проводим обычные часы работы офиса, открытые для публики.
Более подробную информацию смотрите в Руководстве.
bpftrace имеет несколько плагинов/определений, интегрирующих синтаксис в ваш редактор.
Эмакс
Вим
VS-код
Copyright 2019 Аластер Робертсон
Лицензия Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.