Hoʻokomo ʻia ka waihona ʻo Aya no ka hana ʻana i nā mea lawelawe eBPF ma Rust

Hōʻike ʻia ka hoʻokuʻu mua ʻana o ka waihona Aya, kahi e hiki ai iā ʻoe ke hana i nā mea lawelawe eBPF ma ka ʻōlelo Rust e holo ana i loko o ka kernel Linux i kahi mīkini virtual kūikawā me JIT. ʻAʻole like me nā mea hoʻomohala eBPF ʻē aʻe, ʻaʻole hoʻohana ʻo Aya i ka libbpf a me ka bcc compiler, akā hāʻawi i kāna hoʻokō ponoʻī i kākau ʻia ma Rust, e hoʻohana ana i ka libc crate package e komo pololei i nā kelepona ʻōnaehana kernel. ʻAʻole pono ke kūkulu ʻana iā Aya i nā mea hana ʻōlelo C a i ʻole nā ​​faila poʻomanaʻo kernel. Hāʻawi ʻia ka code waihona ma lalo o nā laikini MIT a me Apache 2.0.

Nā hiʻohiʻona nui:

  • Kākoʻo no BTF (BPF Type Format), e hāʻawi ana i ka ʻike ʻano ma ka pseudocode BPF no ka nānā ʻana a me ka palapala ʻana i nā ʻano i hāʻawi ʻia e ka kernel o kēia manawa. Hiki i ka hoʻohana ʻana o BTF ke hana i nā mea hoʻohana eBPF āpau i hiki ke hoʻohana ʻia me ka hoʻohui ʻole ʻana me nā ʻano like ʻole o ka kernel Linux.
  • Kākoʻo i nā kelepona "bpf-to-bpf", nā mea hoʻololi honua a me nā mea hoʻomaka, e hiki ai iā ʻoe ke hoʻolālā i nā papahana no ka eBPF ma ke ʻano like me nā papahana maʻamau e hoʻohana ana i ka aya ma ke ʻano he runtime e wehewehe hou i nā hana e noʻonoʻo i ka hana ma eBPF.
  • Kākoʻo no nā ʻano kernel like ʻole, me ka hoʻonohonoho maʻamau, nā palapala ʻāina hashes, nā pūʻulu, nā queues, nā ʻōpala hoʻopaʻa, a me ke kumu a me nā hoʻolālā hoʻokō.
  • Hiki ke hana i nā ʻano papahana eBTF like ʻole, me nā papahana no ka kānana a me ka mālama ʻana i nā kaʻa, nā mea lawelawe cgroup a me nā hana socket like ʻole, nā papahana XDP.
  • Kākoʻo no nā paepae no ka hoʻoili ʻana i nā noi asynchronous ma ke ʻano non-blocking mode tokio a me async-std.
  • ʻO ka hui wikiwiki, me ka pili ʻole i ka hui kernel a me nā faila poʻomanaʻo kernel.

Manaʻo ʻia ka papahana he hoʻokolohua - ʻaʻole i hoʻopaʻa ʻia ka API a hoʻomau ʻia ka ulu ʻana. Eia kekahi, ʻaʻole i hoʻokō ʻia nā manawa i hoʻolālā ʻia. Ma ka hopena o ka makahiki, manaʻo nā mea hoʻomohala e lawe i ka hana o Aya i ka parity me libbpf, a ma Ianuali 2022 e hana i ka hoʻokuʻu paʻa mua. Aia kekahi hoʻolālā e hoʻohui i nā ʻāpana o Aya e pono ai e kākau i ka Rust code no ka Linux kernel me nā mea hoʻohana-space i hoʻohana ʻia e hoʻouka, hoʻopili, a pili pū me nā polokalamu eBPF.

E hoʻomanaʻo mākou ʻo ka eBPF he unuhi unuhi bytecode i kūkulu ʻia i loko o ka Linux kernel, e hiki ai iā ʻoe ke hana i nā mea lawelawe ʻoihana pūnaewele, nānā i ka hana ʻana o ka ʻōnaehana, ke kelepona ʻana i nā ʻōnaehana, ka hoʻokele mana, ke kaʻina hana i ka wā e mālama ana i ka manawa, helu i ka pinepine a me ka manawa o ka hana, hana. ka hoʻohana ʻana i nā kprobes/uprobes/tracepoints. Mahalo i ka hoʻohana ʻana o JIT compilation, ua unuhi ʻia ka bytecode ma ka lele i nā ʻōlelo aʻoaʻo mīkini a hoʻokō ʻia me ka hana o ke code maoli. Hāʻawi ʻo XDP i nā mea hana no ka holo ʻana i nā polokalamu BPF ma ka pae o ka mea hoʻokele pūnaewele, me ka hiki ke komo pololei i ka packet packet DMA, kahi e hiki ai iā ʻoe ke hana i nā kaʻina hana kiʻekiʻe no ka hana ʻana ma lalo o ka ukana pūnaewele kaumaha.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka