KernelScript 0.1.0

Bekendgestel KernelScript β€” ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ядра Linux ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Multikernel Technologies, компания, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡŽΡ‰Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ split-kernel / multikernel для Linux. О KernelScript рассказал ΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Cong Wang Π½Π° Linux Foundation Open Source Summit; ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° GitHub ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.


eBPF (Extended Berkeley Packet Filter) β€” это тСхнология, которая позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ нСбольшиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прямо Π² ядрС Linux, Π½Π΅ трогая Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΈ Π½Π΅ подвСргая риску ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы. eBPF ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ мноТСство Π·Π°Π΄Π°Ρ‡, ΠΎΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎ обСспСчСния бСзопасности ΠΈ сСтСвой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ eBPF ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ события Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму (Habr).

ИдСя KernelScript β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ eBPF ΠΌΠ΅Π½Π΅Π΅ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠΉ, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании связки C + libbpf, ΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ трассировкой, ΠΊΠ°ΠΊ bpftrace. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ язык ΠΊΠ°ΠΊ типобСзопасный DSL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ eGMP, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ пространство ΠΈ kernelspace-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ: ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π° компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, userspace-части ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с kernel modules Ρ‡Π΅Ρ€Π΅Π· kfunc.

ЗаявлСнныС возмоТности KernelScript:

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ @xdp, @tc, @helper ΠΈ @kfunc автоматичСски относятся ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΉ части: XDP/TC-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, helper-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, kernel-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ userspace-ΠΊΠΎΠ΄Ρƒ.

  • Автоматизация 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-ΠΊΠΎΠ΄, userspace-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ, Makefile ΠΈ, ΠΏΡ€ΠΈ нСобходимости, kernel module.

Пока ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ стоит Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π½Π½ΠΈΠΉ экспСримСнт. Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ прямо ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ KernelScript находится Π² стадии beta, синтаксис ΠΈ API ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· сохранСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² production ΠΏΠΎΠΊΠ° Π½Π΅ рСкомСндуСтся.

Bron: linux.org.ru

Koop betroubare hosting vir werwe met DDoS-beskerming, VPS VDS-bedieners πŸ”₯ Koop betroubare webwerfhosting met DDoS-beskerming, VPS VDS-bedieners | ProHoster