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]

Источники[править]

  1. BPF Documentation (kernel.org)
  2. 2,0 2,1 The BSD Packet Filter: A New Architecture for User-level Packet Capture (USENIX, PDF)
  3. 3,0 3,1 What is eBPF? (ebpf.io)
  4. 4,0 4,1 eBPF extended Berkeley Packet Filter (iovisor.org)
  5. eBPF Syscall (docs.kernel.org)
  6. 6,0 6,1 https://man7.org/linux/man-pages/man2/bpf.2.html bpf(2)
  7. BCC — Tools for BPF-based Linux IO analysis, networking, monitoring, and more (GitHub, iovisor)