Skip to content
  • Arnaldo Carvalho de Melo's avatar
    perf trace: Support multiple "vfs_getname" probes · a4fc33cf
    Arnaldo Carvalho de Melo authored
    [ Upstream commit 6ab3bc24
    
     ]
    
    With a suitably defined "probe:vfs_getname" probe, 'perf trace' can
    "beautify" its output, so syscalls like open() or openat() can print the
    "filename" argument instead of just its hex address, like:
    
      $ perf trace -e open -- touch /dev/null
      [...]
           0.590 ( 0.014 ms): touch/18063 open(filename: /dev/null, flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3
      [...]
    
    The output without such beautifier looks like:
    
         0.529 ( 0.011 ms): touch/18075 open(filename: 0xc78cf288, flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3
    
    However, when the vfs_getname probe expands to multiple probes and it is
    not the first one that is hit, the beautifier fails, as following:
    
         0.326 ( 0.010 ms): touch/18072 open(filename: , flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3
    
    Fix it by hooking into all the expanded probes (inlines), now, for instance:
    
      [root@quaco ~]# perf probe -l
        probe:vfs_getname    (on getname_flags:73@fs/namei.c with pathname)
        probe:vfs_getname_1  (on getname_flags:73@fs/namei.c with pathname)
      [root@quaco ~]# perf trace -e open* sleep 1
           0.010 ( 0.005 ms): sleep/5588 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: RDONLY|CLOEXEC)   = 3
           0.029 ( 0.006 ms): sleep/5588 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: RDONLY|CLOEXEC)   = 3
           0.194 ( 0.008 ms): sleep/5588 openat(dfd: CWD, filename: /usr/lib/locale/locale-archive, flags: RDONLY|CLOEXEC) = 3
      [root@quaco ~]#
    
    Works, further verified with:
    
      [root@quaco ~]# perf test vfs
      65: Use vfs_getname probe to get syscall args filenames   : Ok
      66: Add vfs_getname probe to get syscall args filenames   : Ok
      67: Check open filename arg using perf trace + vfs_getname: Ok
      [root@quaco ~]#
    
    Reported-by: default avatarMichael Petlan <mpetlan@redhat.com>
    Tested-by: default avatarMichael Petlan <mpetlan@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: https://lkml.kernel.org/n/tip-mv8kolk17xla1smvmp3qabv1@git.kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    a4fc33cf