EBPF рд╡рд╛рдкрд░реВрди рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА DTrace рдкреБрдиреНрд╣рд╛ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪрд╛ рдУрд░реЕрдХрд▓рдЪрд╛ рдорд╛рдирд╕ рдЖрд╣реЗ

рдУрд░реЕрдХрд▓ рдХрдВрдкрдиреА рдиреЛрдВрджрд╡рд▓реЗ DTrace-рд╕рдВрдмрдВрдзрд┐рдд рдмрджрд▓ рдЕрдкрд╕реНрдЯреНрд░реАрдордордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рдмрджреНрджрд▓ рдЖрдгрд┐ рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА DTrace рдбрд╛рдпрдиреЕрдорд┐рдХ рдбреАрдмрдЧрд┐рдВрдЧ рддрдВрддреНрд░рдЬреНрдЮрд╛рди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ eBPF рд╕рд╛рд░рдЦреНрдпрд╛ рдЙрдкрдкреНрд░рдгрд╛рд▓реА рд╡рд╛рдкрд░реВрди. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рд▓рд┐рдирдХреНрд╕рд╡рд░ DTrace рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдкрд░рд╡рд╛рдирд╛ рд╕реНрддрд░рд╛рд╡рд░ рд╡рд┐рд╕рдВрдЧрддрддрд╛ рд╣реЛрддреА, рдкрд░рдВрддреБ 2018 рдордзреНрдпреЗ рдУрд░реЕрдХрд▓ рдкрд░рд╡рд╛рдирд╛рдХреГрдд GPLv2 рдЕрдВрддрд░реНрдЧрдд DTrace рдХреЛрдб.

DTrace рдЖрдзреАрдЪ рдмрд░рд╛рдЪ рд╡реЗрд│ Oracle Linux рд╡рд┐рддрд░рдгрд╛рд╕рд╛рдареА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реНрдирд▓рдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рдСрдлрд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдкрд░рдВрддреБ рдЗрддрд░ рд╡рд┐рддрд░рдгрд╛рдВрдордзреНрдпреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░реНрдирд▓ рдкреЕрдЪреЗрд╕ рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рдУрд░реЕрдХрд▓ рддрдпрд╛рд░ Fedora Linux рд╡рд░ DTrace рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╕реВрдЪрдирд╛. рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рдкрд╛рд╕реВрди рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдЪрд╛ рд╡рд╛рдкрд░ рдкреЕрдЪ. рдУрд░реЕрдХрд▓ рдЖрдгрд┐ рдлреЗрдбреЛрд░рд╛ рдкреЕрдЪрд╕рд╣ рдХрд░реНрдирд▓ рдмрд┐рд▓реНрдбрд┐рдВрдЧрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╣реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрд╣реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ.

eBPF рд╣реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рдЖрд╣реЗ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдСрдкрд░реЗрд╢рди рд╣рдБрдбрд▓рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕, рд╕рд┐рд╕реНрдЯрдо рдСрдкрд░реЗрд╢рдирдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реНрд╕рд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рдгреНрдпрд╛рд╕, рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕, рдЯрд╛рдЗрдордХреАрдкрд┐рдВрдЧ (perf_event_open) рд╕рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕, рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│, kprobes рд╡рд╛рдкрд░реВрди рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. /uprobes /tracepoints. JIT рд╕рдВрдХрд▓рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдмрд╛рдпрдЯреЗрдХреЛрдбрдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ рдорд╢реАрдирдЪреНрдпрд╛ рд╕реВрдЪрдирд╛рдВрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдореВрд│ рдХреЛрдбрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. DTrace eBPF рд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЬрд╕реЗ рдХреА рддреЗ eBPF рд╡рд░ рдХрд╕реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. ╤А╨░╨▒╨╛╤В╨░╤О╤В рд╡рд┐рджреНрдпрдорд╛рди рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рд╛рдзрдиреЗ.

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

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛