ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½Π° Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Aya Π·Π° създаванС Π½Π° eBPF ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π² Rust

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½Π° Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° вСрсия Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Aya, която Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ eBPF ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Rust, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ядрото Π½Π° Linux Π² спСциална Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина с JIT. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° eBPF, Aya Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° libbpf ΠΈ bcc ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°, Π° вмСсто Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π° своя собствСна рСализация, написана Π½Π° Rust, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° libc crate Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ систСмнитС извиквания Π½Π° ядрото. Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€