Ներկայացրեց Aya գրադարանը Rust-ում eBPF մշակիչներ ստեղծելու համար

Ներկայացված է Aya գրադարանի առաջին թողարկումը, որը թույլ է տալիս ստեղծել eBPF մշակիչներ Rust լեզվով, որոնք աշխատում են Linux միջուկի ներսում JIT-ով հատուկ վիրտուալ մեքենայի մեջ։ Ի տարբերություն eBPF մշակման այլ գործիքների՝ Aya-ն չի օգտագործում libbpf և bcc կոմպիլյատոր, փոխարենը առաջարկում է Rust-ով գրված իր սեփական իրականացումը, որն օգտագործում է libc crate փաթեթը՝ միջուկի համակարգի զանգերին ուղղակիորեն մուտք գործելու համար: Aya-ի կառուցումը չի պահանջում C լեզվի գործիքավորում կամ միջուկի վերնագրի ֆայլեր: Գրադարանի կոդը բաշխվում է MIT և Apache 2.0 լիցենզիաների ներքո:

Հիմնական առանձնահատկությունները.

  • Աջակցություն BTF-ին (BPF Type Format), որը տրամադրում է տիպի տեղեկատվություն BPF կեղծ կոդում՝ տիպերի ստուգման և ընթացիկ միջուկի կողմից տրված տեսակների քարտեզագրման համար: BTF-ի օգտագործումը հնարավորություն է տալիս ստեղծել ունիվերսալ eBPF մշակիչներ, որոնք կարող են օգտագործվել առանց վերակազմավորման Linux միջուկի տարբեր տարբերակների հետ:
  • Աջակցություն «bpf-to-bpf» զանգերին, գլոբալ փոփոխականներին և սկզբնավորիչներին, ինչը թույլ է տալիս նախագծել ծրագրեր eBPF-ի համար այնպես, ինչպես սովորական ծրագրերը, որոնք օգտագործում են aya-ն որպես գործարկման ժամանակ, որը վերասահմանում է գործառույթները՝ հաշվի առնելով աշխատանքը eBPF-ում:
  • Աջակցություն միջուկի տարբեր տեսակների, այդ թվում՝ սովորական զանգվածների, հեշերի քարտեզների, կույտերի, հերթերի, կույտերի հետքերի, ինչպես նաև վարդակների և կատարողականի հետևման կառուցվածքների:
  • Տարբեր տեսակի eBTF ծրագրեր ստեղծելու ունակություն, ներառյալ թրաֆիկի զտման և կառավարման ծրագրեր, cgroup handlers և socket-ի տարբեր գործողություններ, XDP ծրագրեր:
  • Աջակցություն հարթակներին ասինխրոն հարցումների մշակման համար ոչ արգելափակման ռեժիմում tokio և async-std:
  • Արագ հավաքում, առանց որևէ կապի միջուկի հավաքման և միջուկի վերնագրի ֆայլերի հետ:

Նախագիծը դեռ համարվում է փորձնական՝ API-ն դեռ կայունացված չէ և շարունակում է զարգանալ: Բացի այդ, նախատեսված բոլոր հնարավորությունները դեռ չեն իրականացվել։ Մինչև տարեվերջ մշակողները ակնկալում են Aya-ի ֆունկցիոնալությունը հավասարեցնել libbpf-ին, իսկ 2022 թվականի հունվարին ստեղծել առաջին կայուն թողարկումը: Նախատեսվում է նաև միավորել Aya-ի այն մասերը, որոնք անհրաժեշտ են Linux միջուկի համար Rust կոդը գրելու համար օգտագործողի տարածության բաղադրիչների հետ, որոնք օգտագործվում են eBPF ծրագրերը բեռնելու, կցելու և փոխազդելու համար:

Հիշեցնենք, որ eBPF-ն Linux միջուկում ներկառուցված բայթկոդի թարգմանիչ է, որը թույլ է տալիս ստեղծել ցանցային գործառնությունների մշակիչներ, վերահսկել համակարգի աշխատանքը, ընդհատել համակարգային զանգերը, վերահսկել մուտքը, մշակել իրադարձությունները՝ միաժամանակ պահպանելով ժամանակը, հաշվարկել գործառնությունների հաճախականությունը և ժամանակը, կատարել: հետագծում օգտագործելով kprobes/uprobes/tracepoints: JIT կոմպիլյացիայի օգտագործման շնորհիվ բայթկոդը անմիջապես թարգմանվում է մեքենայական հրահանգների և կատարվում է հայրենի կոդի կատարմամբ: XDP-ն ապահովում է BPF ծրագրերը ցանցի վարորդի մակարդակով գործարկելու գործիքներ՝ DMA փաթեթների բուֆեր ուղղակիորեն մուտք գործելու ունակությամբ, ինչը թույլ է տալիս ստեղծել բարձր արդյունավետության պրոցեսորներ ցանցի ծանր բեռի տակ աշխատելու համար:

Source: opennet.ru

Добавить комментарий