Ipinakilala ang Aya library para sa paglikha ng mga humahawak ng eBPF sa Rust

Ang unang release ng Aya library ay ipinakita, na nagpapahintulot sa iyo na lumikha ng mga eBPF handlers sa Rust na wika na tumatakbo sa loob ng Linux kernel sa isang espesyal na virtual machine na may JIT. Hindi tulad ng iba pang mga tool sa pagpapaunlad ng eBPF, hindi gumagamit si Aya ng libbpf at ng bcc compiler, ngunit sa halip ay nag-aalok ng sarili nitong pagpapatupad na nakasulat sa Rust, na gumagamit ng libc crate package para direktang ma-access ang mga kernel system call. Ang pagbuo ng Aya ay hindi nangangailangan ng C language tooling o kernel header file. Ang code ng library ay ipinamamahagi sa ilalim ng mga lisensya ng MIT at Apache 2.0.

Mga pangunahing tampok:

  • Suporta para sa BTF (BPF Type Format), na nagbibigay ng impormasyon ng uri sa BPF pseudocode para sa pagsuri ng uri at pagmamapa sa mga uri na ibinigay ng kasalukuyang kernel. Ginagawang posible ng paggamit ng BTF na lumikha ng mga universal eBPF handler na magagamit nang walang recompilation sa iba't ibang bersyon ng Linux kernel.
  • Suporta para sa "bpf-to-bpf" na mga tawag, pandaigdigang variable at initializer, na nagbibigay-daan sa iyong magdisenyo ng mga program para sa eBPF sa katulad na paraan sa mga regular na program na gumagamit ng aya bilang isang runtime na muling tumutukoy sa mga function na isinasaalang-alang ang trabaho sa eBPF.
  • Suporta para sa iba't ibang uri ng kernel, kabilang ang mga regular na array, mga hash na mapa, stack, queues, stack trace, pati na rin ang socket at mga istraktura ng pagsubaybay sa pagganap.
  • Kakayahang lumikha ng iba't ibang uri ng mga programa ng eBTF, kabilang ang mga programa para sa pag-filter at pamamahala ng trapiko, mga humahawak ng cgroup at iba't ibang mga operasyon ng socket, mga programang XDP.
  • Suporta para sa mga platform para sa pagpoproseso ng asynchronous na kahilingan sa non-blocking mode na tokio at async-std.
  • Mabilis na pagpupulong, nang walang anumang koneksyon sa kernel assembly at kernel header file.

Ang proyekto ay itinuturing pa ring eksperimental - ang API ay hindi pa na-stabilize at patuloy na umuunlad. Gayundin, ang lahat ng mga nakaplanong pagkakataon ay hindi pa naisasakatuparan. Sa pagtatapos ng taon, inaasahan ng mga developer na iayon ang functionality ng Aya sa libbpf, at sa Enero 2022, gagawin ang unang stable na release. Mayroon ding mga plano na pagsamahin ang mga bahagi ng Aya na kailangan upang magsulat ng Rust code para sa Linux kernel sa mga bahagi ng user-space na ginagamit upang i-load, ilakip, at makipag-ugnayan sa mga programang eBPF.

Alalahanin natin na ang eBPF ay isang bytecode interpreter na binuo sa Linux kernel, na nagbibigay-daan sa iyong lumikha ng mga humahawak ng operasyon ng network, subaybayan ang operasyon ng system, maharang ang mga tawag sa system, kontrolin ang pag-access, proseso ng mga kaganapan habang pinapanatili ang tiyempo, kalkulahin ang dalas at oras ng mga operasyon, gumanap. pagsubaybay gamit ang kprobes/uprobes /tracepoints. Salamat sa paggamit ng JIT compilation, ang bytecode ay isinalin sa mabilisang mga tagubilin sa makina at naisakatuparan sa pagganap ng native code. Nagbibigay ang XDP ng mga tool para sa pagpapatakbo ng mga programa ng BPF sa antas ng driver ng network, na may kakayahang direktang ma-access ang DMA packet buffer, na nagbibigay-daan sa iyong lumikha ng mga processor na may mataas na pagganap para sa pagtatrabaho sa ilalim ng mabigat na pagkarga ng network.

Pinagmulan: opennet.ru

Magdagdag ng komento