• Namhyung Kim's avatar
    perf tools: Skip PERF_RECORD_MMAP event synthesis for kernel threads · c1b90795
    Namhyung Kim authored
    To synthesize information to resolve sample IPs, it needs to scan task
    and mmap info from the /proc filesystem.  For each process, it opens
    (and reads) status and maps file respectively.  But as kernel threads
    don't have memory maps so we can skip the maps file.
    
    To find kernel threads, check "VmPeak:" line in /proc/<PID>/status file.
    It's about the peak virtual memory usage so only user-level tasks have
    that.  Note that it's possible to miss the line due to partial reads.
    So we should double-check if it's a really kernel thread when there's no
    VmPeak line.
    
    Thus check "Threads:" line (which follows the VmPeak line whether or not
    it exists) to be sure it's read enough data - just in case of deeply
    nested pid namespaces or large number of supplementary groups are
    involved.
    
    This is for user process:
    
      $ head -40 /proc/1/status
      Name:	systemd
      Umask:	0000
      State:	S (sleeping)
      Tgid:	1
      Ngid:	0
      Pid:	1
      PPid:	0
      TracerPid:	0
      Uid:	0	0	0	0
      Gid:	0	0	0	0
      FDSize:	256
      Groups:
      NStgid:	1
      NSpid:	1
      NSpgid:	1
      NSsid:	1
      VmPeak:	  234192 kB           <-- here
      VmSize:	  169964 kB
      VmLck:	       0 kB
      VmPin:	       0 kB
      VmHWM:	   29528 kB
      VmRSS:	    6104 kB
      RssAnon:	    2756 kB
      RssFile:	    3348 kB
      RssShmem:	       0 kB
      VmData:	   19776 kB
      VmStk:	    1036 kB
      VmExe:	     784 kB
      VmLib:	    9532 kB
      VmPTE:	     116 kB
      VmSwap:	    2400 kB
      HugetlbPages:	       0 kB
      CoreDumping:	0
      THP_enabled:	1
      Threads:	1                     <-- and here
      SigQ:	1/62808
      SigPnd:	0000000000000000
      ShdPnd:	0000000000000000
      SigBlk:	7be3c0fe28014a03
      SigIgn:	0000000000001000
    
    And this is for kernel thread:
    
      $ head -20 /proc/2/status
      Name:	kthreadd
      Umask:	0000
      State:	S (sleeping)
      Tgid:	2
      Ngid:	0
      Pid:	2
      PPid:	0
      TracerPid:	0
      Uid:	0	0	0	0
      Gid:	0	0	0	0
      FDSize:	64
      Groups:
      NStgid:	2
      NSpid:	2
      NSpgid:	0
      NSsid:	0
      Threads:	1                     <-- here
      SigQ:	1/62808
      SigPnd:	0000000000000000
      ShdPnd:	0000000000000000
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: https://lore.kernel.org/r/20210202090118.2008551-3-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    c1b90795
synthetic-events.c 51.6 KB