KernelScript 0.1.0

good-penguin.png

Представлен 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 раз