Qhia Aya lub tsev qiv ntawv rau kev tsim eBPF cov neeg ua haujlwm hauv Rust

Thawj qhov kev tso tawm ntawm Aya lub tsev qiv ntawv tau nthuav tawm, uas tso cai rau koj los tsim eBPF cov neeg ua haujlwm hauv cov lus Rust uas khiav hauv Linux ntsiav hauv lub tshuab virtual tshwj xeeb nrog JIT. Tsis zoo li lwm cov cuab yeej tsim kho eBPF, Aya tsis siv libbpf thiab bcc compiler, tab sis hloov nws tus kheej kev siv sau rau hauv Rust, uas siv libc crate pob ncaj qha mus rau cov kab ke hu xov tooj. Lub Tsev Aya tsis tas yuav siv cov cuab yeej C lossis cov ntaub ntawv kernel header. Lub tsev qiv ntawv code raug faib raws li MIT thiab Apache 2.0 daim ntawv tso cai.

Cov yam ntxwv tseem ceeb:

  • Kev them nyiaj yug rau BTF (BPF Hom Hom), uas muab hom ntaub ntawv hauv BPF pseudocode rau hom kev kuaj xyuas thiab kos npe rau hom muab los ntawm cov ntsiav tam sim no. Kev siv BTF ua rau nws muaj peev xwm los tsim universal eBPF handlers uas tuaj yeem siv yam tsis muaj kev rov ua dua nrog cov qauv sib txawv ntawm Linux kernel.
  • Kev them nyiaj yug rau "bpf-to-bpf" hu, lub ntiaj teb hloov pauv thiab pib pib, uas tso cai rau koj los tsim cov kev pabcuam rau eBPF zoo ib yam li cov kev pabcuam niaj hnub uas siv aya ua lub sijhawm ua haujlwm uas rov txhais cov haujlwm ua haujlwm hauv eBPF.
  • Kev them nyiaj yug rau ntau hom kernel, suav nrog cov arrays ib txwm, hashes maps, stacks, queues, stack traces, as well as socket and performance tracking structures.
  • Muaj peev xwm tsim ntau hom eBTF cov kev pab cuam, suav nrog cov kev pab cuam rau kev lim thiab tswj kev khiav tsheb, cgroup handlers thiab ntau lub qhov (socket operations), XDP cov kev pab cuam.
  • Kev them nyiaj yug rau cov platforms rau asynchronous thov kev ua haujlwm nyob rau hauv tsis-thaiv hom tokio thiab async-std.
  • Kev sib dhos ceev ceev, tsis muaj kev sib txuas rau lub rooj sib dhos thiab cov ntaub ntawv kernel header.

Qhov project tseem suav tias yog kev sim - API tseem tsis tau muaj kev ruaj ntseg thiab txuas ntxiv txhim kho. Tsis tas li ntawd, tag nrho cov kev npaj tau npaj tseg tseem tsis tau ua tiav. Thaum kawg ntawm lub xyoo, cov neeg tsim khoom cia siab tias yuav coj qhov kev ua haujlwm ntawm Aya mus rau qhov sib luag nrog libbpf, thiab thaum Lub Ib Hlis 2022 los tsim thawj qhov kev tso tawm ruaj khov. Kuj tseem muaj cov phiaj xwm los sib txuas cov ntu ntawm Aya xav tau los sau Rust code rau Linux ntsiav nrog cov neeg siv-chaw siv cov khoom siv thauj khoom, txuas, thiab cuam tshuam nrog eBPF cov kev pab cuam.

Cia peb nco qab tias eBPF yog tus neeg txhais lus bytecode ua rau hauv Linux ntsiav, uas tso cai rau koj los tsim cov neeg ua haujlwm hauv network, saib xyuas kev ua haujlwm, cuam tshuam kev hu xov tooj, tswj kev nkag mus, txheej txheem txheej txheem thaum tswj lub sijhawm, suav cov zaus thiab lub sijhawm ua haujlwm, ua haujlwm. tracing siv kprobes/uprobes/tracepoints. Ua tsaug rau kev siv JIT muab tso ua ke, bytecode tau txhais ntawm ya mus rau hauv cov lus qhia tshuab thiab ua tiav nrog kev ua haujlwm ntawm cov cai ib txwm muaj. XDP muab cov cuab yeej rau kev khiav BPF cov kev pab cuam nyob rau theem kev tsav tsheb hauv lub network, nrog rau kev muaj peev xwm ncaj qha mus rau DMA pob ntawv tsis sib xws, uas tso cai rau koj los tsim cov txheej txheem ua haujlwm siab rau kev ua haujlwm hauv lub network hnyav.

Tau qhov twg los: opennet.ru

Ntxiv ib saib