BpfTrace - рдЕрдВрдд рдореЗрдВ, рд▓рд┐рдирдХреНрд╕ рдкрд░ Dtrace рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди

рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИ, рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдвреВрдВрдврдирд╛ рдЙрддрдирд╛ рд╣реА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдпрд╛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЕрдВрджрд░ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрд╡рд▓реЛрдХрди рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП , рдЬреЛ рд╢рдмреНрдж рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред


рдкрд░ HighLoad ++, рдкреАрдЯрд░ Zaitsev (Percona) рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдФрд░ bpfTrace рд╣реИ, рдЬреЛ (рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдо рдХрд╛ рддрд╛рддреНрдкрд░реНрдп) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрдИ рдлрд╛рдпрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рд╣рдордиреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдПрдХ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рд╣рдореЗрд╢рд╛ рд╣рд╛рде рдореЗрдВ рд░рд╣реЗред

рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХреЛ рджреЛ рдмрдбрд╝реЗ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рд╕реНрдЯреЗрдЯрд┐рдХ , рдЬрдм рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреЛрдб рдореЗрдВ рд╡рд╛рдпрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд▓реЙрдЧ, рдХрд╛рдЙрдВрдЯрд░, рд╕рдордп рдЖрджрд┐ред
  • рдбрд╛рдпрдирд╛рдорд┐рдХ , рдЬрдм рдХреЛрдб рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧреАрдХрд░рдг рд╡рд┐рдХрд▓реНрдк рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:

  • рдЯреНрд░реЗрд╕рд┐рдВрдЧ - рдпрджрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдб рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдШрдЯрдирд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред
  • рдирдореВрдирд╛рдХрд░рдг - рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100 рдмрд╛рд░ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕реНрдЯреЗрдЯрд┐рдХ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдореЗрдВ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдкрд░, Vmstat рдпрд╛ рд╢реАрд░реНрд╖ рдЬреИрд╕реЗ рдХрдИ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ procfs рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ, рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдХрд░реНрдиреЗрд▓ рдХреЛрдб рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ; рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рдХреА рд╣рд░ рдЪреАрдЬ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рд▓рд┐рдП, рдЧрддрд┐рд╢реАрд▓ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд╣реА рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред



Dtrace


DTrace рд╕рди рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрдореНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкрд╣рд▓реЗ рдЬреНрдЮрд╛рдд рдбрд╛рдпрдиреЗрдорд┐рдХ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕реЗ 2001 рдореЗрдВ рд╡рд╛рдкрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛ рдФрд░ 2005 рдореЗрдВ рд╕реЛрд▓рд╛рд░рд┐рд╕ 10 рдореЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╡рд┐рддрд░рдгреЛрдВ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, DTrace рдЖрдкрдХреЛ рдХрд░реНрдиреЗрд▓ рд╕реНрдкреЗрд╕ рдФрд░ рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рджреЛрдиреЛрдВ рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдирд┐рд╢рд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: рд╡рд┐рд╢реЗрд╖ DTrace рдЯреНрд░реЗрд╕рдкреНрд╡рд╛рдЗрдВрдЯ рдкреЗрд╢ рдХрд░реЗрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕реЛрд▓рд╛рд░рд┐рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдФрд░ рдпрд╣ рд╕рдордЭрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЯреНрд░реЗрд╕рдкреЙрдЗрдВрдЯ рдХреЛ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рдирдП рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд▓рд┐рдирдХреНрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд╕ рд╕рдордп, DTrace рдХреА рдЦрд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж , рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ CPU рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ DTrace рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд▓реМрдЯрдиреЗ рдкрд░ рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

DTrace рдореЗрдВ, C рдФрд░ Awk рдХреЗ рд╕рдорд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреА рднрд╛рд╖рд╛ рдореЗрдВ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд╛рдж рдореЗрдВ DTrace рд▓рд┐рдирдХреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛: 2007 рдореЗрдВ MacOS рдкрд░, 2008 рдореЗрдВ FreeBSD рдкрд░, 2010 рдореЗрдВ NetBSD рдореЗрдВред 2011 рдореЗрдВ Oracle рдиреЗ Oracle Unbreakable Linux рдореЗрдВ DTrace рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧ Oracle Linux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ DTrace рдХрднреА рднреА рдореБрдЦреНрдп рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ 2017 рдореЗрдВ, рдУрд░реЗрдХрд▓ рдиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ GPLv2 рдХреЗ рддрд╣рдд DTrace рдХреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдореЗрдирд▓рд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рдереАред рдЙрд╕ рд╕рдордп, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдмреАрдкреАрдПрдл рдерд╛, рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред

DTrace рдХреЛ Windows рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЕрдм рдпрд╣ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

рд▓рд┐рдирдХреНрд╕ рдЕрдиреБрд░реЗрдЦрдг


DTrace рдХреА рдЬрдЧрд╣ Linux рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рджрд░рдЕрд╕рд▓, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реНрдкрд┐рд░рд┐рдЯ рдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ (рдпрд╛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм) рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЗрд╕ рд╕рдордп рдЬрдорд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред



рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╡рд┐рдзрддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рджреЗрдЦреЗрдВ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдгрди рдХрд░реЗрдВред

рдЕрдЧрд░ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреАрди рд╕реНрддрд░ рд╣реИрдВ:

  1. рдХрд░реНрдиреЗрд▓ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕: Kprobe, Uprobe, Dtrace рдЬрд╛рдВрдЪ, рдЖрджрд┐ред
  2. ┬л┬╗, . , probe, , user space . : , user space, Kernel Module, - , eBPF.
  3. -, , : Perf, SystemTap, SysDig, BCC .. bpfTtrace , , .

eBPF тАФ Linux


рдЗрди рд╕рднреА рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдИрдПрдХреНрд╕рдкреАрдПрдл рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд, рдЕрддреНрдпрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

EBPF рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, EBPF рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдмрд░реНрдХрд▓реЗ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИ, рдФрд░ BPF рдХреЛ 1992 рдореЗрдВ рдПрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХреБрд╢рд▓ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЙрдирдХрд╛ рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрдкрд╛рд▓рди, рдпрд╛ рдЕрдиреБрд░реЗрдЦрдг рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рдерд╛ред

рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдИрдЬреАрдкреАрдПрдл рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╢рдмреНрдж рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд), рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ ред рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП JIT рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИрдВред

рд╢рд╛рд╕реНрддреНрд░реАрдп BPF рд╕реЗ eBPF рдХреЗ рдЕрдВрддрд░:

  • рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛;
  • рдПрдХ рд╕реНрдЯреИрдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ;
  • рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ (рдирдХреНрд╢реЗ) рд╣реИрдВред



рдЕрдм рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдпрд╣ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреБрд░рд╛рдирд╛ BPF рдерд╛, рдФрд░ eBPF рдХреЛ рдХреЗрд╡рд▓ BPF рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, eBPF рдФрд░ BPF рдПрдХ рд╣реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЯреВрд▓ рдХреЛ bpfTrace рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ eBpfTraceред

eBPF рдХреЛ 2014 рд╕реЗ рдореЗрдирд▓рд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕реЗ рдХрдИ рд▓рд┐рдирдХреНрд╕ рдЯреВрд▓реНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рдлрд╝реЗрдХреНрдЯ, рд╕рд┐рд╕реНрдЯрдордЯреИрдк, SysDig рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдорд╛рдирдХреАрдХрд░рдг рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╡рд┐рдХрд╛рд╕ рдЕрднреА рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдЧреБрдард▓реА eBPF рдХрд╛ рдмреЗрд╣рддрд░ рдФрд░ рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред



рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ ред

EBPF рдХрд╛рд░реНрдпрдХреНрд░рдо


рддреЛ рдХреНрдпрд╛ EBPF рд╣реИ рдФрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрдпреЛрдВ рд╣реИ?

eBPF рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ , рдЬреЛ рд╕реАрдзреЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЯреНрд░реЗрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд░реНрдиреЗрд▓ рдХреЛ рдХреБрдЫ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдлреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдореЗрдВ рд▓реВрдк рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рдЯрдХрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдИрдПрдХреНрд╕рдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ рдЬреЛ 10 рдорд┐рд▓рд┐рдпрди рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, EBPF рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЬрдм рдХреЗрд╡рд▓ рдХреБрдЫ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ insmod рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рд▓реЗ рдЧрдП рдереЗ, рдФрд░ рдЗрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдиреЗ рдЧрд▓рддреА рдХреА рд╣реИ, рдпрд╛ рдмрд╕ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг, рдкреВрд░реЗ рдХреЛрд░ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИред

EBPF рдХреЛрдб рдХреЛ LLVM Clang рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП C рдХреЗ рдПрдХ рд╕рдмрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рдХрд░реНрдиреЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЖрджрд┐ред рдпрд╣ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рд╣рдореЗрд╢рд╛ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрд░реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ eBPF рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

http://www.brendangregg.com/ebpf.html

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддрд╛ рд╣реИред рдЖрдЧреЗ, рдХрд░реНрдиреЗрд▓, рдЗрд╕рдХреЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, eBPF рдирд┐рд╢рд╛рди, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдЕрд╕реНрдерд╛рдпреА рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛)ред рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдВрдХрдбрд╝реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдкреВрд░реНрдг-рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрджрд┐ред

рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдИрдПрдХреНрд╕рдкреАрдПрдл рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХрд╡рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдПрдХреАрдХрд░рдг рд╣реИ, eBPF рдХреЗ рдкрд╛рд╕ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреИрд╢ рдорд┐рд╕ рдпрд╛ рдмреНрд░рд╛рдВрдЪ рдорд┐рд╕ рдкреНрд░рд┐рдбрд┐рдХреНрд╢рди рдЖрджрд┐ рд╣реИрдВред

рдпрджрд┐ рдЖрдк eBPF рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ IO Visor рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреЗрдЦреЗрдВ, рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред IO Visor рдХрдВрдкрдиреА рдЙрдирдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧреА рд╣реБрдИ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдВрдЧреЗред рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ eBPF рдЙрдкрдХрд░рдг рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

EBPF рдкреНрд░рджрд░реНрд╢рди


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, eBPF рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рддрдирд╛ рдФрд░ рдХреНрдпрд╛ рдУрд╡рд░рд╣реЗрдб рд╣реИ, рдЖрдк рдПрдХ рдЬрд╛рдВрдЪ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрдИ рдмрд╛рд░ рдШреБрдорд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред



Cloudflare рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рдпрд╛ ред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдИрдПрдХреНрд╕рдкреАрдПрдл рдЬрд╛рдВрдЪ рдиреЗ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ 100 рдПрдирдПрд╕ рд▓рд┐рдпрд╛, рдЬрдмрдХрд┐ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдиреЗ 300 рдПрдирдПрд╕ рд▓рд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рдЬрд╛рдВрдЪ рдХреЛ рд╕рд┐рдВрдЧрд▓ рдХреЛрд░ рдкрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓рдЧрднрдЧ 3 рдорд┐рд▓рд┐рдпрди рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЬрд╛рдВрдЪ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100 рд╣рдЬрд╛рд░ рдпрд╛ рдПрдХ рд▓рд╛рдЦ рдЧреБрдирд╛ рдЭрдЯрдХрд╛ рджреЗрддреА рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

EBPF рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдпрдкрдЯрд▓


рдпрджрд┐ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ EBPF рдФрд░ рдСрдмреНрдЬрд╝рд░реНрд╡рдмрд┐рд▓рд┐рдЯреА рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдмреНрд░реЗрдВрдбрди рдЧреНрд░реЗрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рдФрд░ рдмреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдРрд╕реА рд╕реБрдВрджрд░ рддрд╕реНрд╡реАрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдИрдПрдХреНрд╕рдкреАрдПрдл рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред



рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдЪреНрдЪреЗ рдмреАрдкреАрдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рдмрд╛рдпреЛрдЯреЗрдХ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд░реЙ BPF рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, bpfTrace, рдПрдХ рддрд░рдл, рдЖрдкрдХреЛ BCC рдФрд░ рдХрдЪреНрдЪреЗ BPF рд╕реЗ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рджреЛ рдЙрдкрдХрд░рдг рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:

  • рдмреАрд╕реАрд╕реАред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЧреНрд░реАрдЧ рдХреА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмреАрд╕реАрд╕реА рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рдореЗрдВ рдХрдИ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • BpfTrace ред рдпрд╣ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдирд╛ рдЯреВрд▓рдХрд┐рдЯ рд▓рд┐рдЦрдиреЗ рдпрд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЯреВрд▓ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ bpfTrace рдкрд░ рд▓рд┐рдЦрдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред



DTrace рдмрдирд╛рдо bpfTrace


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, DTrace рдФрд░ bpfTrace рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


http://www.brendangregg.com/blog/2018-10-08/dtrace-for-linux-2018.html

рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдмреАрдкреАрдПрдл рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдмреАрд╕реАрд╕реА рднреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред DTrace рдореЗрдВ рдХреЛрдИ BCC рд╕рдорддреБрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬрдЯрд┐рд▓ рдЯреВрд▓рдХрд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ Shell + DTrace рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

BpfTrace рдмрдирд╛рддреЗ рд╕рдордп, рдкреВрд░реА рддрд░рд╣ рд╕реЗ DTrace рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдерд╛ред рдпрд╣реА рд╣реИ, рдЖрдк рдПрдХ DTrace рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ bpfTrace рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдФрдЬрд╛рд░реЛрдВ рдореЗрдВ рддрд░реНрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╕рдордЭрдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рди рдЯреНрд░реЗрд╕ рдкреЙрдЗрдВрдЯреНрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдирд╛рдо рдФрд░ рд╡реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд▓рд┐рдирдХреНрд╕, рд╕реЛрд▓рд╛рд░рд┐рд╕, рдлреНрд░реАрдмреАрдПрд╕рдбреА рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣реАрдВ рд╕реЗ рдЕрдВрддрд░ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, DTT рдХреЗ 15 рд╕рд╛рд▓ рдмрд╛рдж bpfTrace рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ DTrace рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдХреБрдЫ DTrace рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╛рди рд╣реИрдВ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИрдВред


DTrace рдФрд░ bpfTrace рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛрдб рдЖрдХрд╛рд░ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рднрд╛рд╖рд╛ рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред



bpfTrace


рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ рдХрд┐ bpfTrace рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред BpfTrace рдХрд╛ рдЙрдкрдпреЛрдЧ

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ :


рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо 4.9 рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рд┐рдПред BpfTrace рдЖрдкрдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдХрд░реНрдиреЗрд▓-рдЬрд╛рдВрдЪ рдЗрддреНрдпрд╛рджрд┐ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред


рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рдЕрдкрд╡рд░реНрдб рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ uretprobe рдмрд░рд╛рдмрд░ рд╣реИред рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдЪреАрдЬ kprobe рдФрд░ kretprobe рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ - рдпрд╣ рдЕрдХреНрд╕рд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛ рдЖрдк рдЙрди рдорд╛рдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдиреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдореВрд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реА рд╢рд╛рдВрдд рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмреАрдкреАрдПрдлрдЯреНрд░реЗрд╕ рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╣рдо рдПрдХ рдмреАрдкреАрдПрдл рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд▓реИрдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреАрдкреАрдПрдл рдмрд╛рдЗрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд░реНрд╡рд░ рдкрд░, bpfTrace рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрд▓реИрдВрдЧ рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдкреНрд▓рд╛рдИ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ ред рдмреЗрд╢рдХ, рдЗрд╕рдореЗрдВ bpfTrace рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ рдмрд╛рдпрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рд▓рд┐рдирдХреНрд╕ рд╕рдорд░реНрдерди


BpfTrace рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреБрд░рд╛рдиреЗ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдкреИрдХреЗрдЬ рд▓реЗрдиреЗ рдпрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рд╕реЗ IO Visor рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рдЙрдмрдВрдЯреВ LTS 18.04 рдореЗрдВ bpfTrace рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдиреИрдк рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рддрд░рдл, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рддрд░рдл, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдиреИрдк рдкреИрдХреЗрдЬ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдФрд░ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХрд░реНрдиреЗрд▓-рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╕реНрдиреИрдк рд╡рд╛рд▓рд╛ рдПрдХ рдкреИрдХреЗрдЬ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрд░реЗрдЦрдг рдЙрджрд╛рд╣рд░рдг


рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ IO рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

bpftrace -e 'kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ { @ns[comm] = hist(nsecs - @start[tid]); delete(@start[tid]); }'

рдпрд╣рд╛рдВ рд╣рдо рдлрдВрдХреНрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ vfs_read, рдХреНрд░реЗрдЯрдкреНрд░реЛрдм рдФрд░ рдХреНрд░реЙрдореНрдмреЗ рджреЛрдиреЛрдВред рдЖрдЧреЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдЖрдИрдбреА (tid) рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдХреЛ рди рдХреЗрд╡рд▓ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕рдордЧреНрд░рддрд╛ рд╕реЗ, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ MySQL рдХреЗ рд▓рд┐рдП IO рдЖрдЙрдЯрдкреБрдЯ рд╣реИред



рдХреНрд▓рд╛рд╕рд┐рдХ рдмрд┐рдореЛрдбрд▓ I / O рд╡рд┐рддрд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреЗрдЬрд╝ рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреИрд╢ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдЪреЛрдЯреА рдбрд┐рд╕реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реА рд╣реИ, рдЬрд╣рд╛рдВ рд╡рд┐рд▓рдВрдмрддрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (bt рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ #bpftrace read.btред

// read.bt file
tracepoint:syscalls:sys_enter_read
{
  @start[tid] = nsecs;
}
tracepoint:syscalls:sys_exit_read / @start[tid]/ 
{
  @times = hist(nsecs - @start[tid]);
  delete(@start[tid]);
}

рднрд╛рд╖рд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

  • рд╕рд┐рдВрдЯреИрдХреНрд╕: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ probe[,probe,...] /filter/ { action }ред
  • рдлрд╝рд┐рд▓реНрдЯрд░: рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП Pid рдХреА рджреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ред
  • рдХреНрд░рд┐рдпрд╛: рдПрдХ рдорд┐рдиреА-рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рд╕реАрдзреЗ bpf рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм bpfTrace рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдЪрд▓рддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Bpftrace рдЯреВрд▓реНрд╕


BpfTrace рдореЗрдВ рдПрдХ рдЯреВрд▓рдмреЙрдХреНрд╕ рднреА рд╣реИред BCC рдкрд░ рдХрдИ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рдЕрдм bpfTrace рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред



рд╕рдВрдЧреНрд░рд╣ рдЕрднреА рднреА рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдмреАрд╕реАрд╕реА рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, killsnoop рдЖрдкрдХреЛ рдХрд┐рд▓ () рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк bpf рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ bpfTrace рдореЗрдВ рдЖрдк -vрдЬрдирд░реЗрдЯ рдмрд╛рдЗрдЯ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рднрд╛рд░реА рдЬрд╛рдВрдЪ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ (рдПрдХ рдкреГрд╖реНрда рдпрд╛ рджреЛ) рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИред



MySQL рдЕрдиреБрд░реЗрдЦрдг рдЙрджрд╛рд╣рд░рдг


рдореИрдВ рдЖрдкрдХреЛ MySQL рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред MySQL рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ dispatch_commandрд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА MySQL рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВред

bpftrace -e 'uprobe:/usr/sbin/mysqld:dispatch_command { printf("%s\n", str(arg2)); }'
failed to stat uprobe target file /usr/sbin/mysqld: No such file or directory

рдореИрдВ рд╕рд┐рд░реНрдл MySQL рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрд╛рда рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреЙрдЗрдВрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдПрдХ рдЖрджрд┐рдо рдХрд╛рд░реНрдпред рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА - рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИред рдкрд╕рдВрдж рдирд╣реАрдВ рдЬрдм рдпрд╣рд╛рдБ рд╣реИ:

root@mysql1:/# ls -la /usr/sbin/mysqld
-rwxr-xr-x 1 root root 60718384 Oct 25 09:19 /usr/sbin/mysqld

рдпреЗ рд╕рд┐рд░реНрдл рд╕реНрдиреИрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реИрдВред рдпрджрд┐ рд╕реНрдиреИрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдлрд┐рд░ рдореИрдВрдиреЗ рдЙрдкрдпреБрдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдирдпрд╛ рдЙрдмрдВрдЯреВ, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛:

root@mysql1:~# bpftrace -e 'uprobe:/usr/sbin/mysqld:dispatch_command { printf("%s\n", str(arg2)); }'
Attaching 1 probe...
Could not resolve symbol: /usr/sbin/mysqld:dispatch_command

"рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░рддреАрдХ рдирд╣реАрдВ рд╣реИ" - рдХреИрд╕реЗ рдирд╣реАрдВ? рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ nmрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░рддреАрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

root@mysql1:~# nm -D /usr/sbin/mysqld | grep dispatch_command
00000000005af770 T 
_Z16dispatch_command19enum_server_commandP3THDPcjbb

root@localhost:~# bpftrace -e 'uprobe:/usr/sbin/mysqld:_Z16dispatch_command19enum_server_commandP3THDPcjbb { printf("%s\n", str(arg2)); }'
Attaching 1 probe...
select @@version_comment limit 1
select 1

рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдкреНрд░рддреАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ MySQL C ++ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрддрдорд╛рди рдирд╛рдо, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ _Z16dispatch_command19enum_server_commandP3THDPcjbb:ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рдлреЗрдХреНрдЯ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдХрдИ рдЙрдкрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдирдореИрдВрдЧрд▓рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ bpfTrace рдЕрднреА рддрдХ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдзреНрд╡рдЬ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ -DрдХреЗ рд▓рд┐рдП nmред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ MySQL, рдФрд░ рдЕрдм рдХрдИ рдЕрдиреНрдп рдкреИрдХреЗрдЬ, рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддреАрдХреЛрдВ (рдбрд┐рдмрдЧ рдкреНрд░рддреАрдХреЛрдВ) рдХреЗ рдмрд┐рдирд╛ рдЖрддреЗ рд╣реИрдВ - рд╡реЗ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрди рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ -D, рдЕрдиреНрдпрдерд╛ рдПрдирдПрдо рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦреЗрдЧрд╛ред


: ++ 25тАУ26 , . , , .

: ++ Online . 5 900 , , -.

: DevOpsConf 2019 HighLoad++ 2019 тАФ , .

тАФ , .

All Articles