Представлен первый выпуск библиотеки Aya, позволяющей создавать на языке Rust обработчики eBPF, запускаемые внутри ядра Linux в специальной виртуальной машине с JIT. В отличие от других инструментов для разработки eBPF-программ, Aya не использует libbpf и компилятор bcc, а предлагает собственную реализацию, написанную на Rust, которая использует crate-пакет libc для прямого обращения к системным вызовам ядра. Для сборки Aya не требуется наличие инструментария для языка C и заголовочных файлов ядра. Код библиотеки распространяется под лицензиями MIT и Apache 2.0.
Основные возможности:
Напомним, что eBPF представляет собой встроенный в ядро Linux интерпретатор байткода, позволяющий создавать обработчики сетевых операций, отслеживать работу систем, перехватывать системные вызовы, контролировать доступ, обрабатывать события с сохранением хронометража, подсчитывать частоту и время выполнения операций, выполнять трассировку с использованием kprobes/uprobes/tracepoints. Благодаря применению JIT-компиляции, байткод на лету транслируется в машинные инструкции и выполняется с производительностью нативного кода. XDP предоставляет средства для запуска BPF-программ на уровне сетевого драйвера, с возможностью прямого доступа к DMA-буферу пакетов, что позволяет создавать высокопроизводительные обработчики для работы в условиях большой сетевой нагрузки.
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55340
Основные возможности:
- Поддержка формата BTF (BPF Type Format), предоставляющего информацию о типах в псевдокоде BPF для проверки типов и сопоставления с типами, предоставляемыми текущим ядром. Применение BTF даёт возможность создавать универсальные eBPF-обработчики, которые можно использовать без перекомпиляции с разными версиями ядра Linux.
- Поддержка вызовов "bpf-to-bpf", глобальных переменных и инициализаторов, что позволяет оформлять программы для eBPF по аналогии с обычными программами, использующими aya в качестве runtime, переопределяющем функции с учётом работы в eBPF.
- Поддержка различных типов ядра, включая обычные массивы, хэши (hash map), стеки, очереди, трассировки стека, а также структуры для сокетов и отслеживания производительности.
- Возможность создавать различные типы eBTF-программ, включая программы для фильтрации и управления трафиком, обработчики cgroup и различных операций с сокетами, XDP-программы.
- Поддержка платформ для асинхронной обработки запросов в неблокирующем режиме tokio и async-std.
- Быстрая сборка, без и привязки к сборке ядра и заголовочным файлам ядра.
Напомним, что eBPF представляет собой встроенный в ядро Linux интерпретатор байткода, позволяющий создавать обработчики сетевых операций, отслеживать работу систем, перехватывать системные вызовы, контролировать доступ, обрабатывать события с сохранением хронометража, подсчитывать частоту и время выполнения операций, выполнять трассировку с использованием kprobes/uprobes/tracepoints. Благодаря применению JIT-компиляции, байткод на лету транслируется в машинные инструкции и выполняется с производительностью нативного кода. XDP предоставляет средства для запуска BPF-программ на уровне сетевого драйвера, с возможностью прямого доступа к DMA-буферу пакетов, что позволяет создавать высокопроизводительные обработчики для работы в условиях большой сетевой нагрузки.
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55340