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

Procfs рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рддрдм рдЖрдпрд╛ рдЬрдм рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ CRIU рдХрд╛рдлреА рд╕рдордп рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ рдмрд╕ procfs рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреИрд╕реЗ рд╣рд▓ рдХреА рдЧрдИ рдереА, рдФрд░ рдЙрд╕рдиреЗ рд╕реЙрдХ-рдбрд╛рдпрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЦрд░реАрдж рдХреЗ рд▓рд┐рдПред рдмреЗрд╢рдХ, рд╣рдордиреЗ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдерд╛рдпреА рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдЗрд╕ рд╕рдореБрджрд╛рдп рдХреЛ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЦреЗрд▓ рдореЛрдордмрддреНрддреА рдХреЗ рд▓рд╛рдпрдХ рдерд╛ ... рдФрд░ рд╣рдо рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдереЗред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЦрд░реАрдж рдореМрдЬреВрджрд╛ рдкреНрд░рджрд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп: рд╕рд░реНрд╡рд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, vmstat рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рд╕реНрд╡реИрдк рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИ, рдФрд░ "ps ax" рдХреЛ 10 рд╕реЗрдХрдВрдб рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢реАрд░реНрд╖ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐, рд╣рдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд░реЙрдХреНрд╕реИрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ / proc / <pid>
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдРрд╕реА рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдореВрд╣ рдбреЗрдЯрд╛ рд╕реБрд╡рд┐рдзрд╛ рджреНрд╡рд╛рд░рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ( $$
рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢реЗрд▓ рдЪрд░ рд╣реИ рдЬреЛ рдХрд┐ рдкреАрдЖрдИрдбреА тАЛтАЛрдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИ - рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛):
$ ls -F /proc/$$ attr/ exe@ mounts projid_map status autogroup fd/ mountstats root@ syscall auxv fdinfo/ net/ sched task/ cgroup gid_map ns/ schedstat timers clear_refs io numa_maps sessionid timerslack_ns cmdline limits oom_adj setgroups uid_map comm loginuid oom_score smaps wchan coredump_filter map_files/ oom_score_adj smaps_rollup cpuset maps pagemap stack cwd@ mem patch_state stat environ mountinfo personality statm
рдпреЗ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ ASCII рдкреНрд░рд╛рд░реВрдк рдкрд╛рда рдореЗрдВ рд╣реИрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдордиреБрд╖реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреИрд░, рд▓рдЧрднрдЧ рдЖрд╕рд╛рди:
$ cat /proc/$$/stat 24293 (bash) S 21811 24293 24293 34854 24876 4210688 6325 19702 0 10 15 7 33 35 20 0 1 0 47892016 135487488 3388 18446744073709551615 94447405350912 94447406416132 140729719486816 0 0 0 65536 3670020 1266777851 1 0 0 17 2 0 0 0 0 0 94447408516528 94447408563556 94447429677056 140729719494655 140729719494660 140729719494660 140729719496686 0
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рд╕реЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдкрд╛рдардХ рдХреЛ рдореИрди рдкреНрд░реЛрдХ (5), рдпрд╛ рдХрд░реНрдиреЗрд▓ рдкреНрд░рд▓реЗрдЦрди рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рддрддреНрд╡ рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдЙрдиреНрдиреАрд╕рд╡рд╛рдВ рддрддреНрд╡ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп (рдЕрдЪреНрдЫрд╛) рд╣реИред
рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдлреА рдкрдардиреАрдп рд╣реИрдВ:
$ cat /proc/$$/status | head -n 5 Name: bash Umask: 0002 State: S (sleeping) Tgid: 24293 Ngid: 0
рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рддрдиреА рдмрд╛рд░ procfs рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕реАрдзреЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддреЗ рд╣реИрдВ? рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдХреЛ рдХрд┐рддрдиреЗ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рдЕрдзрд┐рдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдХреНрдпрд╛ рд╣реИ? рд╕реНрдерд┐рддрд┐ рдореЙрдирд┐рдЯрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдЗрд╕ рдкрд╛рда рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд╡реЗ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ? рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЗрддрдирд╛ рдзреАрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдХрд╣рдирд╛ рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реАрдзреЗ рдЦрд░реАрдж рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╢реАрд░реНрд╖ рдпрд╛ рдкреАрдПрд╕ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
рд╢реЗрд╖ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдИ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдХрд╣рд╛рдБ рддрдХ рд╕рдордп-рд╕рдордп рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ / proc / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрди рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХрд╛ рдирд╛рдо рджрд╢рдорд▓рд╡ рдЕрдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ, рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдо рддреАрди рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдмрдирд╛рдПрдЧреА (рдХрд░реНрдиреЗрд▓ рдореЗрдВ, рдПрдХ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЖрдВрддрд░рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ)ред рдУрдкрди () рдФрд░ рдХреНрд▓реЛрдЬрд╝ () рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЦреБрдж рд╣рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ procfs рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЦреЛрд▓рдиреЗ () рдФрд░ рдмрдВрдж рдХрд░рдиреЗ () рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд╣реАрдВ рдкрдврд╝реЗрдВрдЧреЗ:
$ time ./task_proc_all --noread stat tasks: 50290 real 0m0.177s user 0m0.012s sys 0m0.162s
$ time ./task_proc_all --noread loginuid tasks: 50289 real 0m0.176s user 0m0.026s sys 0m0.145
рдХрд╛рд░реНрдп-рдЦрд░реАрдж-рд╕рднреА - рдПрдХ рдЫреЛрдЯреА рд╕реА рдЙрдкрдпреЛрдЧрд┐рддрд╛, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдордп () рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдЕрдм рдкрд░рдлреЗрдХреНрдЯ рдХреЛрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦреЗрдВ:
- 92.18% 0.00% task_proc_all [unknown] - 0x8000 - 64.01% __GI___libc_open - 50.71% entry_SYSCALL_64_fastpath - do_sys_open - 48.63% do_filp_open - path_openat - 19.60% link_path_walk - 14.23% walk_component - 13.87% lookup_fast - 7.55% pid_revalidate 4.13% get_pid_task + 1.58% security_task_to_inode 1.10% task_dump_owner 3.63% __d_lookup_rcu + 3.42% security_inode_permission + 14.76% proc_pident_lookup + 4.39% d_alloc_parallel + 2.93% get_empty_filp + 2.43% lookup_fast + 0.98% do_dentry_open 2.07% syscall_return_via_sysret 1.60% 0xfffffe000008a01b 0.97% kmem_cache_alloc 0.61% 0xfffffe000008a01e - 16.45% __getdents64 - 15.11% entry_SYSCALL_64_fastpath sys_getdents iterate_dir - proc_pid_readdir - 7.18% proc_fill_cache + 3.53% d_lookup 1.59% filldir + 6.82% next_tgid + 0.61% snprintf - 9.89% __close + 4.03% entry_SYSCALL_64_fastpath 0.98% syscall_return_via_sysret 0.85% 0xfffffe000008a01b 0.61% 0xfffffe000008a01e 1.10% syscall_return_via_sysret
рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 75% рд╕рдордп рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 16%ред
рдпрджреНрдпрдкрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ () рдФрд░ рдкрд╛рд╕ () рдХреЙрд▓ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рд╣рдо рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдореЗрдВ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ ps рдпрд╛ рд╢реАрд░реНрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП / proc / <pid>
/ stat рдФрд░ / proc / <pid>
/ status рдкрдврд╝рддреЗ рд╣реИрдВред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ / proc / <pid>
/ status рд╕реЗ - рдпрд╣ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рд╣реИрдВ:
$ time ./task_proc_all status tasks: 50283 real 0m0.455s user 0m0.033s sys 0m0.417s
- 93.84% 0.00% task_proc_all [unknown] [k] 0x0000000000008000 - 0x8000 - 61.20% read - 53.06% entry_SYSCALL_64_fastpath - sys_read - 52.80% vfs_read - 52.22% __vfs_read - seq_read - 50.43% proc_single_show - 50.38% proc_pid_status - 11.34% task_mem + seq_printf + 6.99% seq_printf - 5.77% seq_put_decimal_ull 1.94% strlen + 1.42% num_to_str - 5.73% cpuset_task_status_allowed + seq_printf - 5.37% render_cap_t + 5.31% seq_printf - 5.25% render_sigset_t 0.84% seq_putc 0.73% __task_pid_nr_ns + 0.63% __lock_task_sighand 0.53% hugetlb_report_usage + 0.68% _copy_to_user 1.10% number 1.05% seq_put_decimal_ull 0.84% vsnprintf 0.79% format_decode 0.73% syscall_return_via_sysret 0.52% 0xfffffe000003201b + 20.95% __GI___libc_open + 6.44% __getdents64 + 4.10% __close
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░реАрдб () рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХрд╛ рдХреЗрд╡рд▓ 60% рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ 45% рд╕рдордп рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди seq_printf, seq_put_decimal_ull рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕реЗ рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдкреНрд░рд╢реНрди рдХреЛ рднреАрдЦ рджреЗрддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рда рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреА рдмрд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдФрд░ рд╢реАрд░реНрд╖ рдФрд░ рдкреАрдПрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдкрд╛рда рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХреНрдпреЛрдВ рдмрджрд▓рдирд╛ рд╣реИ?
рд╢рд╛рдпрдж рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рддрдирд╛ рддреЗрдЬрд╝ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рддреАрди рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЧрдП рд╣реИрдВред 2004 рдореЗрдВ рд╣рдордиреЗ рдиреЗрдЯрд▓рд┐рдВрдХ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
[0/2][ANNOUNCE] nproc: netlink access to /proc information (https://lwn.net/Articles/99600/) nproc is an attempt to address the current problems with /proc. In short, it exposes the same information via netlink (implemented for a small subset).
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдореБрджрд╛рдп рдиреЗ рдЗрд╕ рдХрд╛рдо рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реБрдЖ рдерд╛ред
[PATCH 0/15] task_diag: add a new interface to get information about processes (https://lwn.net/Articles/683371/)
рдХрд╛рд░реНрдп-рдбрд╛рдпрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ:
- рд▓реЗрди-рджреЗрди: рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА;
- рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдиреЗрдЯрд▓рд┐рдВрдХ (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ sock_diag: рдмрд╛рдЗрдирд░реА рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдХреЗ рд╕рдорд╛рди) рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ;
- рдПрдХ рдХреЙрд▓ рдореЗрдВ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
- рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдореВрд╣рди (рд╕рдореВрд╣ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдирд╣реАрдВ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдИ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ pstools, CRIU рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ, рдФрд░ рдбреЗрд╡рд┐рдб рдЕрд╣рд░реНрди рдПрдХреАрдХреГрдд task_diag рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╛рд╕ рд╕рдореБрджрд╛рдп рдХреЛ task_diag рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рдЧрдИ рд╣реИред рдЪрд░реНрдЪрд╛ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдХрд░реНрдиреЗрд▓ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд╣рди рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред рдиреЗрдЯрд▓рд┐рдВрдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдиреЗрдЯрд▓рд┐рдВрдХ рдЗрдВрдЬрди рдХреЗ рдХреЛрдб рдореЗрдВ рдЕрдирд╕реБрд▓рдЭреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдиреЗрдЯрд▓рд┐рдВрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддрдм рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХреЗ рдЕрдВрджрд░ рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╕ рдЙрддреНрддрд░ рдкрдврд╝рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рд░реЛрдзреА рдереЗред рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рддрдм рддрдХ рдкрд╕рдВрдж рдЖрдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдорд┐рд▓ рди рдЬрд╛рдПред
рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдЯрд╛рд╕реНрдХ_рдбреИрдЧ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЯрд╛рд╕реНрдХ_рдбреИрдЧ рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
$ ./task_diag_all one -c -p $$ pid 2305 tgid 2305 ppid 2299 sid 2305 pgid 2305 comm bash uid: 1000 1000 1000 1000 gid: 1000 1000 1000 1000 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000003fffffffff
рдФрд░ рдЕрдм рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рдд, рд╣рдордиреЗ рдЬрдм рд╣рдордиреЗ / proc / pid / рд╕реНрдЯреЗрдЯрд╕ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реА рд╣реИ, рддреЛ рд╣рдордиреЗ рд╡рд╣реА рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╣рдордиреЗ procfs рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛:
$ time ./task_diag_all all -c real 0m0.048s user 0m0.001s sys 0m0.046s
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ 0.05 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред рдФрд░ procfs рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ 0.177 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред
Task_diag рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдЖрдЙрдЯрдкреБрдЯ:
- 82.24% 0.00% task_diag_all [kernel.vmlinux] [k] entry_SYSCALL_64_fastpath - entry_SYSCALL_64_fastpath - 81.84% sys_read vfs_read __vfs_read proc_reg_read task_diag_read - taskdiag_dumpit + 33.84% next_tgid 13.06% __task_pid_nr_ns + 6.63% ptrace_may_access + 5.68% from_kuid_munged - 4.19% __get_task_comm 2.90% strncpy 1.29% _raw_spin_lock 3.03% __nla_reserve 1.73% nla_reserve + 1.30% skb_copy_datagram_iter + 1.21% from_kgid_munged 1.12% strncpy
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВред
рдЖрдЗрдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддреЗ рд╕рдордп рдкрд░рдлреИрдХреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ:
$ perf trace -s ./task_diag_all all -c -q Summary of events: task_diag_all (54326), 185 events, 95.4% syscall calls total min avg max stddev (msec) (msec) (msec) (msec) (%)
Procfs рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 150,000 рд╕реЗ рдЕрдзрд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ task_diag рдХреЗ рд▓рд┐рдП - 50 рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХред
рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрд╕реЗрд╕ рдЯреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкрд╛рдЗрдб, рдЙрд╕рдХреЗ рдЕрднрд┐рднрд╛рд╡рдХ рдХреА рдкреАрдбрд╛, рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдкрдиреЗ рдЖрдк рдХреЛ рддрд░реНрдХ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЯрд╛рд╕реНрдХ_рдбреИрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ:
$ time ./task_diag_all all --cmdline -q real 0m0.096s user 0m0.006s sys 0m0.090s
рдореВрд▓ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП / proc // рд╕реНрдерд┐рддрд┐ рдФрд░ / proc // cmdline рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛:
$ time ./task_proc_all status tasks: 50278 real 0m0.463s user 0m0.030s sys 0m0.427s
$ time ./task_proc_all cmdline tasks: 50281 real 0m0.270s user 0m0.028s sys 0m0.237s
рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЯрд╛рд╕реНрдХ_рдбреИрдЧ, рд╕реИрдХреЗрдВрдбреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 7 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ (0.27 + 0.46 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 0.096)ред рдЖрдорддреМрд░ рдкрд░, рдХрдИ рдкреНрд░рддрд┐рд╢рдд рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЧрддрд┐ рд▓рдЧрднрдЧ рдПрдХ рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рд╕реЗ рдмрдврд╝реА рд╣реИред
рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдХрд░реНрдиреЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рднреА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдореЗрдореЛрд░реА рд╕рдмрд╕рд┐рд╕реНрдЯрдо рднрд╛рд░реА рд▓реЛрдб рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИред Procfs рдФрд░ task_diag рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
$ perf trace --event 'kmem:*alloc*' ./task_proc_all status 2>&1 | grep kmem | wc -l 58184 $ perf trace --event 'kmem:*alloc*' ./task_diag_all all -q 2>&1 | grep kmem | wc -l 188
рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛:
$ perf trace --event 'kmem:*alloc*' true 2>&1 | wc -l 94
Procfs, task_diag рд╕реЗ 600 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдм рдореЗрдореЛрд░реА рд▓реЛрдб рднрд╛рд░реА рд╣реЛрддрд╛ рд╣реИ, рддреЛ proc рдЗрддрдиреА рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХрд░реНрдиреЗрд▓ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЗ procfs рд░рд╛рдЬреНрдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
рдбреЗрд╡рд┐рдб рдЕрд╣рд░реНрди, рдПрдВрдбреА рд▓реБрддреЛрдорд┐рд░рд╕реНрдХреА, рд╕реНрдЯреАрдлрди рд╣реЗрдорд┐рдВрдЧ, рдУрд▓реЗрдЧ рдиреЗрд╕реНрдЯрд░реЛрд╡, рдбрдмреНрд▓реНрдпреВред рдЯреНрд░реЗрд╡рд░ рдХрд┐рдВрдЧ, рдЕрд░рдВрдб рдмрд░реНрдЧрдореИрди, рдПрд░рд┐рдХ рдбрдмреНрд▓реНрдпреВ рдмрд╛рдЗрдбрд░рдореИрди рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЯрд╛рд╕реНрдХ_рдбреИрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реБрдзрд╛рд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП cromer , k001 рдФрд░ рд╕реНрдЯреИрдирд┐рд╕реНрд▓рд╛рд╡ рдХрд┐рдВрд╕рдмрд░реНрд╕рдХреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред
рд╕рдВрджрд░реНрдн