рд╣рдо рд╕рднреА рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реБрд░реВ рдореЗрдВ "рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рддрд╣рдд" рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░, рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж, рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдЪреНрдЪреЗ рдбрдВрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реВрдЯ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ "рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ" рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЕрдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрджреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╕реНрдерд┐рддрд┐?
рдлрд┐рд░ рд╣рдо рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░реНрд╕ рдФрд░ рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдлрд┐рд░ рдПрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдпрджрд┐ рдЖрдк рдПрдХ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдЬрд╛рдирддреЗ рд╣реИрдВ - рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдЗрд╕ рдмреАрдЪ, рдЗрди 4 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдореИрдВ
рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ UNIX рдкреНрд░реЛрдлрд╛рдЗрд▓рд░, рдЬреЛ рдХрд┐рд░реНрдХ рдореИрдХрдХрд┐рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрд┐рд▓ рдЬреЙрдп рджреНрд╡рд╛рд░рд╛ рдмреАрдПрд╕рдбреА рдЙрдк рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ "рдкреНрд░рджрд╛рди" рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрди рджреЛрдиреЛрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ gprof рдмрд┐рд▓реНрдХреБрд▓ "рдЬрд╛рдирддрд╛ рд╣реИ"
рдХрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрджреНрдпрдкрд┐ рдпрд╣ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рднреА рд╣реИ - рдорд╛рдк рд╕реЗ рдУрд╡рд░рд╣реЗрдб рддреБрд▓рдиреАрдп рдпрд╛ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм C ++ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдирд▓рд╛рдЗрди рдореЗрдВ рдЕрдЧреНрд░рдгреА рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде gprof рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рджреНрд╡рд┐рддреАрдпред Callgrind
Callgrind, Valgrind рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдврд╛рдВрдЪрд╛ рд╣реИред Valgrind рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓рдЧреНрд░рд┐рдВрдб
рдХреЙрд▓ рдФрд░ рд░рд┐рдЯ рдЬреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ 5 рд╕реЗ 20 рдЧреБрдирд╛ рддрдХ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдХрд░рдг рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг
рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рдкреНрд░рд╛рд░реВрдк рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, kcachegrindред
рддреГрддреАрдпред OProfile
OProfile Linux рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╣реИ, рдЬреЛ рдХрдо рдУрд╡рд░рд╣реЗрдб рдкрд░ рд╕рднреА рд░рдирд┐рдВрдЧ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдУрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдХ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдмрдЬрд╛рдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдирд╣реАрдВ рд╣реИред рдУрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдХреЗ рдкрдврд╝рддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдирд╣реАрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЧреНрд░рд┐рдЯ рдпрд╛ рдХреЙрд▓рдЧрд░реНрд▓, рд▓реЗрдХрд┐рди рд╕реАрдкреАрдпреВ рдХрд╛рдЙрдВрдЯрд░ред рдЗрд╕рд▓рд┐рдП, рдбреЗрдореЙрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЙрдкрдХрд░рдг рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдкреВрд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВред рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрд░ рдХреНрд╖реЗрддреНрд░ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред
OProfile рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 0.9.8рд╕рдВрд╕реНрдХрд░рдг 0.9.7 рдФрд░ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд░реНрдиреЗрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдПрдХ рдбреЗрдорди рд╢рд╛рдорд┐рд▓ рдерд╛ред рд╕рдВрд╕реНрдХрд░рдг 0.9.8 рдХреЗ рдмрд╛рдж рд╕реЗ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкреНрд░рджрд░реНрд╢рди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдПрдХ рдХрд░реНрдиреЗрд▓ 2.6.31 рдпрд╛ рдирдП рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рд░рд┐рд▓реАрдЬ 0.9.8 рдореЗрдВ 'рдСрдкреЗрд░рд╛рдл' рдХрд╛рд░реНрдпрдХреНрд░рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЪрддреБрд░реНрдеред Google perftools
рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ Google perftools рд╕реБрдЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рд╣рд╛рдм рдкрд░ рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рдХрд┐рдЯ рдореЗрдВ C / C ++ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдХреЗрдВрджреНрд░реАрдп рднрд╛рдЧ tcmalloc
рдПрд▓реЛрдХреЗрдЯрд░ рд╣реИ , рдЬреЛ рдореЗрдореЛрд░реА рдХреЗ рдЖрд╡рдВрдЯрди рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ - рдореЗрдореЛрд░реА рд▓реАрдХ рдФрд░ рд╣реАрдк рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рднрд╛рдЧ
рд▓рд┐рдмреНрд░рд┐рдлрд╝рд╛рдЗрдЯрд░ рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рд╕реАрдкреАрдпреВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЬрд░реВрд░реА рд╣реИред рдХрдИ рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 100), рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдЯрд╛рдЗрдорд░ рд╕рд┐рдЧреНрдирд▓ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рднреА рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдкреЙрдЗрдВрдЯреНрд╕ рд╕реНрдЯреЛрд░ рд╣реЛ рдЧрдП рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрдВрдк рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдПрдХ рдХреЙрд▓ рдЧреНрд░рд╛рдл рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред1. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, ITIMER_PROF рдЯрд╛рдЗрдорд░ рдХреЛ рдЯрд╛рдЗрдорд░ рд╕рд┐рдЧреНрдирд▓ рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ CPU рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЯрд┐рдХ рдХрд░рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдмрд╣реБрдд рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЙрдХреЗрдЯ рдкрд░ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдпрд╛ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ env CPUPROFILE_REALTIME=1
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
2. рдХреЙрд▓ рд╕реНрдЯреИрдХ рдпрд╛ рддреЛ рд▓рд┐рдмреБрдирд╡рд┐рдВрдб рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП --fno-omit-framepointer рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ x86 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
3. рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдмрд╛рдж рдореЗрдВ addr2line (1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ
4. рдЕрдиреНрдп Google perftools рдЯреВрд▓ рдХреА рддрд░рд╣, рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ LD_PRELADAD рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░реА рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреЗрд╡рд▓ рдПрди рдмрд╛рд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрди рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИред рдпрд╣ рддрдерд╛рдХрдерд┐рдд рд╣реИ рдирдореВрдирд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ред рдЗрд╕рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдХрд┐рддрдиреЗ рд╣реА рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рдПрдВред рдХрд╛рдо рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ "рдХрд┐рддрдиреА рдмрд╛рд░ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛"ред
Google рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдкрд░реЗрд╢рд╛рдирд┐рдпрд╛рдБ рд╣реИрдВ:
- рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдВрдЯрд╛ (2) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рдЗрд╕реЗ рдбреЗрдореЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ
Crxprof
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдПрдХ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ -
рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА
рдЖрд╕рд╛рди рд░реВрдкрд░реЗрдЦрд╛ред
рдпрд╣ рдПрдХ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ ENTER рджрдмрд╛рдХрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдЧрд░реНрдо рднрд╛рдЧреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдпрд╣ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдХреЙрд▓рдЧрд░реНрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдХреИрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдирдореВрдирд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреА рддрд░рд╣, рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреЙрд▓ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рдХрд╛рдо рдХрд╛ рд╡рд┐рд╡рд░рдгрдореВрд▓ рд░реВрдк рд╕реЗ, crxprof, perftools рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
ptrace (2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреЗрд░рдлреБрдЯреЙрд▓реНрд╕ рдХреА рддрд░рд╣, рдпрд╣ рд╕реНрдЯреИрдХ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд▓рд┐рдмреБрдирд╡рд┐рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдард┐рди рдкрд░рд┐рд╢реНрд░рдо рдХреЗ рдмрдЬрд╛рдп,
addr2line (1) рдХреЗ рдмрдЬрд╛рдп
libbfd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдИ рдмрд╛рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (SIGSTOP) рдФрд░ рд▓рд┐рдмреБрдирд╡рд┐рдВрдб рдХреА рдорджрдж рд╕реЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ "рд╣рдЯрд╛" рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Crxprof рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рд▓реЛрдб рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдореИрдк рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдкреА рд╕реЗрдХреНрд╢рди (рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдХреЙрд▓ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрдВрджреНрд░реАрдп рдХрд╛рд░реНрдп рд╣реИ - рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ lib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ __libc_start_main рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдФрд░ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, рдкреВрдЫреЛред
рдЖрдЗрдП crxprof рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред
рд╕рднрд╛
рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП: рд▓рд┐рдирдХреНрд╕ (2.6+), рдСрдЯреЛрдХреЙрдиреНрдлрд╝ + рдСрдЯреЛрдореИрдЯрд┐рдХ, рдмрд┐рдиреБрдЯрд┐рд▓реНрд╕-рджреЗрд╡ (рд▓рд┐рдмреНрдлрд╝реНрдб рд╢рд╛рдорд┐рд▓), рд▓рд┐рдмреБрдирд╡рд┐рдВрдб-рджреЗрд╡ (рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдмреБрдирд╡рд┐рдВрдб8-рджреЗрд╡ рдХрд╣рд╛ рд╣реИ)ред
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ:
autoreconf -fiv ./configure make sudo make install
рдпрджрд┐ рд▓рд┐рдмреБрдирд╡рд┐рдВрдб рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдерд╛рди рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
./configure --with-libunwind=/path/to/libunwind
рд░реВрдкрд░реЗрдЦрд╛
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЪрд▓рд╛рдПрдВ
crxprof pid
рдФрд░ рд╡рд╣ рд╕рдм рд╣реИ! рдЕрдм рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ENTER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ ^ C рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Crxprof рднреА рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред
crxprof: ptrace (PTRACE_ATTACH) рд╡рд┐рдлрд▓: рдСрдкрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИрдпрджрд┐ рдЖрдк рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ ptrace "рд╕реАрдорд┐рдд" рд╣реИред (рдЙрдмрдВрдЯреВ?)
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИредрд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╛ рддреЛ sudo рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ (рдмреЗрд╣рддрд░) рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ:
$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
рд╕рднреА рдпреВрдирд┐рдХреНрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рддрд░рд╣, crxprof рдЬрдм --help рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
man crxprof
рджреЗрдЦреЗрдВ
crxprof-help рдЙрдкрдпреЛрдЧ: crxprof [рд╡рд┐рдХрд▓реНрдк] рдкреАрдЖрдИрдбреА
рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
-t | - рдереНрд░реЗрд╢реЛрд▓реНрдб рдПрди: рдЙрди рдиреЛрдбреНрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдПрди% рд╕рдордп рд▓реЗрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: 5.0)
-d | --dump рдлрд╝рд╛рдЗрд▓: рджрд┐рдП рдЧрдП FILE рдХреЛ рдХреЙрд▓рдЧрд░реНрд▓ рдбрдВрдк рд╕рд╣реЗрдЬреЗрдВ
-f | --freq FREQ: FREQ рд╣рд░реНрдЯреНрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрд╡реГрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: 100)
-m | --рдореИрдХреНрд╕-рдбреЗрдкреНрде рдПрди: рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрди рд╕реНрддрд░реЛрдВ рдкрд░ рджрд┐рдЦрд╛рдПрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ)
-r | --realtime: CPU рдХреА рдЬрдЧрд╣ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
-рдПрдЪ | --рд╣реЗрд▓реНрдк: рдпрд╣ рдорджрдж рджрд┐рдЦрд╛рдПрдВ
-рдлреБрдЯ-рд╕реНрдЯреИрдХ: рд╡рд┐рдЬреБрдЕрд▓рд╛рдЗрдЬ рдХрд░рддреЗ рд╕рдордп рдлреБрд▓ рд╕реНрдЯреИрдХ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
-рдкреНрд░рд┐рдВрдЯ-рд╕рд┐рдВрдмрд▓: рд╕рд┐рд░реНрдл рдлрди рдФрд░ рдРрдб рдкреНрд░рд┐рдВрдЯ (рдФрд░ рдЫреЛрдбрд╝реЗрдВ)
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг
рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАред рд╕рдВрдХрд▓рди рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЧреНрд░рд╛рдл (4054 - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдкрд┐рдб рдХреЛ рдкреНрд░реЛрдлрд╛рдИрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП crxprof рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ:
$ crxprof -d /tmp/test.calls 4054 Reading symbols (list of function) reading symbols from /home/dkrot/work/crxprof/test/a.out (exe) reading symbols from /lib/x86_64-linux-gnu/libc-2.15.so (dynlib) reading symbols from /lib/x86_64-linux-gnu/ld-2.15.so (dynlib) Attaching to process: 6704 Starting profile (interval 10ms) Press ENTER to show profile, ^C to quit 1013 snapshot interrputs got (0 dropped) main (100% | 0% self) \_ heavy_fn (75% | 49% self) \_ fn (25% | 25% self) \_ fn (24% | 24% self) Profile saved to /tmp/test.calls (Callgrind format) ^C--- Exit since ^C pressed
рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЖрдВрдХрдбрд╝реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐:
- main () рдХреЙрд▓ Heavy_fn () рдФрд░ (рдпрд╣ рд╕рдмрд╕реЗ рдХрдард┐рди рддрд░реАрдХрд╛ рд╣реИ)
- Heavy_fn () рдХреЙрд▓ fn ()
- main () рднреА fn () рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
- Heavy_fn () рдореЗрдВ CPU рдХрд╛ рдЖрдзрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ
- fn () рд╢реЗрд╖ рд╕реАрдкреАрдпреВ рд╕рдордп рд▓реЗрддрд╛ рд╣реИ
- рдореБрдЦреНрдп () рдЕрдкрдиреЗ рдЖрдк рдХреБрдЫ рднреА рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрд╢реАрд░реНрд╖рдХ - рдкрд╣рд▓реЗред" рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрдбрд╝реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд░рд▓ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдЯрд┐рд▓ рдХреЙрд▓ рдЧреНрд░рд╛рдлрд╝ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Kacheacheind рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:
$ kcachegrind /tmp/test.calls
рдореБрдЭреЗ рдЬреЛ рдЪрд┐рддреНрд░ рдорд┐рд▓рд╛ рд╣реИ рд╡рд╣ рджрд╛рдИрдВ рдУрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдЕрдм рддрдХ рдореЗрд░реЗ рдХреБрдЫ рд╕рд╣рдпреЛрдЧреА рдФрд░ рдореИрдВ рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред