Π’ΠΎΠ²Π΅Π΄Π΅Π½Π° Aya Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° создавањС eBPF Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ Π²ΠΎ Rust

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Π΅ ΠΏΡ€Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Aya, ΠΊΠΎΠ΅ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ eBPF Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ Rust ΠΊΠΎΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Linux Π²ΠΎ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина со JIT. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° eBPF, Aya Π½Π΅ користи libbpf ΠΈ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ bcc, Ρ‚ΡƒΠΊΡƒ намСсто Ρ‚ΠΎΠ° Π½ΡƒΠ΄ΠΈ своја сопствСна ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° напишана Π²ΠΎ Rust, која Π³ΠΎ користи ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ libc гајба Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ пристап Π΄ΠΎ систСмскитС ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π½Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚. Building Aya Π½Π΅ Π±Π°Ρ€Π° Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° јазик C ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ. ΠšΠΎΠ΄ΠΎΡ‚ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС дистрибуира ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Ρ†ΠΈΡ‚Π΅ MIT ΠΈ Apache 2.0.

Π“Π»Π°Π²Π½ΠΈ карактСристики:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° BTF (BPF Type Format), кој ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΡ‚ Π²ΠΎ BPF псСвдокод Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΡ‚ ΠΈ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ ΠΊΠ΅Ρ€Π½Π΅Π». Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° BTF ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° сС создадат ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π½ΠΈ eBPF ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Ρ‡ΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° сС користат Π±Π΅Π· ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΡšΠ΅ со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Linux.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° ΠΏΠΎΠ²ΠΈΡ†ΠΈ β€žbpf-to-bpfβ€œ, Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° eBPF Π½Π° сличСн Π½Π°Ρ‡ΠΈΠ½ ΠΊΠ°ΠΊΠΎ ΠΈ ΠΎΠ±ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΡˆΡ‚ΠΎ користат aya ΠΊΠ°ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ ΡˆΡ‚ΠΎ Π³ΠΈ Ρ€Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ зСмајќи ја ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π²ΠΎ eBPF.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΈ, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ Π½ΠΈΠ·ΠΈ, ΠΌΠ°ΠΏΠΈ Π·Π° Ρ…Π°ΡˆΠΎΠ²ΠΈ, стСкови, Ρ€Π΅Π΄ΠΈΡ†ΠΈ, Ρ‚Ρ€Π°Π³ΠΈ Π½Π° стСк, ΠΊΠ°ΠΊΠΎ ΠΈ структури Π·Π° слСдСњС Π½Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ ΠΈ пСрформанси.
  • Бпособност Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° eBTF, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚, Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ со cgroup ΠΈ Ρ€Π°Π·Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со сокСти, XDP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Π·Π° асинхрона ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‡ΠΊΠΈ Ρ€Π΅ΠΆΠΈΠΌ tokio ΠΈ async-std.
  • Π‘Ρ€Π·ΠΎ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅, Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²Π° врска со склопот Π½Π° ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° Ρ˜Π°Π΄Ρ€ΠΎΡ‚ΠΎ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ сè ΡƒΡˆΡ‚Π΅ сС смСта Π·Π° СкспСримСнталСн - API сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π΅ стабилизиран ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π° Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π°. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ситС ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΈ моТности сС ΡƒΡˆΡ‚Π΅ Π½Π΅ сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ. Π”ΠΎ ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π°Ρ‚Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Π°Ρ‚ Π΄Π° ја Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ функционалноста Π½Π° Aya Π½Π° Сднаквост со libbpf, Π° Π²ΠΎ Ρ˜Π°Π½ΡƒΠ°Ρ€ΠΈ 2022 Π³ΠΎΠ΄ΠΈΠ½Π° Π΄Π° Π³ΠΎ создадат ΠΏΡ€Π²ΠΎΡ‚ΠΎ стабилно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ° ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΄Π΅Π»ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Aya ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Rust ΠΊΠΎΠ΄ Π·Π° Linux ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ со ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° корисничкиот простор ΡˆΡ‚ΠΎ сС користат Π·Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅, ΠΏΡ€ΠΈΠΊΠ°Ρ‡ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° со eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅.

Π”Π° потсСтимС Π΄Π΅ΠΊΠ° eBPF Π΅ ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° Π±Π°Ρ˜Ρ‚Π΅ΠΊΠΎΠ΄ Π²Π³Ρ€Π°Π΄Π΅Π½ Π²ΠΎ ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ Π½Π° Linux, кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°ΠΊΡƒΠ²Π°Ρ‡ΠΈ со ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π° ја слСдитС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° систСмот, Π΄Π° прСсрСтнуватС систСмски ΠΏΠΎΠ²ΠΈΡ†ΠΈ, Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ пристап, Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°Ρ‚Π΅ настани Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΎ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π΄Π° ја прСсмСтатС Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅, Π΄Π° Π²Ρ€ΡˆΠΈΡ‚Π΅ слСдСњС со помош Π½Π° kprobes/uprobes /tracepoints. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° JIT, Π±Π°Ρ˜Ρ‚-ΠΊΠΎΠ΄ΠΎΡ‚ сС ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π° Π²ΠΎ Π»Π΅Ρ‚ Π²ΠΎ машински инструкции ΠΈ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° со ΠΈΠ·Π²Π΅Π΄Π±Π° Π½Π° ΠΌΠ°Ρ˜Ρ‡ΠΈΠ½ ΠΊΠΎΠ΄. XDP ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° BPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ΅Π½ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π», со моТност Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ пристап Π΄ΠΎ Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ DMA, ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ процСсори со високи пСрформанси Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ΄ Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€