KernelScript 0.1.0

Представлен KernelScript — экспериментальный язык программирования для разработки eBPF-программ, пользовательских загрузчиков и расширений ядра Linux из единой кодовой базы. Проект развивает Multikernel Technologies, компания, продвигающая архитектуру split-kernel / multikernel для Linux. О KernelScript рассказал основатель компании Cong Wang на Linux Foundation Open Source Summit; код проекта опубликован на GitHub под лицензией Apache 2.0.


eBPF (Extended Berkeley Packet Filter) — это технология, которая позволяет запускать небольшие программы прямо в ядре Linux, не трогая его код и не подвергая риску стабильность системы. eBPF помогает решать множество задач, от мониторинга производительности до обеспечения безопасности и сетевой оптимизации. Например, с помощью eBPF можно отслеживать системные вызовы, сетевой трафик и другие события в режиме реального времени. Это позволяет находить узкие места в производительности и оптимизировать систему (Хабр).

Идея KernelScript — сделать разработку eBPF менее болезненной, чем при использовании связки C + libbpf, и при этом не ограничиваться только трассировкой, как bpftrace. Разработчики описывают язык как типобезопасный DSL, который объединяет eBPF, пользовательское пространство и kernelspace-разработку: из одного исходного файла компилятор должен генерировать код для eBPF-программ, userspace-части и интеграции с kernel modules через kfunc.

Заявленные возможности KernelScript:

  • Компиляция под разные цели из одного файла — функции с атрибутами вроде @xdp, @tc, @helper и @kfunc автоматически относятся к нужной части: XDP/TC-программе, helper-функции, kernel-функции или обычному userspace-коду.

  • Автоматизация tail calls — вместо ручной настройки program array и вызовов bpf_tail_call() разработчику предлагают писать обычный вызов другой функции, а генерацию низкоуровневого eBPF-кода оставлять компилятору.

  • Упрощённая работа с dynptr и eBPF maps — язык скрывает часть ручной работы с bpf_ringbuf_reserve_dynptr, bpf_dynptr_write и похожими API. Карты eBPF можно использовать как глобальные переменные, доступные разным программам.

  • Контроль жизненного цикла программ — eBPF-программы представлены как типизированные значения, что, по задумке авторов, позволяет на этапе компиляции предотвращать ошибки вроде попытки выполнить attach() до успешного load().

  • Поддержка kfunc — KernelScript omogoča deklaracijo funkcij z atributom @kfunc, ki se izvajajo v jedru in jih je mogoče klicati iz programov eBPF; za njih je obljubljena samodejna generacija jedrskega modula in registracij BTF.

  • Podpora osnovnim tipom programov eBPF — v README so prikazani primeri za XDP, TC, probe programe in perf_event, vključno z delom zstrojniškimi števcami zmogljivosti.

Avtorji posebej poudarjajo, da KernelScript ni nadomestilo za jedro Linuxa ali nov eBPF runtime. To je bolj prevajalnik in jezik višje ravni, ki mora generirati običajne nizkourovninske komponente: eBPF kodo, userspace nalagalnike, Makefile in, po potrebi, jedrski modul.

Trenutno je projekt najbolje obravnavati kot zgodnji eksperiment. V repozitoriju je jasno navedeno, da je KernelScript v fazi beta, sintaksa in API se lahko spreminjata brez ohranjanja povratne združljivosti, uporaba v produkciji pa zaenkrat ni priporočljiva.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster