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 (Разширен 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster