Представен е първият выпуск на библиотеката Aya, която позволява създаването на eBPF обработчици на програмния език Rust, изпълнявани в ядрото на 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 интерпретатор на байткод, позволяващ създаването на обработчици на мрежови операции, проследяване на системната работа, прихващане на системни повиквания, контрол на достъпа, обработка на събития с запазване на хронометраж, преброяване на честота и време на изпълнение на операции, извършване на трасировка с помощта на kprobes/uprobes/tracepoints. Благодарение на приложението на JIT-компилация, байткодът на лето се транслира в машинни инструкции и се изпълнява с производителност на роден код. XDP предоставя средства за стартиране на BPF-програми на ниво мрежов драйвер, с възможност за директен достъп до DMA-буфера на пакетите, което позволява създаването на високопроизводителни обработчици за работа в условия на голямо натоварване на мрежата.
Източник: opennet.ru
