PrĂ©sentĂ© KernelScript â un langage de programmation expĂ©rimental pour le dĂ©veloppement de programmes eBPF, de chargeurs personnalisĂ©s et d'extensions du noyau Linux Ă partir d'une seule base de code. Le projet est dĂ©veloppĂ© Multikernel Technologies, une sociĂ©tĂ© qui promeut l'architecture split-kernel / multikernel pour Linux. Cong Wang, le fondateur de la sociĂ©tĂ©, a prĂ©sentĂ© KernelScript lors du Linux Foundation Open Source Summit; le code du projet est publiĂ© sur GitHub sous licence Apache 2.0.
eBPF (Extended Berkeley Packet Filter) â une technologie qui permet d'exĂ©cuter de petits programmes directement dans le noyau Linux, sans toucher Ă son code et sans compromettre la stabilitĂ© du systĂšme. eBPF aide Ă rĂ©soudre de nombreux problĂšmes, allant de la surveillance des performances Ă la sĂ©curitĂ© et Ă l'optimisation rĂ©seau. Par exemple, grĂące Ă eBPF, il est possible de suivre les appels systĂšme, le trafic rĂ©seau et d'autres Ă©vĂ©nements en temps rĂ©el. Cela permet d'identifier les goulets d'Ă©tranglement en matiĂšre de performances et d'optimiser le systĂšme (Habr).
L'idée de KernelScript est de rendre le développement eBPF moins douloureux qu'en utilisant une combinaison C + libbpf, tout en ne se limitant pas seulement au traçage, comme avec bpftrace. Les développeurs décrivent le langage comme un DSL typé sécurisé, qui combine eBPF, le développement dans l'espace utilisateur et dans l'espace noyau : à partir d'un seul fichier source, le compilateur doit générer du code pour les programmes eBPF, la partie espace utilisateur et l'intégration avec les modules du noyau via kfunc.
Fonctionnalités déclarées de KernelScript :
Compilation pour diffĂ©rentes cibles Ă partir d'un seul fichier â les fonctions avec des attributs comme @xdp, @tc, @helper et @kfunc sont automatiquement attribuĂ©es Ă la partie nĂ©cessaire : programme XDP/TC, fonction helper, fonction du noyau ou code de l'espace utilisateur ordinaire.
Automatisation des appels de queue â au lieu d'une configuration manuelle du tableau de programmes et des appels Ă bpf_tail_call(), on propose aux dĂ©veloppeurs d'Ă©crire un simple appel Ă une autre fonction, laissant la gĂ©nĂ©ration de code eBPF de bas niveau au compilateur.
Travail simplifiĂ© avec dynptr et cartes eBPF â le langage cache une partie du travail manuel avec bpf_ringbuf_reserve_dynptr, bpf_dynptr_write et des API similaires. Les cartes eBPF peuvent ĂȘtre utilisĂ©es comme des variables globales accessibles par diffĂ©rents programmes.
ContrĂŽle du cycle de vie des programmes â les programmes eBPF sont reprĂ©sentĂ©s comme des valeurs typĂ©es, ce qui, selon les auteurs, permet de prĂ©venir lors de la compilation des erreurs comme la tentative d'exĂ©cuter attach() avant un chargement rĂ©ussi.
Support de kfunc â KernelScript permet de dĂ©clarer des fonctions avec l'attribut @kfunc, qui s'exĂ©cutent dans l'espace noyau et peuvent ĂȘtre appelĂ©es depuis des programmes eBPF ; pour elles, la gĂ©nĂ©ration automatique des modules du noyau et des enregistrements BTF est promise.
Support des principaux types de programmes eBPF â le README prĂ©sente des exemples pour XDP, TC, les programmes probe et perf_event, y compris le travail avec des compteurs de performance matĂ©riels.
Les auteurs soulignent séparément que KernelScript n'est pas un substitut au noyau Linux ou un nouvel environnement d'exécution eBPF. C'est plutÎt un compilateur et un langage de haut niveau qui doit générer des composants bas niveau familiers : le code eBPF, des chargeurs d'espace utilisateur, un Makefile et, si nécessaire, un module du noyau.
Pour l'instant, le projet doit ĂȘtre considĂ©rĂ© comme une expĂ©rience prĂ©coce. Le dĂ©pĂŽt indique clairement que KernelScript est en phase beta, la syntaxe et l'API peuvent changer sans conserver de compatibilitĂ© ascendante, et son utilisation en production n'est pas encore recommandĂ©e.
Source : linux.org.ru
