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

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Π±Ρ€ΠΎΠΉ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Aya, която позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ eBPF Π½Π° Π΅Π·ΠΈΠΊΠ° Rust, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π²ΡŠΡ‚Ρ€Π΅ Π² ядрото Π½Π° Linux Π² спСциална Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина с JIT. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ инструмСнти Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Aya Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° libbpf ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° bcc, Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π° собствСна рСализация, написана Π½Π° Rust, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° crate libc Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ систСмнитС повиквания Π½Π° ядрото. Π—Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Aya Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ инструмСнтарий Π·Π° Π΅Π·ΠΈΠΊΠ° C ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ядрото. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ‚Π΅ MIT ΠΈ Apache 2.0.

Основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° BTF (BPF Type Format), ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя информация Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π² псСвдокод BPF Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈ съвпадСниС с Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, прСдоставяни ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ядро. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° BTF позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° унивСрсални eBPF ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π±Π΅Π· ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° ядрото Π½Π° Linux.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° повиквания 'bpf-to-bpf', Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява оформянСто Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° eBPF Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ aya ΠΊΠ°Ρ‚ΠΎ runtime, прСопрСдСлящ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ³Π»Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ eBPF.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ядра, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ масиви, Ρ…Π΅Ρˆ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (hash map), стСки, опашки, трасировки Π½Π° стСка, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ структури Π·Π° сокСти ΠΈ прослСдяванС Π½Π° производитСлността.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° създаванС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster