рдУрд░реЗрдХрд▓рд▓реЗ eBPF рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд▓рд┐рдирдХреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ DTrace рдкреБрди: рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫ

рдУрд░реЗрдХрд▓ рдХрдореНрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░рд┐рдпреЛ DTrace-рд╕рдореНрдмрдиреНрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓рд╛рдИ рдЕрдкрд╕реНрдЯреНрд░реАрдордорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рд░ рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд╢реАрд░реНрд╖рдорд╛ DTrace рдЧрддрд┐рд╢реАрд▓ рдбрд┐рдмрдЧрд┐рдЩ рдкреНрд░рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛рд╣рд░реВ, рдЕрд░реНрдерд╛рддреН eBPF рдЬрд╕реНрддрд╛ рд╕рдмрд╕рд┐рд╕реНрдЯрдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ред рд╕реБрд░реБрдорд╛, рд▓рд┐рдирдХреНрд╕рдорд╛ DTrace рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд▓рд╛рдЗрд╕реЗрдиреНрд╕-рд╕реНрддрд░рдХреЛ рдЕрд╕рдВрдЧрддрддрд╛ рдерд┐рдпреЛ, рддрд░ 2018 рдорд╛ рдУрд░реЗрдХрд▓ рдкреБрди: рд▓рд╛рдЗрд╕реЗрдиреНрд╕ GPLv2 рдЕрдиреНрддрд░реНрдЧрдд DTrace рдХреЛрдбред

DTrace рдкрд╣рд┐рд▓реЗ рдиреИ рд▓рд╛рдореЛ рд╕рдордп Oracle Linux рд╡рд┐рддрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реНрдиреЗрд▓рдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддрд░ рдЕрдиреНрдп рд╡рд┐рддрд░рдгрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдердк рдХрд░реНрдиреЗрд▓ рдкреНрдпрд╛рдЪрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдпрд╕ рдкреНрд░рд╡рд┐рдзрд┐рдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрджрдЫред рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рдУрд░реЗрдХрд▓ рддрдпрд╛рд░ Fedora Linux рдорд╛ DTrace рд╕реНрдерд╛рдкрдирд╛ рд░ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВред рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рд▓рд╛рдЧреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ рдЙрдкрдХрд░рдгрд╣рд░реВ рд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреБрди: рдирд┐рд░реНрдорд┐рдд рдкреНрдпрд╛рдЪрд╣рд░реВред Oracle рд░ Fedora рдкреНрдпрд╛рдЪрд╣рд░реВрд╕рдБрдЧ рдХрд░реНрдиреЗрд▓ рдЕрд╕реЗрдВрдмрд▓реАрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди, рдпреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫред рд▓рд┐рдкрд┐.

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

DTrace рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреА рд╕реЛрд▓рд╛рд░рд┐рд╕ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдгрд╛рд▓реА рдХрд░реНрдиреЗрд▓ рд░ рдЕрдиреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдЯреНрд░реЗрд╕рд┐рдЩрдХреЛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдкреНрд░рдгрд╛рд▓реА рд╡реНрдпрд╡рд╣рд╛рд░рд▓рд╛рдИ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреЗ рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдирд┐рджрд╛рди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рджрд┐рдиреНрдЫред рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд╕рдордпрдорд╛, DTrace рд▓реЗ рдЕрдзреНрдпрдпрди рдЧрд░рд┐рдПрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирд▓рд╛рдИ рдХреБрдиреИ рдкрдирд┐ рд╣рд┐рд╕рд╛рдмрд▓реЗ рдЕрд╕рд░ рдЧрд░реНрджреИрди, рдЬрд╕рд▓реЗ рдЙрдбрд╛рдирдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд▓рд╛рдИ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред DTrace рдХреЛ рдмрд▓рд╣рд░реВ рдордзреНрдпреЗ, AWK рдЬрд╕реНрддреИ рдЙрдЪреНрдЪ-рд╕реНрддрд░рдХреЛ D рднрд╛рд╖рд╛, рдиреЛрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рдорд╛ рдмрд╛рд╣реНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд╕рд╛рде C, Python рд░ Lua рдорд╛ eBPF рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд▓реЗрдЦреНрдиреЗ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рднрдиреНрджрд╛ рдЯреНрд░реЗрд╕ рд▓рд┐рдкрд┐рд╣рд░реВ рд▓реЗрдЦреНрди рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫред ред

рдУрд░реЗрдХрд▓ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВрд▓реЗ GCC рдХреЛ рд▓рд╛рдЧрд┐ eBPF рдмреНрдпрд╛рдХрдЗрдиреНрдб рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдкрдирд┐ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН рд░ рдкрд╣рд┐рд▓реЗ рдиреИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫрдиреН рдкреНрдпрд╛рдЪ рд╕реЗрдЯ GCC рдорд╛ eBPF рд╕рдорд░реНрдерди рдПрдХреАрдХреГрдд рдЧрд░реНрди рд░ рдкрд╛рдПрдХреЛ GNU binutils рдорд╛ eBPF рд╕рдорд░реНрдерди рдЧрд░реНрди рдХреЛрдб рд╕рд╣рд┐рддред рдкреНрд░рд╛рд░рдореНрднрдорд╛, eBPF рд╕рдорд░реНрдердирдХреЛ рд▓рд╛рдЧрд┐ рдмреНрдпрд╛рдХрдЗрдиреНрдб LLVM рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ, рддрд░ Oracle eBPF рдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рдирд┐рдпрдорд┐рдд рдХреНрд╖рдорддрд╛рдХреЛ GCC рдорд╛ рдЙрдкрд╕реНрдерд┐рддрд┐рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫ, рдЬрд╕рд▓реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд░ eBPF рдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рджреБрд╡реИрдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдЯреБрд▓рдХрд┐рдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдмрд╛рдЗрдЯрдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдмреНрдпрд╛рдХрдЗрдиреНрдбрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, GCC рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрдпрд╛рдЪрд╣рд░реВрд▓реЗ eBPF рдХреЛ рд▓рд╛рдЧрд┐ libgcc рдХреЛ рдкреЛрд░реНрдЯ рд░ ELF рдлрд╛рдЗрд▓рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЙрдкрдХрд░рдгрд╣рд░реВ рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдпрд╕рд▓реЗ рдХрд░реНрдиреЗрд▓-рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рд▓реЛрдбрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ eBPF рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐, C рдХреЛрдбрд▓рд╛рдИ рдмрд╛рдЗрдЯрдХреЛрдбрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рд╕рдмреИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫреИрдирдиреН), рддрд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕рд▓реЗ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз C рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗ, рдЕрдиреНрдп рднрд╛рд╖рд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдердкреНрдиреЗ, рд╕рд┐рдореБрд▓реЗрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд░ GCC рд╕рдорд░реНрдерди рдердкреНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рдХрд░реНрдиреЗрд▓рдорд╛ рд▓реЛрдб рдирдЧрд░реА eBPF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдбрд┐рдмрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ред

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

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