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 позволяет объявлять функции с атрибутом
@kfunc, которые выполняются в пространстве ядра и могут вызываться из eBPF-программ; для них обещана автоматическая генерация kernel module и BTF-регистраций. -
Поддержка основных типов eBPF-программ — в README показаны примеры для XDP, TC, probe-программ и
perf_event, включая работу с аппаратными счётчиками производительности.
Авторы отдельно подчёркивают, что KernelScript не является заменой ядру Linux или новым eBPF runtime. Это скорее компилятор и язык верхнего уровня, который должен сгенерировать привычные низкоуровневые компоненты: eBPF-код, userspace-загрузчики, Makefile и, при необходимости, kernel module.
Пока проект стоит воспринимать как ранний эксперимент. В репозитории прямо указано, что KernelScript находится в стадии beta, синтаксис и API могут меняться без сохранения обратной совместимости, а использовать его в production пока не рекомендуется.
>>> Источник
Linux.org.ru прочитано 778 раз
