Aya գրադարանի առաջին թողարկումը, որը թույլ է տալիս Rust-ում գրել kernel-ի վրա հիմնված eBPF մշակիչներ, թողարկվել է։ Linux JIT-ով նվիրված վիրտուալ մեքենայում: Ի տարբերություն eBPF մշակման այլ գործիքների, Aya-ն չի օգտագործում libbpf կամ bcc կոմպիլյատոր, այլ առաջարկում է Rust լեզվով գրված իր սեփական իրականացումը, որն օգտագործում է libc crate փաթեթը՝ միջուկի համակարգի կանչերին անմիջականորեն մուտք գործելու համար: Aya-ի կառուցման համար անհրաժեշտ չեն C գործիքակազմեր կամ միջուկի վերնագրի ֆայլեր: Գրադարանի կոդը տարածվում է MIT և Apache 2.0 լիցենզիաներով:
Հիմնական առանձնահատկությունները.
- Աջակցություն BTF-ին (BPF տեսակի ձևաչափ), որը տրամադրում է տեսակի տեղեկատվություն BPF կեղծ կոդով՝ տեսակի ստուգման և ընթացիկ միջուկի կողմից տրամադրված տեսակների հետ համապատասխանեցման համար: BTF-ի օգտագործումը հնարավորություն է տալիս ստեղծել ունիվերսալ eBPF մշակիչներ, որոնք կարող են օգտագործվել առանց վերակազմակերպման՝ միջուկի տարբեր տարբերակներում: Linux.
- Աջակցություն bpf-ից bpf կանչերի, գլոբալ փոփոխականների և նախնականացուցիչների համար, որը թույլ է տալիս eBPF ծրագրերը գրել նման ձևով, ինչպես սովորական ծրագրերը, որոնք օգտագործում են aya-ն որպես կատարման ժամանակ, վերաիմաստավորելով eBPF-ում աշխատելու ֆունկցիաները։
- Աջակցություն տարբեր տեսակի միջուկների, այդ թվում՝ սովորական զանգվածների, հեշերի (հեշ քարտեզների), սկեքերի, հերթերի, սկեքերի հետագծերի, ինչպես նաև սոկետների և կատարողականության հետևման կառուցվածքների համար։
- Տարբեր տեսակի eBTF ծրագրեր ստեղծելու ունակություն, ներառյալ երթևեկության ֆիլտրման և կառավարման ծրագրեր, cgroup մշակիչներ և տարբեր socket գործողություններ, XDP ծրագրեր։
- Աջակցություն tokio և async-std ոչ արգելափակող ռեժիմում ասինխրոն հարցումների մշակման հարթակներին։
- Արագ կառուցում՝ առանց որևէ կախվածության միջուկի կառուցումից և միջուկի վերնագրի ֆայլերից։
Նախագիծը ներկայումս համարվում է փորձարարական. API-ը դեռևս կայունացված չէ և դեռևս զարգանում է: Ավելին, դեռևս բոլոր նախատեսված գործառույթները չեն իրականացվել: Մինչև տարեվերջ մշակողները հույս ունեն Aya-ի ֆունկցիոնալությունը հավասարեցնել libbpf-ի հետ և առաջին կայուն տարբերակը թողարկել 2022 թվականի հունվարին: Նրանք նաև պլանավորում են ինտեգրել Aya-ի այն մասերը, որոնք անհրաժեշտ են միջուկի համար Rust կոդ գրելու համար: Linux օգտատիրոջ տարածքում աշխատող բաղադրիչներով, որոնք օգտագործվում են eBPF ծրագրերը բեռնելու, կցելու և դրանց հետ փոխազդելու համար։
Հիշեցնենք, որ eBPF-ը միջուկին ինտեգրված է Linux Բայթկոդի մեկնաբանիչ, որը թույլ է տալիս ստեղծել ցանցային գործողությունների մշակիչներ, վերահսկել համակարգի գործունեությունը, կասեցնել համակարգային զանգերը, վերահսկել մուտքը, մշակել իրադարձությունները ժամանակի հաշվառմամբ, հաշվարկել գործողությունների հաճախականությունը և տևողությունը, ինչպես նաև իրականացնել հետևում kprobes/uprobes/tracepoints-ի միջոցով: Ժամանակին ճիշտ (JIT) կոմպիլյացիայի շնորհիվ, բայթկոդը անմիջապես թարգմանվում է մեքենայի հրահանգների և կատարվում է բնօրինակ կոդի կատարողականությամբ: XDP-ն հնարավորություն է տալիս գործարկել BPF ծրագրերը ցանցային դրայվերի մակարդակով՝ DMA փաթեթային բուֆերին անմիջական մուտք ունենալով, ինչը հնարավորություն է տալիս ստեղծել բարձր արդյունավետությամբ մշակիչներ ցանցային ծանրաբեռնվածության համար:
Source: opennet.ru
