Presenteras KernelScript â ett experimentellt programmeringssprĂ„k för utveckling av eBPF-program, anvĂ€ndarspecifika laddare och kĂ€rnförlĂ€ngningar för Linux frĂ„n en enda kodbas. Projektet utvecklar Multikernel Technologies, ett företag som frĂ€mjar split-kernel / multikernel-arkitekturen för Linux. Grundaren av företaget, Cong Wang, berĂ€ttade om KernelScript pĂ„ Linux Foundation Open Source Summit; projektkoden publicerades pĂ„ GitHub under licensen Apache 2.0.
eBPF (Extended Berkeley Packet Filter) â Ă€r en teknologi som möjliggör körning av smĂ„ program direkt i Linux-kĂ€rnan utan att behöva Ă€ndra dess kod, vilket skyddar systemets stabilitet. eBPF hjĂ€lper till att lösa mĂ„nga uppgifter, frĂ„n prestandaövervakning till sĂ€kerhetsĂ„tgĂ€rder och nĂ€tverksoptimering. Till exempel, med hjĂ€lp av eBPF kan man spĂ„ra systemanrop, nĂ€tverkstrafik och andra hĂ€ndelser i realtid. Detta gör det möjligt att identifiera flaskhalsar i prestanda och optimera systemet (Habr).
Idén med KernelScript Àr att göra utvecklingen av eBPF mindre smÀrtsam Àn nÀr man anvÀnder kombinationen C + libbpf, samtidigt som man inte begrÀnsas till enbart spÄrning, som med bpftrace. Utvecklarna beskriver sprÄket som ett typ-sÀkert DSL som förenar eBPF, anvÀndarutrymme och kernelspace-utveckling: frÄn en enda kÀllfil mÄste kompilatorn generera kod för eBPF-program, anvÀndarutrymmesdel och integration med kÀrnmoduler via kfunc.
Uttalade funktioner för KernelScript:
Kompilering för olika mĂ„l frĂ„n en enda fil â funktioner med attribut som @xdp, @tc, @helper och @kfunc tilldelas automatiskt den nödvĂ€ndiga delen: XDP/TC-program, hjĂ€lpfunktioner, kĂ€rnfunktioner eller vanlig anvĂ€ndarkod.
Automatisering av tail calls â istĂ€llet för manuell instĂ€llning av programarray och anrop av bpf_tail_call() erbjuds utvecklaren att skriva vanliga anrop till andra funktioner, medan kompilatorn genererar lĂ„g nivĂ„ eBPF-kod.
Förenklad hantering av dynptr och eBPF maps â sprĂ„ket döljer en del av det manuella arbetet med bpf_ringbuf_reserve_dynptr, bpf_dynptr_write och liknande API. eBPF-kartor kan anvĂ€ndas som globala variabler Ă„tkomliga av olika program.
Livscykelhantering av program â eBPF-program representeras som typade vĂ€rden, vilket, enligt författarnas avsikt, möjliggör förhindrande av fel som försök att köra attach() innan en framgĂ„ngsrik load().
Stöd för kfunc â KernelScript gör det möjligt att deklarera funktioner med attributet @kfunc, som körs i kĂ€rnans utrymme och kan anropas frĂ„n eBPF-program; automatisk generering av kernel module och BTF-registreringar lovas för dem.
Stöd för de grundlĂ€ggande typerna av eBPF-program â exempel pĂ„ XDP, TC, probe-program och perf_event visas i README, inklusive arbete med hĂ„rdvaru prestanda rĂ€knare.
Författarna understryker att KernelScript inte Àr en ersÀttning för Linux-kÀrnan eller en ny eBPF-runtime. Det Àr snarare en kompilator och ett högre nivÄsprÄk som ska generera bekanta lÄgnivÄkomponenter: eBPF-kod, userspace-laddare, Makefile och, vid behov, kernel module.
Projektet bör fortfarande betraktas som ett tidigt experiment. I arkivet anges klart att KernelScript Àr i ett betastadium, dÀr syntax och API kan Àndras utan att sÀkerstÀlla bakÄtkompatibilitet, och det rekommenderas för nÀrvarande inte att anvÀnda det i produktionsmiljöer.
KĂ€lla: linux.org.ru
