Rust рдорд╛ eBPF рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди Aya рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдЪрдп

Aya рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдХреЛ рдкрд╣рд┐рд▓реЛ рд░рд┐рд▓реАрдЬ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ JIT рд╕рдБрдЧ рд╡рд┐рд╢реЗрд╖ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рднрд┐рддреНрд░ рдЪрд▓реНрдиреЗ Rust рднрд╛рд╖рд╛рдорд╛ eBPF рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЕрдиреНрдп eBPF рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, Aya рд▓реЗ libbpf рд░ bcc рдХрдореНрдкрд╛рдЗрд▓рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрди, рддрд░ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ Rust рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЖрдлреНрдиреИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдХрд░реНрдиреЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВ рд╕реАрдзрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди libc рдХреНрд░реЗрдЯ рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЕрдпрд╛рд▓рд╛рдИ C рднрд╛рд╖рд╛ рдЙрдкрдХрд░рдг рд╡рд╛ рдХрд░реНрдиреЗрд▓ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб MIT рд░ Apache 2.0 рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред

рдореБрдЦреНрдп рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ:

  • BTF (BPF рдкреНрд░рдХрд╛рд░ рдврд╛рдБрдЪрд╛) рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, рдЬрд╕рд▓реЗ BPF рд╕реНрдпреВрдбреЛрдХреЛрдбрдорд╛ рдкреНрд░рдХрд╛рд░рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рд░ рд╣рд╛рд▓рдХреЛ рдХрд░реНрдиреЗрд▓рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВрдорд╛ рдореНрдпрд╛рдкрд┐рдЩ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред BTF рдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА eBPF рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫ рдЬреБрди рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрд╕рдБрдЧ рдкреБрди: рдХрдореНрдкрд╛рдЗрд▓ рдирдЧрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
  • "bpf-to-bpf" рдХрд▓рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, рдЧреНрд▓реЛрдмрд▓ рднреЗрд░рд┐рдПрдмрд▓рд╣рд░реВ рд░ рдЗрдирд┐рд╕рд┐рдпрд▓рд╛рдЗрдЬрд░рд╣рд░реВ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ eBPF рдХрд╛ рд▓рд╛рдЧрд┐ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рд╕рдорд╛рди рд░реВрдкрдорд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд╣рд░реВ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ aya рд▓рд╛рдИ рд░рдирдЯрд╛рдЗрдордХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ eBPF рдорд╛ рдЦрд╛рддрд╛ рдХрд╛рд░реНрдпрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреЗрд░ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫред
  • рдирд┐рдпрдорд┐рдд рдПрд░реЗрд╣рд░реВ, рд╣реНрдпрд╛рд╕ рдирдХреНрд╕рд╛рд╣рд░реВ, рд╕реНрдЯреНрдпрд╛рдХрд╣рд░реВ, рд▓рд╛рдорд╣рд░реВ, рд╕реНрдЯреНрдпрд╛рдХ рдЯреНрд░реЗрд╕рд╣рд░реВ, рд╕рд╛рдереИ рд╕рдХреЗрдЯ рд░ рдкреНрд░рджрд░реНрд╢рди рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдХрд░реНрдиреЗрд▓ рдкреНрд░рдХрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
  • рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ eBTF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛, рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрдиреЗ рд░ рдЯреНрд░рд╛рдлрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ, cgroup рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдХреЗрдЯ рд╕рдЮреНрдЪрд╛рд▓рдирд╣рд░реВ, XDP рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рд╕рд╣рд┐рддред
  • рдЧреИрд░-рдмреНрд▓рдХрд┐рдЩ рдореЛрдб рдЯреЛрдХрд┐рдпреЛ рд░ async-std рдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╢реЛрдзрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
  • рдХрд░реНрдиреЗрд▓ рдЕрд╕реЗрдВрдмрд▓реА рд░ рдХрд░реНрдиреЗрд▓ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдХреБрдиреИ рдЬрдбрд╛рди рдмрд┐рдирд╛ рдиреИ рдЫрд┐рдЯреЛ рдПрд╕реЗрдореНрдмрд▓реАред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдЭреИ рдкрдирд┐ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдорд╛рдирд┐рдиреНрдЫ - API рдЕрдЭреИ рд╕реНрдерд┐рд░ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рд░ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рдЬрд╛рд░реА рдЫред рд╕рд╛рдереИ, рд╕рдмреИ рдпреЛрдЬрдирд╛рдмрджреНрдз рдЕрд╡рд╕рд░рд╣рд░реВ рдЕрдЭреИ рдкреНрд░рд╛рдкреНрдд рднрдПрдХрд╛ рдЫреИрдирдиреНред рд╡рд░реНрд╖рдХреЛ рдЕрдиреНрддреНрдпрд╕рдореНрдордорд╛, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ Aya рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рд▓рд╛рдИ libbpf рд╕рдБрдЧ рд╕рдорд╛рдирддрд╛рдорд╛ рд▓реНрдпрд╛рдЙрдиреЗ рд░ рдЬрдирд╡рд░реА 2022 рдорд╛ рдкрд╣рд┐рд▓реЛ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реЗрдХрд╛ рдЫрдиреНред рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ рд░рд╕реНрдЯ рдХреЛрдб рд▓реЗрдЦреНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ Aya рдХреЛ рднрд╛рдЧрд╣рд░реВрд▓рд╛рдИ eBPF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рд▓реЛрдб рдЧрд░реНрди, рд╕рдВрд▓рдЧреНрди рдЧрд░реНрди рд░ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдкреЗрд╕ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрд╕рдБрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛рд╣рд░реВ рдкрдирд┐ рдЫрдиреНред

рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╛рдж рдЧрд░реМрдВ рдХрд┐ eBPF рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдорд╛ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдмрд╛рдЗрдЯрдХреЛрдб рджреЛрднрд╛рд╖реЗ рд╣реЛ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдЮреНрдЪрд╛рд▓рди рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдкреНрд░рдгрд╛рд▓реА рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди, рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВ рдЗрдиреНрдЯрд░рд╕реЗрдкреНрдЯ рдЧрд░реНрди, рдкрд╣реБрдБрдЪ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди, рд╕рдордп рдХрд╛рдпрдо рдЧрд░реНрджрд╛ рдШрдЯрдирд╛рд╣рд░реВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди, рдЖрд╡реГрддреНрддрд┐ рд░ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕рдордп рдЧрдгрдирд╛ рдЧрд░реНрди, рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред kprobes/uprobes/tracepoints рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЯреНрд░реЗрд╕рд┐рдЩред JIT рдХрдореНрдкрд╛рдЗрд▓реЗрд╢рдирдХреЛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдзрдиреНрдпрд╡рд╛рдж, рдмрд╛рдЗрдЯрдХреЛрдбрд▓рд╛рдИ рдореЗрд╕рд┐рди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдорд╛ рдлреНрд▓рд╛рдИрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдиреЗрдЯрд┐рдн рдХреЛрдбрдХреЛ рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред XDP рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрднрд░ рд╕реНрддрд░рдорд╛ BPF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, DMA рдкреНрдпрд╛рдХреЗрдЯ рдмрдлрд░рдорд╛ рд╕реАрдзрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рд╕рд╛рде, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рднрд╛рд░реА рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб рдЕрдиреНрддрд░реНрдЧрдд рдХрд╛рдо рдЧрд░реНрди рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди