EBPF
| eBPF | |
|---|---|
| Краткие сведения | |
| Полное название | extended Berkeley Packet Filter |
| Платформа | Linux |
| Назначение | трассировка, наблюдаемость, сетевые обработки, безопасность |
| Ключевые элементы | verifier, bpf() syscall, eBPF maps, точки прикрепления (hooks) |
eBPF (extended Berkeley Packet Filter) — подсистема ядра Linux, позволяющая загружать и выполнять в ядре небольшие программы, которые проходят проверку безопасности (verifier) и затем прикрепляются к выбранным событиям и точкам обработки.[1] eBPF рассматривается как развитие классического BPF, применявшегося для фильтрации и захвата пакетов в системах BSD.[2]
Общая характеристика[править]
В eBPF программа загружается в ядро и выполняется в рамках заранее определенной модели, включая ограниченный набор инструкций и правила обращения к данным. Перед запуском программа проходит проверку, цель которой — исключить небезопасные действия (например, выход за границы памяти или бесконечные циклы).[3]
История и происхождение[править]
Классический BPF был предложен как архитектура эффективной фильтрации пакетов и захвата трафика на уровне ОС, с акцентом на производительность и минимизацию лишних копирований.[2] В Linux концепция получила развитие в виде eBPF, где область применения расширилась за пределы сетевой фильтрации и стала использоваться для трассировки, наблюдаемости и других задач системного уровня.[4]
Архитектура и основные компоненты[править]
Загрузка программ[править]
Загрузка и управление объектами eBPF выполняется через системный вызов bpf(), который принимает команды (subcommands) и параметры, описывающие требуемую операцию.[5] В man-описании bpf(2) приводится обзор того, как программы eBPF загружаются, какие типы объектов существуют и как они прикрепляются к событиям.[6]
Карты (eBPF maps)[править]
Для обмена данными между программой eBPF и пользовательским пространством, а также между различными программами eBPF, используются структуры данных, называемые maps. Карты позволяют хранить счетчики, таблицы соответствий и другие данные, необходимые для обработки событий и накопления статистики.[6]
Точки прикрепления (hooks)[править]
Программы eBPF могут прикрепляться к различным событиям и подсистемам (например, сетевые пути обработки, трассировочные события, системные вызовы). Конкретные точки и типы программ определяются возможностями ядра и выбранной задачей.[3]
Применение[править]
eBPF применяется в задачах, где требуется анализ или обработка событий с минимальными накладными расходами:
- наблюдаемость и трассировка (метрики, профилирование, диагностика задержек);
- сетевые функции (фильтрация, телеметрия, обработка пакетов в ядре);
- безопасность (контроль событий и политик на уровне ОС).
Обзор типовых направлений использования приводится в документах сообщества IO Visor и в вводных материалах по eBPF. [4]
Инструменты и экосистема[править]
В экосистеме eBPF существует ряд инструментов и библиотек, упрощающих разработку и применение программ. К числу известных проектов относят BCC (BPF Compiler Collection), который описывается как набор инструментов и примеров для трассировки и анализа ввода-вывода на базе eBPF.[7]
Источники[править]
- ↑ BPF Documentation (kernel.org)
- ↑ 2,0 2,1 The BSD Packet Filter: A New Architecture for User-level Packet Capture (USENIX, PDF)
- ↑ 3,0 3,1 What is eBPF? (ebpf.io)
- ↑ 4,0 4,1 eBPF extended Berkeley Packet Filter (iovisor.org)
- ↑ eBPF Syscall (docs.kernel.org)
- ↑ 6,0 6,1 https://man7.org/linux/man-pages/man2/bpf.2.html bpf(2)
- ↑ BCC — Tools for BPF-based Linux IO analysis, networking, monitoring, and more (GitHub, iovisor)