ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ KernelScript β€” СкспСримСнталСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, потрСбитСлски Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‡ΠΈ ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° Linux ядрото ΠΎΡ‚ Π΅Π΄ΠΈΠ½Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Π²ΠΈΠ²Π° Multikernel Technologies, компания, която популяризира Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° split-kernel / multikernel Π·Π° Linux. Π—Π° KernelScript Ρ€Π°Π·ΠΊΠ°Π·Π° основатСлят Π½Π° компанията Конг Π£Π°Π½Π³ Π½Π° Linux Foundation Open Source Summit; ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ Π² GitHub ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· Apache 2.0.


eBPF (Π Π°Π·ΡˆΠΈΡ€Π΅Π½ Berkeley Packet Filter) β€” Ρ‚ΠΎΠ²Π° Π΅ тСхнология, която позволява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ядрото Π½Π° Linux, Π±Π΅Π· Π΄Π° сС засяга нСговият ΠΊΠΎΠ΄ ΠΈ Π±Π΅Π· Π΄Π° сС поставя ΠΏΠΎΠ΄ риск стабилността Π½Π° систСмата. eBPF ΠΏΠΎΠΌΠ°Π³Π° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° мноТСство Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° производитСлността Π΄ΠΎ осигуряванС Π½Π° сигурност ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²Π° оптимизация. НапримСр, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° eBPF ΠΌΠΎΠΆΠ΅ Π΄Π° сС слСдят систСмни повиквания, ΠΌΡ€Π΅ΠΆΠΎΠ² Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Π’ΠΎΠ²Π° позволява Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ тСсни мСста Π² производитСлността ΠΈ Π΄Π° сС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° систСмата (Π₯Π°Π±Ρ€).

Π˜Π΄Π΅ΡΡ‚Π° Π½Π° KernelScript Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° eBPF ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° комбинацията C + libbpf, ΠΈ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° само Π΄ΠΎ трасировка, ΠΊΠ°ΠΊΡ‚ΠΎ bpftrace. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ описват Π΅Π·ΠΈΠΊΠ° ΠΊΠ°Ρ‚ΠΎ типобСзопасСн DSL, ΠΊΠΎΠΉΡ‚ΠΎ обСдинява eBPF, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² потрСбитСлското пространство ΠΈ kernelspace: ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ трябва Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΊΠΎΠ΄ Π·Π° eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, част ΠΎΡ‚ userspace ΠΈ интСграция с kernel ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ‡Ρ€Π΅Π· kfunc.

ΠžΠ±ΡΠ²Π΅Π½ΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° KernelScript:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π΅Π»ΠΈ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ» β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ @xdp, @tc, @helper ΠΈ @kfunc Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½Π° Π½ΡƒΠΆΠ½Π°Ρ‚Π° част: XDP/TC ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΏΠΎΠΌΠΎΡ‰Π½Π° функция, функция Π½Π° ядро ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ потрСбитСлски ΠΊΠΎΠ΄.

  • Автоматизация Π½Π° tail calls β€” вмСсто Ρ€ΡŠΡ‡Π½Π° настройка Π½Π° program array ΠΈ повиквания Π½Π° bpf_tail_call() Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° функция, Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° нискоуровнСвия eBPF ΠΊΠΎΠ΄ Π΄Π° бъдС оставСно Π½Π° компилятора.

  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с dynptr ΠΈ eBPF maps β€” Π΅Π·ΠΈΠΊΡŠΡ‚ скрива част ΠΎΡ‚ Ρ€ΡŠΡ‡Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° с bpf_ringbuf_reserve_dynptr, bpf_dynptr_write ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ API. eBPF ΠΊΠ°Ρ€Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.

  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ β€” eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ сС прСдставят ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ΠΈ стойности, ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΏΠΎ замисъл Π½Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, позволява Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° компилация Π΄Π° сС прСдотвратят Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° attach() ΠΏΡ€Π΅Π΄ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ load().

  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π·Π° kfunc β€” KernelScript позволява обявяванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ @kfunc, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ядрото ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈ ΠΎΡ‚ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ; Π·Π° тях Π΅ ΠΎΠ±Π΅Ρ‰Π°Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° гСнСрация Π½Π° kernel module ΠΈ BTF рСгистрации.

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° основни Ρ‚ΠΈΠΏΠΎΠ²Π΅ eBPF ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ β€” Π² README са ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° XDP, TC, probe ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ perf_event, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π½ΠΈ броячи Π·Π° производитСлност.

АвторитС ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°Ρ‚, Ρ‡Π΅ KernelScript Π½Π΅ Π΅ замСститСл Π½Π° ядрото Π½Π° Linux ΠΈΠ»ΠΈ Π½ΠΎΠ² eBPF runtime. Π’ΠΎΠ²Π° ΠΏΠΎ-скоро Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΈ Π΅Π·ΠΈΠΊ ΠΎΡ‚ високо Π½ΠΈΠ²ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ нискоуровнСви ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ: eBPF ΠΊΠΎΠ΄, потрСбитСлски Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‡ΠΈ, Makefile ΠΈ, ΠΏΡ€ΠΈ нСобходимост, kernel module.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ трябва Π΄Π° бъдС Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π½Π΅Π½ СкспСримСнт. Π’ рСпозитория Π΅ посочСно, Ρ‡Π΅ KernelScript Π΅ Π² Π΅Ρ‚Π°ΠΏ Π±Π΅Ρ‚Π°, ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ ΠΈ API ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС промСнят Π±Π΅Π· Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°, Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² производствСни срСди всС ΠΎΡ‰Π΅ Π½Π΅ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°.

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

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