GCC-ն այժմ ներառում է backend՝ eBPF-ին հավաքելու համար

Ներառված է GCC կոմպիլյատորների փաթեթում ընդունվել է Linux միջուկում ներկառուցված բայթկոդի թարգմանչի համար ծրագրեր կազմելու կոդը eGMP. JIT կոմպիլյացիայի օգտագործման շնորհիվ միջուկի բայթկոդը անմիջապես թարգմանվում է մեքենայական հրահանգների և կատարվում է հայրենի կոդի կատարմամբ: Կարկատներ eBPF աջակցությամբ ընդունված այն ճյուղին, որտեղից մշակվել է GCC 10 թողարկումը:

Ի լրումն բայթկոդերի ստեղծման հետին պլանի, GCC-ն ներառում է libgcc պորտ eBPF-ի համար և գործիքներ ELF ֆայլեր ստեղծելու համար, որոնք հնարավորություն են տալիս կատարել կոդը eBPF վիրտուալ մեքենայում՝ օգտագործելով միջուկով տրամադրվող բեռնիչներ: GCC-ում eBPF-ին աջակցելու պատչերը պատրաստվել էին Oracle-ի ինժեներների կողմից, որոնք արդեն պատրաստել էին տրամադրված eBPF աջակցություն GNU binutils-ում: Մշակման փուլում են նաև GDB-ի համար սիմուլյատոր և պատչեր, որոնք թույլ կտան կարգաբերել eBPF ծրագրերը՝ առանց դրանք միջուկում բեռնելու:

Ծրագրերը eBPF-ի համար կարող են սահմանվել C լեզվի ենթաբազմությունում, կազմվել և բեռնվել միջուկում: Նախքան կատարումը, eBPF թարգմանիչը ստուգում է բայթ կոդը՝ թույլատրելի հրահանգների օգտագործման համար և որոշակի կանոններ է սահմանում կոդի վրա (օրինակ՝ առանց հանգույցների):
Սկզբում LLVM-ի վրա հիմնված գործիքներն օգտագործվել են Linux-ում eBPF-ն կազմելու համար։ eBPF-ի աջակցությունը GCC-ում հետաքրքիր է, քանի որ այն թույլ է տալիս օգտագործել մեկ գործիքակազմ՝ ստեղծելու Linux միջուկը և eBPF ծրագրերը՝ առանց լրացուցիչ կախվածություններ տեղադրելու:

eBPF ծրագրերի տեսքով դուք կարող եք ստեղծել ցանցային գործառնությունների մշակիչներ, զտել տրաֆիկը, կառավարել թողունակությունը, վերահսկել համակարգերը, ընդհատել համակարգային զանգերը, վերահսկել մուտքը, հաշվել գործողությունների հաճախականությունն ու ժամանակը և կատարել հետագծումներ՝ օգտագործելով kprobes/uprobes/tracepoints:

Source: opennet.ru

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