рдЙрдЪреНрдЪ рд╕реАрдПрдлрдПрдЪ рд▓реЗрдЯреЗрдВрд╕реА рд╕реЗ рдХрд░реНрдиреЗрд▓ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдИрдЖрд░рдкреАрдПрдл / рдмреАрд╕реАрд╕реА

рдЫрд╡рд┐

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

рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдПрдХ рдФрд░ рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - eBPFред рдпрд╣ рдХрд░реНрдиреЗрд▓ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХрдо рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рддреГрддреАрдп-рдкрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

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

рд╕рд┐рдл рдзреАрдореА рд╣реИ


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


рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рд╣реЛрд╕реНрдЯ рдкрд░ bcache рдФрд░ рдирдП linux 4.15 рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рдореЗрдЬрдмрд╛рди рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣рд╛рдБ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЙрд╕ рд╕рдордп рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореЗрдЬрд╝рдмрд╛рди рдХреА рдЬрд╛рдБрдЪ


рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реАрдл-рдУрдПрд╕рдбреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо perf рдФрд░ flamescope рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ):


рдЪрд┐рддреНрд░ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ fdatasync () рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЬреЗрдиреЗрд░рд┐рдХ_рдореЗрдХ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдУрдПрд╕рдбреА рдбреЗрдореЙрди рдХреЗ рдмрд╛рд╣рд░ рд╣реИред рдпрд╣ рдХрд░реНрдиреЗрд▓ рдпрд╛ рдбрд┐рд╕реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред Iostat рдЖрдЙрдЯрдкреБрдЯ рдиреЗ bcache рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ рд╡рд┐рд▓рдВрдмрддрд╛ рджрд┐рдЦрд╛рдИред

рд╣реЛрд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо-рдпреВрдбрд╡реНрдб рдбреЗрдорди рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ - рдХрдИ рдХреЛрд░ рдкрд░ рд▓рдЧрднрдЧ 20%ред рдпрд╣ рдПрдХ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЪреВрдВрдХрд┐ Systemd-udevd uevents рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ udvadm рдореЙрдирд┐рдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдереАрдВред рдпрд╣ рдХрд╛рдлреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдЗрди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдмреАрд╕реАрд╕реА рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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


рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдлрдВрдХреНрд╢рди рдлрд╛рд╕реНрдЯ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреА рд╣реИ рд╡рд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХрддрд╛рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреА рд╣реИред

Bcache рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреАрди рдбрд┐рд╕реНрдХ рд╣реЛрддреЗ рд╣реИрдВ:

  • рдмреИрдХрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ (рдХреИрд╢реНрдб рдбрд┐рд╕реНрдХ), рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдзреАрдореА рдПрдЪрдбреАрдбреА рд╣реИ;
  • рдХреИрд╢рд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ (рдХреИрд╢рд┐рдВрдЧ рдбрд┐рд╕реНрдХ), рдпрд╣рд╛рдВ рдпрд╣ NVMe рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдПрдХ рд╕реЗрдХреНрд╢рди рд╣реИ;
  • bcache рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╕рдВрдЪрд░рдг рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП? рд╣рдо рдЗрд╕рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдирд┐рдкрдЯреЗрдВрдЧреЗред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

/usr/share/bcc/tools/execsnoop | tee ./execdump 

рд╣рдо рдпрд╣рд╛рдБ рдкрд░ execsnoop рдХрд╛ рдкреВрд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

 sh 1764905 5802 0 sudo arcconf getconfig 1 AD | grep Temperature | awk -F '[:/]' '{print $2}' | sed 's/^ \([0-9]*\) C.*/\1/' 

рддреАрд╕рд░рд╛ рдХреЙрд▓рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ PPID (рдореВрд▓ рдкреАрдЖрдИрдбреА) рд╣реИред рдкреАрдЖрдИрдбреА тАЛтАЛ5802 рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рдорд╛рд░реА рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реЗ рдПрдХ рдмрди рдЧрдИред рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп, рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рдП рдЧрдП рдереЗред рдПрдЪрдмреАрдП рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рддрд╛рдкрдорд╛рди рд╣рд░ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рд╕рддреНрдпрд╛рдкрди рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕ рдореЗрдЬрдмрд╛рди рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рджреЗрд░реА рдореЗрдЬрдмрд╛рди рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ bcache рдбрд┐рд╡рд╛рдЗрд╕ рдЗрддрдирд╛ рдзреАрдорд╛ рдХреНрдпреЛрдВ рдерд╛ред рд╣рдордиреЗ рдПрдХ рд╕рдорд░реВрдк рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдордВрдЪ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ bcache рдкрд░ рдлрд┐рдпреЛ рдЪрд▓рд╛рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕рдордп-рд╕рдордп рдкрд░ uevents рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП udevadm рдЯреНрд░рд┐рдЧрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рд▓реЗрдЦрди BCC- рдЖрдзрд╛рд░рд┐рдд рдЙрдкрдХрд░рдг


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

рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рд╣реИ:

  • рдЬреЗрдиреЗрд░рд┐рдХ_рдореЗрдХ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ () рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
    • рд╣рдо рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рдбрд┐рд╕реНрдХ рдирд╛рдо рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ;
    • рд╕рдордп рдХреА рдореЛрд╣рд░ рдмрдЪрд╛рдУред

  • Generic_make_request () рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП kretprobe рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:
    • рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;
    • рд╣рдо рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕рдордп рдЯрд┐рдХрдЯ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ;
    • рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдо рд╕рд╣реЗрдЬреЗ рдЧрдП рдбрд┐рд╕реНрдХ рдирд╛рдо рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

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

рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рдХреЗ рдЕрдВрджрд░ рдИрдПрдХреНрд╕рдкреАрдПрдл рдкрд╛рда рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 bpf_text = тАЬтАЭтАЭ # Here will be the bpf program code тАЬтАЭтАЭ 

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

 struct data_t { u64 pid; u64 ts; char comm[TASK_COMM_LEN]; u64 lat; char disk[DISK_NAME_LEN]; }; BPF_HASH(p, u64, struct data_t); BPF_PERF_OUTPUT(events); 

рдпрд╣рд╛рдБ рд╣рдо рдПрдХ рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ p рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдк u64 рдХреА рдХреБрдВрдЬреА рдФрд░ рдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рдХреНрдЪрд░ data_t рдХрд╛ рдорд╛рди рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рд╣рдорд╛рд░реЗ рдмреАрдкреАрдПрдл рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред BPF_PERF_OUTPUT рдореИрдХреНрд░реЛ рдЗрд╡реЗрдВрдЯреНрд╕ рдирд╛рдордХ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдкрд░ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рддрдм рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд░рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 void start(struct pt_regs *ctx, struct bio *bio) { u64 pid = bpf_get_current_pid_tgid(); struct data_t data = {}; u64 ts = bpf_ktime_get_ns(); data.pid = pid; data.ts = ts; bpf_probe_read_str(&data.disk, sizeof(data.disk), (void*)bio->bi_disk->disk_name); p.update(&pid, &data); } 

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЗрдиреЗрд░рд┐рдХ_рдореЗрдХ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ () рд╕реЗ рд╡рд╛рдкрд╕реА рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 void stop(struct pt_regs *ctx) { u64 pid = bpf_get_current_pid_tgid(); u64 ts = bpf_ktime_get_ns(); struct data_t* data = p.lookup(&pid); if (data != 0 && data->ts > 0) { bpf_get_current_comm(&data->comm, sizeof(data->comm)); data->lat = (ts - data->ts)/1000; if (data->lat > MIN_US) { FACTOR data->pid >>= 32; events.perf_submit(ctx, data, sizeof(struct data_t)); } p.delete(&pid); } } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ: рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреАрдЖрдИрдбреА тАЛтАЛрдФрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреБрдВрдЬреА == рд╡рд░реНрддрдорд╛рди рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдПрдХ рдореМрдЬреВрджрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо рдкрддрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдереНрд░реЗрдб GID рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдЗрдирд░реА рд╢рд┐рдлреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдиреА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреАрдЖрдИрдбреА тАЛтАЛрдЬрд┐рд╕рдиреЗ рдереНрд░реЗрдб рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред Bpf_get_current_pid_tgid () рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рд╣рдо рдереНрд░реЗрдб рдХреЗ GID рдФрд░ рдЗрд╕рдХреЗ PID рджреЛрдиреЛрдВ рдХреЛ рдПрдХ 64-рдмрд┐рдЯ рдорд╛рди рдореЗрдВ рд░рд┐рдЯрд░реНрди рдХрд╣ рд░рд╣реЗ рд╣реИрдВред

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

рдЗрд╕ рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдореЗрдВ рджреЗрд░реА рд╕реАрдорд╛ рдФрд░ рд╕рдордп рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде MIN_US рдФрд░ FACTOR рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ:

 bpf_text = bpf_text.replace('MIN_US',str(min_usec)) if args.milliseconds: bpf_text = bpf_text.replace('FACTOR','data->lat /= 1000;') label = "msec" else: bpf_text = bpf_text.replace('FACTOR','') label = "usec" 

рдЕрдм рд╣рдореЗрдВ BPF рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ BPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдирдореВрдиреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 b = BPF(text=bpf_text) b.attach_kprobe(event="generic_make_request",fn_name="start") b.attach_kretprobe(event="generic_make_request",fn_name="stop") 

рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ data_t рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрдврд╝ рдкрд╛рдПрдВрдЧреЗ:

 TASK_COMM_LEN = 16 # linux/sched.h DISK_NAME_LEN = 32 # linux/genhd.h class Data(ct.Structure): _fields_ = [("pid", ct.c_ulonglong), ("ts", ct.c_ulonglong), ("comm", ct.c_char * TASK_COMM_LEN), ("lat", ct.c_ulonglong), ("disk",ct.c_char * DISK_NAME_LEN)] 

рдЕрдВрддрд┐рдо рдЪрд░рдг рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

 def print_event(cpu, data, size): global start event = ct.cast(data, ct.POINTER(Data)).contents if start == 0: start = event.ts time_s = (float(event.ts - start)) / 1000000000 print("%-18.9f %-16s %-6d %-1s %s %s" % (time_s, event.comm, event.pid, event.lat, label, event.disk)) b["events"].open_perf_buffer(print_event) # format output start = 0 while 1: try: b.perf_buffer_poll() except KeyboardInterrupt: exit() 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреБрдж GItHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдордВрдЪ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ fio рдХреЛ bcache рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ udevadm рдореЙрдиреАрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:


рдЕрдВрдд рдореЗрдВ! рдЕрдм рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмреНрд░реЗрдХрд┐рдВрдЧ bcache рдбрд┐рд╡рд╛рдЗрд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╢реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд░ generic_make_request () рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдХреЙрд▓ рд╣реИред

рдЧрд┐рд░реА рдореЗрдВ рдЦреЛрджреЛ


рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рджреМрд░рд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд▓рдВрдм рдЕрдиреБрд░реЛрдз рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ (/ proc / diskstats рдпрд╛ iostat) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрди рдЕрднреА рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддреЗ рд╣реБрдП, рдпрд╛ рдмреАрд╕реАрд╕реА рдмрд╛рдпреЛрд▓реИрдЯреА рд▓рд┐рдкрд┐ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдЖрдИрдУрд╕реНрдЯреЗрдЯ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓реЗрдЦрд╛рдВрдХрди рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреИрд╢реНрдб рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧреАред

рдпрджрд┐ рд╣рдо рдЬреЗрдиреЗрд░рд┐рдХ_рдореЗрдХ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ , рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдиреБрд░реЛрдз рджрд░реНрдЬ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдФрд░ рдХрд╛рд░реНрдп рдХрд╣реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛, рдЬреЗрдиреЗрд░рд┐рдХ_рдореЗрдХреЗ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ_рдЪреЗрдХ () , рдбрд┐рд╕реНрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ blk_queue_enter () рд╣реИ , рдЬрд┐рд╕рдореЗрдВ Wait_event_interruptible () рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреЙрд▓ рд╣реИ:

 ret = wait_event_interruptible(q->mq_freeze_wq, (atomic_read(&q->mq_freeze_depth) == 0 && (preempt || !blk_queue_preempt_only(q))) || blk_queue_dying(q)); 

рдЗрд╕рдореЗрдВ, рдХрд░реНрдиреЗрд▓ рдХрддрд╛рд░ рдХреЗ рдбреАрдлреНрд░реЙрд╕реНрдЯ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЗрд░реА blk_queue_enter () рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ :

 ~# /usr/share/bcc/tools/funclatency blk_queue_enter -i 1 -m Tracing 1 functions for "blk_queue_enter"... Hit Ctrl-C to end. msecs : count distribution 0 -> 1 : 341 |****************************************| msecs : count distribution 0 -> 1 : 316 |****************************************| msecs : count distribution 0 -> 1 : 255 |****************************************| 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 1 | | 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд░реАрдм рд╣реИрдВред рдХрддрд╛рд░ рдХреЛ "рдлреНрд░реАрдЬ / рдЕрдирдлреНрд░реАрдЬ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп blk_mq_freeze_queue рдФрд░ blk_mq_unfreeze_queue рд╣реИрдВ ред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд╡реЗрд░реА рдХрддрд╛рд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм blk_mq_freeze_queue () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ blk_freeze_queue_start () рдлрд╝рдВрдХреНрд╢рди q-> mq_freeze_depth рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛рддрд╛ рд╣реИ ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдХрд░реНрдиреЗрд▓ blk_mq_freeze_queue_wait () рдореЗрдВ рдХрддрд╛рд░ рдХреЗ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдХрддрд╛рд░ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдбрд┐рд╕реНрдХ рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рд╕рднреА рдХрддрд╛рд░рдмрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реЛрддреА рд╣реИ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдлрд┐рд░ blk_mq_unfreeze_queue () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рдЙрдВрдЯрд░ рдлреНрд░реАрдЬ_рдбреЗрдк рдХреЛ рдШрдЯрд╛рдХрд░ ред

рдЕрдм рд╣рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ udvadm рдЯреНрд░рд┐рдЧрд░ рдХрдорд╛рдВрдб рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ udv рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ "рдлреНрд░реАрдЬ" рдХрд░реЗрдВ рдЙрдиреНрд╣реЗрдВ sysfs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣рдо BCC рдЯреНрд░реЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ blk_freeze_queue рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рд╕реНрдЯреИрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдХреЗ рдирд┐рд╢рд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 ~# /usr/share/bcc/tools/trace blk_freeze_queue -K -U PID TID COMM FUNC 3809642 3809642 systemd-udevd blk_freeze_queue blk_freeze_queue+0x1 [kernel] elevator_switch+0x29 [kernel] elv_iosched_store+0x197 [kernel] queue_attr_store+0x5c [kernel] sysfs_kf_write+0x3c [kernel] kernfs_fop_write+0x125 [kernel] __vfs_write+0x1b [kernel] vfs_write+0xb8 [kernel] sys_write+0x55 [kernel] do_syscall_64+0x73 [kernel] entry_SYSCALL_64_after_hwframe+0x3d [kernel] __write_nocancel+0x7 [libc-2.23.so] [unknown] 3809631 3809631 systemd-udevd blk_freeze_queue blk_freeze_queue+0x1 [kernel] queue_requests_store+0xb6 [kernel] queue_attr_store+0x5c [kernel] sysfs_kf_write+0x3c [kernel] kernfs_fop_write+0x125 [kernel] __vfs_write+0x1b [kernel] vfs_write+0xb8 [kernel] sys_write+0x55 [kernel] do_syscall_64+0x73 [kernel] entry_SYSCALL_64_after_hwframe+0x3d [kernel] __write_nocancel+0x7 [libc-2.23.so] [unknown] 

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

рдирд┐рд╖реНрдХрд░реНрд╖


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

EBPF рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдЯреВрд▓ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ bpftrace рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдЕрдЬреАрдм -рднрд╛рд╖рд╛ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдФрд░ рдЫреЛрдЯреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдПрдХ - ebpf_exporter , рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдЙрдЪреНрдЪ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реБрдВрджрд░ рджреГрд╢реНрдп рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд▓рд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред

Source: https://habr.com/ru/post/hi458592/


All Articles