ื”ืฆื™ื’ ืืช ืกืคืจื™ื™ืช Aya ืœื™ืฆื™ืจืช ืžื˜ืคืœื™ eBPF ื‘-Rust

ืžื•ืฆื’ืช ื”ืžื”ื“ื•ืจื” ื”ืจืืฉื•ื ื” ืฉืœ ืกืคืจื™ื™ืช Aya, ื”ืžืืคืฉืจืช ืœื™ืฆื•ืจ ืžื˜ืคืœื™ eBPF ื‘ืฉืคืช Rust ื”ืคื•ืขืœื™ื ื‘ืชื•ืš ืœื™ื‘ืช ืœื™ื ื•ืงืก ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื™ื•ื—ื“ืช ืขื JIT. ื‘ื ื™ื’ื•ื“ ืœื›ืœื™ ืคื™ืชื•ื— ืื—ืจื™ื ืฉืœ eBPF, Aya ืื™ื ื” ืžืฉืชืžืฉืช ื‘libbpf ื•ื‘ืžื”ื“ืจ bcc, ืืœื ืžืฆื™ืขื” ื™ื™ืฉื•ื ืžืฉืœื” ืฉื ื›ืชื‘ ื‘-Rust, ื”ืžืฉืชืžืฉ ื‘ื—ื‘ื™ืœืช libc crate ื›ื“ื™ ืœื’ืฉืช ื™ืฉื™ืจื•ืช ืœืงืจื™ืื•ืช ืžืขืจื›ืช ื”ืงืจื ืœ. ื‘ื ื™ื™ืช Aya ืื™ื ื” ื“ื•ืจืฉืช ื›ืœื™ ืฉืคืช C ืื• ืงื‘ืฆื™ ื›ื•ืชืจื•ืช ืœื™ื‘ื”. ืงื•ื“ ื”ืกืคืจื™ื™ื” ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ื ื•ืช MIT ื•-Apache 2.0.

ืชื›ื•ื ื•ืช ืขื™ืงืจื™ื•ืช:

  • ืชืžื™ื›ื” ื‘-BTF (BPF Type Format), ื”ืžืกืคืง ืžื™ื“ืข ืกื•ื’ ื‘ืคืกืื•ื“ื•ืงื•ื“ BPF ืœื‘ื“ื™ืงืช ืกื•ื’ื™ื ื•ืžื™ืคื•ื™ ืœืกื•ื’ื™ื ืฉืžืกื•ืคืงื™ื ืขืœ ื™ื“ื™ ื”ืงืจื ืœ ื”ื ื•ื›ื—ื™. ื”ืฉื™ืžื•ืฉ ื‘-BTF ืžืืคืฉืจ ืœื™ืฆื•ืจ ืžื˜ืคืœื™ eBPF ืื•ื ื™ื‘ืจืกืœื™ื™ื ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ืœืœื ื”ื™ื“ื•ืจ ืžื—ื“ืฉ ืขื ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืœื™ื‘ืช ืœื™ื ื•ืงืก.
  • ืชืžื™ื›ื” ื‘ืงืจื™ืื•ืช "bpf-to-bpf", ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื ื•ืื™ืชื—ื•ืœื™ื, ื”ืžืืคืฉืจืช ืœืขืฆื‘ ืชื•ื›ื ื™ื•ืช ืขื‘ื•ืจ eBPF ื‘ืื•ืคืŸ ื“ื•ืžื” ืœืชื•ื›ื ื™ื•ืช ืจื’ื™ืœื•ืช ื”ืžืฉืชืžืฉื•ืช ื‘-aya ื›ื–ืžืŸ ืจื™ืฆื” ื”ืžื’ื“ื™ืจ ืžื—ื“ืฉ ืคื•ื ืงืฆื™ื•ืช ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืขื‘ื•ื“ื” ื‘-eBPF.
  • ืชืžื™ื›ื” ื‘ืกื•ื’ื™ ืงืจื ืœ ืฉื•ื ื™ื, ื›ื•ืœืœ ืžืขืจื›ื™ื ืจื’ื™ืœื™ื, ืžืคื•ืช ื’ื™ื‘ื•ื‘, ืขืจื™ืžื•ืช, ืชื•ืจื™ื, ืขืงื‘ื•ืช ืžื—ืกื ื™ืช, ื›ืžื• ื’ื ืžื‘ื ื™ ืžืขืงื‘ ืื—ืจ ืฉืงืขื™ื ื•ื‘ื™ืฆื•ืขื™ื.
  • ื™ื›ื•ืœืช ืœื™ืฆื•ืจ ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ืชื•ื›ื ื™ื•ืช eBTF, ืœืจื‘ื•ืช ืชื•ื›ื ื™ื•ืช ืœืกื™ื ื•ืŸ ื•ื ื™ื”ื•ืœ ืชืขื‘ื•ืจื”, ืžื˜ืคืœื™ cgroup ื•ืคืขื•ืœื•ืช socket ืฉื•ื ื•ืช, ืชื•ื›ื ื™ื•ืช XDP.
  • ืชืžื™ื›ื” ื‘ืคืœื˜ืคื•ืจืžื•ืช ืœืขื™ื‘ื•ื“ ื‘ืงืฉื•ืช ืืกื™ื ื›ืจื•ื ื™ ื‘ืžืฆื‘ ืœื ื—ื•ืกื tokio ื•-async-std.
  • ื”ืจื›ื‘ื” ืžื”ื™ืจื”, ืœืœื ื›ืœ ื—ื™ื‘ื•ืจ ืœืžื›ืœื•ืœ ื”ืงืจื ืœ ื•ืœืงื‘ืฆื™ ื›ื•ืชืจื•ืช ื”ืงืจื ืœ.

ื”ืคืจื•ื™ืงื˜ ืขื“ื™ื™ืŸ ื ื—ืฉื‘ ื ืกื™ื•ื ื™ โ€“ ื”-API ืขื“ื™ื™ืŸ ืœื ื”ืชื™ื™ืฆื‘ ื•ืžืžืฉื™ืš ืœื”ืชืคืชื—. ื›ืžื• ื›ืŸ, ื›ืœ ื”ื”ื–ื“ืžื ื•ื™ื•ืช ื”ืžืชื•ื›ื ื ื•ืช ื˜ืจื ืžื•ืžืฉื•. ืขื“ ืกื•ืฃ ื”ืฉื ื”, ื”ืžืคืชื—ื™ื ืžืฆืคื™ื ืœื”ื‘ื™ื ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ Aya ืœืฉื•ื•ื™ื•ืŸ ืขื libbpf, ื•ื‘ื™ื ื•ืืจ 2022 ืœื™ืฆื•ืจ ืืช ื”ืžื”ื“ื•ืจื” ื”ื™ืฆื™ื‘ื” ื”ืจืืฉื•ื ื”. ื™ืฉ ื’ื ืชื•ื›ื ื™ื•ืช ืœืฉืœื‘ ืืช ื”ื—ืœืงื™ื ืฉืœ Aya ื”ื“ืจื•ืฉื™ื ืœื›ืชื™ื‘ืช ืงื•ื“ Rust ืขื‘ื•ืจ ืœื™ื‘ืช ืœื™ื ื•ืงืก ืขื ืจื›ื™ื‘ื™ ืžืจื—ื‘ ื”ืžืฉืชืžืฉ ื”ืžืฉืžืฉื™ื ืœื˜ืขื™ื ื”, ืฆื™ืจื•ืฃ ื•ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืชื•ื›ื ื™ื•ืช eBPF.

ื ื–ื›ื™ืจ ื›ื™ eBPF ื”ื•ื ืžืชื•ืจื’ืžืŸ ื‘ืชื™ื ืžื•ื‘ื ื” ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก, ื”ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืžื˜ืคืœื™ ืคืขื•ืœื•ืช ื‘ืจืฉืช, ืœื ื˜ืจ ืืช ืคืขื•ืœืช ื”ืžืขืจื›ืช, ืœื™ื™ืจื˜ ืงืจื™ืื•ืช ืžืขืจื›ืช, ืœืฉืœื•ื˜ ื‘ื’ื™ืฉื”, ืœืขื‘ื“ ืื™ืจื•ืขื™ื ืชื•ืš ืฉืžื™ืจื” ืขืœ ืชื–ืžื•ืŸ, ืœื—ืฉื‘ ืืช ืชื“ื™ืจื•ืช ื•ื–ืžืŸ ื”ืคืขื•ืœื•ืช, ืœื‘ืฆืข ืžืขืงื‘ ื‘ืืžืฆืขื•ืช kprobes/uprobes /tracepoints. ื”ื•ื“ื•ืช ืœืฉื™ืžื•ืฉ ื‘ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ JIT, bytecode ืžืชื•ืจื’ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืœื”ื•ืจืื•ืช ืžื›ื•ื ื” ื•ืžื‘ื•ืฆืข ืขื ื‘ื™ืฆื•ืขื™ื ืฉืœ ืงื•ื“ ืžืงื•ืจื™. XDP ืžืกืคืง ื›ืœื™ื ืœื”ืคืขืœืช ืชื•ื›ื ื™ื•ืช BPF ื‘ืจืžืช ืžื ื”ืœื™ ื”ื”ืชืงืŸ ื‘ืจืฉืช, ืขื ื™ื›ื•ืœืช ื’ื™ืฉื” ื™ืฉื™ืจื” ืœืžืื’ืจ ืžื ื•ืช ื”-DMA, ื”ืžืืคืฉืจ ืœื™ืฆื•ืจ ืžืขื‘ื“ื™ื ื‘ืขืœื™ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืœืขื‘ื•ื“ื” ืชื—ืช ืขื•ืžืก ืจืฉืช ื›ื‘ื“.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”