GCC Π²Π΅Ρ‡Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π² eBPF

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° GCC ΠΏΡ€ΠΈΠ΅Ρ‚ ΠΊΠΎΠ΄ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, Π²Π³Ρ€Π°Π΄Π΅Π½ Π² ядрото Π½Π° Linux eGMP. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° JIT компилация, Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ядрото сС ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² машинни инструкции ΠΈ сС изпълнява с производитСлността Π½Π° собствСн ΠΊΠΎΠ΄. ΠŸΠ°Ρ‡ΠΎΠ²Π΅ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° eBPF ΠΏΡ€ΠΈΠ΅Ρ‚ΠΎ към ΠΊΠ»ΠΎΠ½Π°, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ GCC 10.

Π’ допълнСниС към Π±Π΅ΠΊΠ΅Π½Π΄Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄, GCC Π²ΠΊΠ»ΡŽΡ‡Π²Π° libgcc ΠΏΠΎΡ€Ρ‚ Π·Π° eBPF ΠΈ инструмСнти Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ELF Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ правят възмоТно ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ във Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина Π½Π° eBPF с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° осигурСни ΠΎΡ‚ ядрото Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‰ΠΈ устройства. ΠŸΠ°Ρ‡ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° eBPF Π² GCC бяха ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ ΠΎΡ‚ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ ΠΎΡ‚ Oracle, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бяха прСдоставСни ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° eBPF Π² GNU binutils. Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠ°Ρ‡ΠΎΠ²Π΅ Π·Π° GDB ΡΡŠΡ‰ΠΎ са Π² процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° отстраняватС Π³Ρ€Π΅ΡˆΠΊΠΈ Π² eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Π±Π΅Π· Π΄Π° Π³ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚Π΅ Π² ядрото.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π·Π° eBPF ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° C, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ ΠΈ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ Π² ядрото. ΠŸΡ€Π΅Π΄ΠΈ изпълнСниС, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° eBPF провСрява Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ инструкции ΠΈ Π½Π°Π»Π°Π³Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π΅Π· Ρ†ΠΈΠΊΠ»ΠΈ).
ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° eBPF Π² Linux бяха ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ инструмСнти, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° LLVM. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° eBPF Π² GCC Π΅ интСрСсна, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΅Π΄ΠΈΠ½ инструмСнтариум Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ядрото Π½Π° Linux ΠΈ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅, Π±Π΅Π· Π΄Π° инсталиратС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ зависимости.

Под Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Π΄Π° управляватС чСстотна Π»Π΅Π½Ρ‚Π°, Π΄Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚Π΅ систСми, Π΄Π° ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π°Ρ‚Π΅ систСмни повиквания, Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ°, Π΄Π° Π±Ρ€ΠΎΠΈΡ‚Π΅ чСстотата ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ прослСдяванС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° kprobes/uprobes/tracepoints.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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