Прадстаўлена бібліятэка Aya для стварэння eBPF-апрацоўшчыкаў на мове Rust

Прадстаўлены першы выпуск бібліятэкі Aya, якая дазваляе ствараць на мове Rust апрацоўшчыкі eBPF, якія запускаюцца ўнутры ядра Linux у спецыяльнай віртуальнай машыне з JIT. У адрозненне ад іншых інструментаў для распрацоўкі eBPF-праграм, Aya не выкарыстоўвае libbpf і кампілятар bcc, а прапануе ўласную рэалізацыю, напісаную на Rust, якая выкарыстоўвае crate-пакет libc для прамога звароту да сістэмных выклікаў ядра. Для зборкі Aya не патрабуецца наяўнасць інструментара для мовы C і загалоўкавых файлаў ядра. Код бібліятэкі распаўсюджваецца пад ліцэнзіямі MIT і Apache 2.0.

Асноўныя магчымасці:

  • Падтрымка фармату BTF (BPF Type Format), які прадстаўляе інфармацыю аб тыпах у псеўдакодзе BPF для праверкі тыпаў і супастаўленні з тыпамі, якія прадстаўляюцца бягучым ядром. Ужыванне BTF дае магчымасць ствараць універсальныя eBPF-апрацоўшчыкі, якія можна выкарыстоўваць без перакампілявання з рознымі версіямі ядра Linux.
  • Падтрымка выклікаў "bpf-to-bpf", глабальных зменных і ініцыялізатараў, што дазваляе афармляць праграмы для eBPF па аналогіі са звычайнымі праграмамі, якія выкарыстоўваюць aya у якасці runtime, перавызначае функцыі з улікам працы ў eBPF.
  • Падтрымка розных тыпаў ядра, у тым ліку звычайныя масівы, хэшы (hash map), стэкі, чэргі, трасіроўкі стэка, а таксама структуры для сокетаў і адсочвання прадукцыйнасці.
  • Магчымасць ствараць розныя тыпы eBTF-праграм, у тым ліку праграмы для фільтрацыі і кіравання трафікам, апрацоўшчыкі cgroup і розных аперацый з сокетамі, XDP-праграмы.
  • Падтрымка платформаў для асінхроннай апрацоўкі запытаў у неблакіруючым рэжыме tokio і async-std.
  • Хуткая зборка, без і прывязкі да зборкі ядра і загалоўкавых файлаў ядра.

Праект пакуль разглядаецца як эксперыментальны – API яшчэ не стабілізаваны і працягвае развівацца. Таксама яшчэ не рэалізаваны ўсе задуманыя магчымасці. Да канца года распрацоўшчыкі разлічваюць давесці функцыянальнасць Aya да парытэту з libbpf, а ў студзені 2022 года сфарміраваць першы стабільны рэліз. Таксама плануецца аб'яднаць часткі Aya, неабходныя для напісання кода на Rust для ядра Linux з кампанентамі, якія працуюць у прасторы карыстача і выкарыстоўванымі для загрузкі, прымацаванні і ўзаемадзеянні з праграмамі eBPF.

Нагадаем, што eBPF уяўляе сабой убудаваны ў ядро ​​Linux інтэрпрэтатар байткода, які дазваляе ствараць апрацоўшчыкі сеткавых аперацый, адсочваць працу сістэм, перахапляць сістэмныя выклікі, кантраляваць доступ, апрацоўваць падзеі з захаваннем хронаметражу, падлічваць частату і час выканання аперацый, выконваць трасіроўку з выкарыстаннем /tracepoints. Дзякуючы ўжыванню JIT-кампіляцыі, байткод на лёце транслюецца ў машынныя інструкцыі і выконваецца з прадукцыйнасцю натыўнага кода. XDP дае сродкі для запуску BPF-праграм на ўзроўні сеткавага драйвера, з магчымасцю прамога доступу да DMA-буферу пакетаў, што дазваляе ствараць высокапрадукцыйныя апрацоўшчыкі для працы ва ўмовах вялікай сеткавай нагрузкі.

Крыніца: opennet.ru

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