Представено KernelScript — експериментален език за програмиране, предназначен за разработка на eBPF програми, потребителски зареждачи и разширения на ядрото на Linux от единен кодов базис. Проектът развива Multikernel Technologies, компания, която популяризира архитектурата split-kernel / multikernel за Linux. За KernelScript разказа основателят на компанията Cong Wang на Linux Foundation Open Source Summit; кодът на проекта е публикуван в GitHub под лиценз Apache 2.0.
eBPF (Разширен Berkeley Packet Filter) — това е технология, която позволява стартиране на малки програми направо в ядрото на Linux, без да се засяга неговият код и без да се рискува стабилността на системата. eBPF помага за решаване на множество задачи, от мониторинг на производителността до осигуряване на сигурността и мрежовата оптимизация. Например, с помощта на eBPF може да се проследява системните повиквания, мрежовия трафик и други събития в реално време. Това позволява да се откриват тесни места в производителността и да се оптимизира системата (Хабр).
Идеята на KernelScript е да направи разработката на eBPF по-малко болезнена, отколкото при използването на комбинация от C + libbpf, и да не се ограничава само до проследяване, като bpftrace. Разработчиците описват езика като типобезопасен DSL, който обединява eBPF, разработка за потребителско пространство и kernelspace: от един изходен файл, компилаторът трябва да генерира код за eBPF програми, част за userspace и интеграция с kernel модули чрез 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 код, потребителските загрузчици, Makefile и, при необходимост, kernel module.
Все още проектът трябва да се разглежда като ранна експериментална версия. В хранилището е посочено, че KernelScript е в етап beta, синтаксисът и API могат да се променят без запазване на обратна съвместимост, а използването му в продукция все още не се препоръчва.
Източник: linux.org.ru
