Представлено бібліотеку Aya для створення eBPF-обробників мовою Rust

Представлено перший випуск бібліотеки Aya, що дозволяє створювати на мові Rust обробники eBPF, які запускаються всередині ядра Linux у спеціальній віртуальній машині з JIT. На відміну від інших інструментів розробки eBPF-програм, Aya не використовує libbpf і компілятор bcc, а пропонує власну реалізацію, написану на Rust, яка використовує crate-пакет libc для прямого звернення до системних викликів ядра. Для складання Aya не потрібна наявність інструментарію для мови C та заголовних файлів ядра. Код бібліотеки розповсюджується під ліцензіями MIT та Apache 2.0.

Основні можливості:

  • Підтримка формату BTF (BPF Type Format), що надає інформацію про типи в псевдокод BPF для перевірки типів і зіставлення з типами, що надаються поточним ядром. Застосування BTF дозволяє створювати універсальні eBPF-обробники, які можна використовувати без перекомпіляції з різними версіями ядра Linux.
  • Підтримка викликів «bpf-to-bpf», глобальних змінних та ініціалізаторів, що дозволяє оформляти програми для eBPF за аналогією зі звичайними програмами, які використовують aya як runtime, що перевизначає функції з урахуванням роботи в eBPF.
  • Підтримка різних типів ядра, включаючи звичайні масиви, хеші (hash map), стеки, черги, трасування стека, а також структури для сокетів та відстеження продуктивності.
  • Можливість створювати різні типи eBTF-програм, включаючи програми для фільтрації та керування трафіком, обробники cgroup та різних операцій із сокетами, XDP-програми.
  • Підтримка платформ для асинхронної обробки запитів у неблокуючому режимі tokio та async-std.
  • Швидка збірка, без і прив'язки до складання ядра та заголовних файлів ядра.

Проект поки що розглядається як експериментальний — API ще не стабілізовано і продовжує розвиватися. Також ще не реалізовано всі задумані можливості. До кінця року розробники розраховують довести функціональність Aya до паритету з libbpf, а у січні 2022 року сформувати перший стабільний реліз. Також планується об'єднати частини Aya, необхідні для написання коду на Rust для ядра Linux з компонентами, що працюють у просторі користувача та використовуються для завантаження, прикріплення та взаємодії з програмами eBPF.

Нагадаємо, що eBPF являє собою вбудований в ядро ​​Linux інтерпретатор байткоду, що дозволяє створювати обробники мережевих операцій, відстежувати роботу систем, перехоплювати системні виклики, контролювати доступ, обробляти події зі збереженням хронометражу, підраховувати частоту та час виконання операцій, виконувати трасування з використанням /tracepoints. Завдяки застосуванню JIT-компіляції, байткод на льоту транслюється в машинні інструкції та виконується з продуктивністю нативного коду. XDP надає засоби для запуску BPF-програм на рівні мережного драйвера, з можливістю прямого доступу до DMA-буфера пакетів, що дозволяє створювати високопродуктивні обробники для роботи в умовах великого навантаження.

Джерело: opennet.ru

Додати коментар або відгук