У склад GCC прыняты бэкэнд для кампіляцыі ў eBPF

У склад набору кампілятараў GCC прыняты код для кампіляцыі праграм для ўбудаванага ў ядро ​​Linux інтэрпрэтатара байткода eGMP. Дзякуючы ўжыванню JIT-кампіляцыі, у ядры байткод на лёце транслюецца ў машынныя інструкцыі і выконваецца з прадукцыйнасцю натыўнага кода. Патчы з падтрымкай eBPF прыняты у галіну, на аснове якой развіваецца выпуск GCC 10.

Акрамя бэкенда для генерацыі байткода ў GCC уключаны порт libgcc для eBPF і сродкі для фармавання ELF-файлаў, якія даюць магчымасць выканаць код у віртуальнай машыне eBPF з выкарыстаннем якія прадстаўляюцца ядром загрузнікаў. Патчы для падтрымай eBPF у GCC падрыхтаваны інжынерамі з кампаніі Oracle, якія да гэтага ўжо забяспечылі падтрымку eBPF у GNU binutils. У распрацоўцы таксама знаходзіцца сімулятар і патчы для GDB, якія дазволяць адладжваць eBPF-праграмы без загрузкі ў ядро.

Праграмы для eBPF могуць вызначацца на падмностве мовы C, кампілявацца і загружацца ў ядро. Перад выкананнем інтэрпрэтатар eBPF правярае байткод на прадмет ужывання дазволеных інструкцый і накладае вызначаныя правілы на код (напрыклад, адсутнасць цыклаў).
Першапачаткова для кампіляцыі eBPF у Linux ужываўся інструментар на базе LLVM. Падтрымка eBPF у GCC уяўляе цікавасць тым, што дазваляе выкарыстоўваць адзін інструментар для зборкі ядра Linux і eBPF-праграм, без усталёўкі дадатковых залежнасцяў.

У форме праграм eBPF можна ствараць апрацоўшчыкі сеткавых аперацый, фільтраваць трафік, кіраваць прапускной здольнасцю, адсочваць працу сістэм, перахапляць сістэмныя выклікі, кантраляваць доступ, падлічваць частату і час выканання аперацый, выконваць трасіроўку з выкарыстаннем kprobes/uprobes/tracepoints.

Крыніца: opennet.ru

Дадаць каментар