KernelScript 0.1.0

Przedstawiony KernelScript — eksperymentalny język programowania do tworzenia programów eBPF, ładowarek użytkownika i rozszerzeń jądra Linux z jednego kodu. Projekt rozwija Multikernel Technologies, firma promująca architekturę split-kernel / multikernel dla Linux. O KernelScript opowiedział założyciel firmy Cong Wang podczas Open Source Summit Fundacji Linuxa; kod projektu został opublikowany na GitHubie na licencji Apache 2.0.


eBPF (Extended Berkeley Packet Filter) — to technologia, która pozwala uruchamiać małe programy bezpośrednio w jądrze Linux, nie dotykając jego kodu i nie narażając stabilności systemu. eBPF pomaga rozwiązywać wiele problemów, od monitorowania wydajności po zapewnienie bezpieczeństwa i optymalizacji sieci. Na przykład, za pomocą eBPF można śledzić wywołania systemowe, ruch sieciowy i inne zdarzenia w czasie rzeczywistym. Pozwala to zidentyfikować wąskie gardła w wydajności i zoptymalizować system (Hub).

Idea KernelScript polega na uproszczeniu procesu tworzenia eBPF w porównaniu do korzystania z zestawu C + libbpf, a jednocześnie nie ogranicza się tylko do śledzenia, jak bpftrace. Programiści opisują język jako typowo bezpieczny DSL, który łączy eBPF, rozwój w przestrzeni użytkownika i kernelspace: z jednego pliku źródłowego kompilator powinien generować kod dla programów eBPF, części userspace i integracji z modułami jądra przez kfunc.

Zadeklarowane możliwości KernelScript:

  • Kompilacja pod różne cele z jednego pliku — funkcje z atrybutami takimi jak @xdp, @tc, @helper i @kfunc automatycznie są przyporządkowywane do odpowiedniej części: program XDP/TC, funkcje pomocnicze, funkcje jądra lub zwykły kod userspace.

  • Automatyzacja wywołań tail calls — zamiast ręcznej konfiguracji program array i wywołań bpf_tail_call(), programiści mogą po prostu napisać zwykłe wywołanie innej funkcji, a generację niskopoziomowego kodu eBPF pozostawić kompilatorowi.

  • Uproszczona praca z dynptr i mapami eBPF — język ukrywa część ręcznej pracy z bpf_ringbuf_reserve_dynptr, bpf_dynptr_write i podobnymi interfejsami API. Mapy eBPF mogą być traktowane jak zmienne globalne, dostępne dla różnych programów.

  • Kontrola cyklu życia programów — programy eBPF są przedstawione jako typowane wartości, co ma na celu zapobieganie błędom na etapie kompilacji, takim jak próba wykonania attach() przed udanym load().

  • Wsparcie dla kfunc — KernelScript umożliwia deklarowanie funkcji z atrybutem @kfunc, które są wykonywane w przestrzeni jądra i mogą być wywoływane z programów eBPF; obiecano automatyczne generowanie modułu jądra i rejestracji BTF.

  • Wsparcie dla podstawowych typów programów eBPF — w README znajdują się przykłady dla XDP, TC, programów probe i perf_event, w tym praca z sprzętowymi licznikami wydajności.

Autorzy szczególnie podkreślają, że KernelScript nie jest zamiennikiem dla jądra Linux ani nowym runtime'm eBPF. To raczej kompilator i język wyższego poziomu, który ma generować znane komponenty niskiego poziomu: kod eBPF, ładowarki userspace, Makefile i, w razie potrzeby, moduł jądra.

Na razie projekt należy traktować jako wczesny eksperyment. W repozytorium wyraźnie wskazano, że KernelScript znajduje się w fazie beta, składnia i API mogą się zmieniać bez zapewnienia wstecznej kompatybilności, a korzystanie z niego w produkcji na razie nie jest zalecane.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster