ááááşáááşááąá¸áááşá KernelScript â eBPF ááááŻááááşááťáŹá¸á user loader ááťáŹá¸áážááˇáş kernel extension ááťáŹá¸ ááŽáá˝ááşáááşáĄáá˝ááş á ááşá¸áááşááááŻááááşá¸áááşá¸ááŹááŹá ááŹá¸áá áşáᯠLinux áá áşááŻáááşá¸ááąáŹ ááŻááşáĄááźáąááśáážá áááąáŹááťááşááᯠááŽáá˝ááşááąááŤáááşá ááŹááşááŽááŹáááş áááşá¸áááŹááťáŹá¸split-kernel/multikernel architecture ááᯠááźážááˇáşáááşááąá¸áááˇáş ááŻáášáááŽáá áşáᯠLinuxááŻáášáááŽáááşááąáŹááşáá° Cong Wang á KernelScript áĄááźáąáŹááşá¸ááźáąáŹáá˛áˇááŤáááş Linux Foundation Open Source Summit; áááąáŹááťááşááŻááşááᯠGitHub áá˝ááş áááŻááşá ááşáĄáąáŹááşáá˝ááş ááŻááşááąááŹá¸áááş Apache ááᯠ2.0.
eBPF (Extended Berkeley Packet Filter) áááş kernel áá˝ááş áááŻááşáááŻááşáááşáááşáááŻááşááąáŹ ááááŻááááşáááşááťáŹá¸ áá˝ááˇáşááźáŻáááˇáş áááşá¸áááŹáá áşááŻááźá áşáááşá Linuxáááşá¸áááŻááşááᯠááááᲠáááŻáˇáááŻááş á áá áşáááşááźáááşáážáŻááᯠááááááŻááşá áąáá˛á eBPF áááş á á˝ááşá¸ááąáŹááşáááşá áąáŹááˇáşááźááˇáşááźááşá¸áážáááş ááŻáśááźáŻáśááąá¸áážááˇáş áá˝ááşáááşáĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááşááŻááşááąáŹááşááźááşá¸áĄáá áĄááŻááşáĄááťááŻá¸ááťááŻá¸áá˝ááş áá°ááŽááąá¸áááşá áĽáááŹáĄáŹá¸ááźááˇáşá eBPF áááş á áá áşááąáŤáşáááŻáážáŻááťáŹá¸á áá˝ááşáááşáĄáá˝áŹá¸áĄááŹáážááˇáş áĄááźáŹá¸ááźá áşáááşááťáŹá¸ááᯠáĄááťáááşáážááˇáşáááźáąá¸áᎠá áąáŹááˇáşááźááˇáşáááŻááşáááşá áááşá¸áááş á á˝ááşá¸ááąáŹááşáááşáĄááŹá¸áĄááŽá¸ááťáŹá¸ááᯠááąáŹáşááŻááşááźáŽá¸ áááˇáşá áá áşááᯠáĄááąáŹááşá¸ááŻáśá¸ááźá áşáĄáąáŹááşááŻááşááąáŹááşáááŻááşá áąááŤáááşáááŹáááŹ).
KernelScript áá˛áˇ ááąáŹááşáá˝ááşá áĄáá°áĄááááąáŹáˇ eBPF áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááᯠC + libbpf ááąáŤááşá¸á ááşáĄááŻáśá¸ááźáŻáážáŻáááş áááŻáááŻáá˝ááşáá°á áąáááŻáˇááźá áşááźáŽá¸ bpftrace áááŻááťááŻá¸ tracing áááş ááťáąáŹáşáá˝ááşáááŻáˇáááşá¸ áááşáá˝ááşááŤáááşá developer áá˝áąá ááŽááŹááŹá ááŹá¸ááᯠtype-safe DSL áĄááźá áş ááąáŤááşá¸á ááşááŹá¸ááŤáááşá eGMP, userspace áážááˇáş kernelspace áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻ- áá áşááŻáááşá¸ááąáŹ source file ááž compiler áááş eBPF ááááŻááááşááťáŹá¸á userspace áĄáááŻááşá¸áážááˇáş kfunc áážáá áşáááˇáş kernel module ááťáŹá¸áážááˇáş ááąáŤááşá¸á ááşááźááşá¸áĄáá˝ááş ááŻááşááᯠgenerate ááŻááşááááşá
KernelScript áá˛áˇ ááąáŹáşááźááŹá¸áá˛áˇ á á˝ááşá¸ááąáŹááşáááşáá˝áąáááąáŹáˇ -
áááŻááşáá áşááŻáááşá¸ááž ááá°ááŽááąáŹ áááşáá˝ááşááťááşááťáŹá¸áĄáá˝ááş á áŻá ááşá¸ááźááşá¸ â @xdpá @tcá @helper áážááˇáş @kfunc áá˛áˇáááŻáˇááąáŹ attribute ááťáŹá¸ááŤáááˇáş function ááťáŹá¸ááᯠXDP/TC programá helper functioná kernel function áááŻáˇáááŻááş regular userspace code áá˛áˇáááŻáˇááąáŹ áážááşáááşááąáŹáĄáááŻááşá¸áááŻáˇ áĄáááŻáĄááťáąáŹááş áááşáážááşááąá¸ááŤáááşá
áĄááźáŽá¸ááąáŤáşáááŻáážáŻááťáŹá¸ááᯠáĄáááŻáĄááťáąáŹááşááŻááşááąáŹááşááźááşá¸ â ááááŻááááş array ááᯠáááŻááşáááŻááşá áŽá ááşááźáŽá¸ bpf_tail_call() áááŻááąáŤáşáááˇáşáĄá áŹá¸ developer áĄáŹá¸ áĄááźáŹá¸ function áá áşááŻáááŻáˇ ááŻáśáážááşááąáŤáşáááŻáážáŻáá áşááŻááąá¸áááşáážááˇáş low-level eBPF ááŻááşááŻááşááŻááşááźááşá¸ááᯠcompiler áááŻáˇááŹá¸áá˛áˇáááş ááąáŹááşá¸áááŻááŹá¸áááşá
dynptr áážááˇáş eBPF ááźáąááŻáśááťáŹá¸ááźááˇáş áááŻá¸áážááşá¸ááąáŹáĄááŻááşááŻááşááźááşá¸ â á¤ááŹááŹá ááŹá¸áááş bpf_ringbuf_reserve_dynptrá bpf_dynptr_write áážááˇáş áĄááŹá¸áá° API ááťáŹá¸áážááˇáşáááşáááşáááˇáş áááşá á˝á˛áĄááŻááşáĄááťááŻáˇááᯠáážááşááŹá¸áááşá eBPF ááźáąááŻáśááťáŹá¸ááᯠááá°ááŽááąáŹ ááááŻááááşááťáŹá¸ááž áááşááąáŹááşáĄááŻáśá¸ááźáŻáááŻááşááąáŹ ááášááŹááŻáśá¸áááŻááşáᏠvariable ááťáŹá¸áĄááźá áş áĄááŻáśá¸ááźáŻáááŻááşáááşá
ááąáŹáˇááşáá˛áááşáááşá¸ ááááşá¸ááťáŻááşáážáŻ â eBPF ááááŻááááşááťáŹá¸ááᯠáááŻááşáááˇáşááŹá¸ááąáŹ áááşáááŻá¸ááťáŹá¸áĄááźá áş áááŻááşá áŹá¸ááźáŻááźáŽá¸ á áŹááąá¸áá°ááťáŹá¸á áĄáááŻáĄá áááşá¸áááş compile time áá˝ááş áĄáážáŹá¸ááťáŹá¸ááᯠááŹáá˝ááşáááŻááşá áąáááşá áĽáááŹ- áĄáąáŹááşááźááşááąáŹ load() ááááŻááşáᎠattach() ááᯠexecute ááŻááşáááş ááźááŻá¸á áŹá¸ááźááşá¸ ááźá áşáááşá
kfunc ááśáˇáááŻá¸áážáŻ â KernelScript áááş kernel space áá˝ááş execute ááŻááşááźáŽá¸ eBPF program ááťáŹá¸ááž call ááŻááşáááŻááşááąáŹ @kfunc attribute ááźááˇáş function ááťáŹá¸ááᯠdeclare ááŻááşáá˝ááˇáşááźáŻáááşá kernel module áážááˇáş BTF registration ááťáŹá¸ááᯠáĄáááŻáĄááťáąáŹááşááŻááşááąá¸áááşáᯠáááááźáŻááŹá¸áááşá
áĄááá eBPF áĄá áŽáĄá ááşáĄááťááŻá¸áĄá áŹá¸ááťáŹá¸áĄáá˝ááş ááśáˇáááŻá¸áážáŻ â README áááş hardware performance counters ááťáŹá¸áážááˇáşáĄááŻááşááŻááşááźááşá¸áĄááŤáĄáááş XDPá TCá probe programs ááťáŹá¸áážááˇáş perf_event áĄáá˝ááş áĽáááŹááťáŹá¸áááŻááźááááşá
KernelScript áááş kernel áĄá áŹá¸áááŻá¸áááŻááşááźáąáŹááşá¸ á áŹááąá¸áá°ááťáŹá¸á áĄáá°á¸áĄááąá¸ááąá¸ááźáąáŹááźáŹá¸áááşá Linux áááŻáˇáááŻááş eBPF runtime áĄáá áşá áááşá¸áááş compiler áá áşááŻáážááˇáş high-level language áá áşááŻááźá áşááźáŽá¸ áááşá¸áážáŽá¸ááźáŽá¸ááŹá¸ low-level components ááťáŹá¸ááźá áşáááˇáş eBPF codeá userspace loadersá Makefiles áážááˇáş áááŻáĄááşááŤá kernel module áá áşááŻááᯠááŻááşááŻááşááąá¸áááˇáşáááşá
ááąáŹááąáŹáááşáážáŹááąáŹáˇ ááŽáááąáŹááťááşááᯠáĄá áąáŹáááŻááşá¸á ááşá¸áááşáážáŻáá áşááŻáĄááźá áş áááşáážááşáááˇáşááŤáááşá repository áážáŹ KernelScript áᏠáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáĄáááˇáşáážáŹ áážáááąááąá¸áááşáááŻáˇ áážááşá¸áážááşá¸áááşá¸áááşá¸ ááąáŹáşááźááŹá¸ááŤáááşá beta áááŻá syntax áážááˇáş API ááťáŹá¸áááş ááąáŹááşááźááşáááŻááşáááşááŽáážáŻááᯠáááááşá¸ááááşá¸áᲠááźáąáŹááşá¸áá˛áááŻááşáááşá áááŻáˇáĄááźááş ááŻááşááŻááşáážáŻáá˝ááş áááşá¸ááᯠáĄááŻáśá¸ááźáŻáááş áĄááźáśááźáŻááŹá¸ááźááşá¸ ááážáááąá¸ááŤá
source: linux.org.ru
