1. 30 Aug, 2018 40 commits
    • Jiri Olsa's avatar
      perf stat: Move STAT_RECORD out of perf_evlist__print_counters() · 0174820a
      Jiri Olsa authored
      It's stat related and should stay in the 'perf stat' command.  The
      perf_evlist__print_counters function will be moved out in the following
      patches.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-17-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0174820a
    • Jiri Olsa's avatar
      perf stat: Introduce perf_evlist__print_counters() · a5a9eac1
      Jiri Olsa authored
      To be in charge of printing out the stat output. It will be moved out of
      the 'perf stat' command in the following patches.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-16-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a5a9eac1
    • Jiri Olsa's avatar
      perf stat: Move perf_stat_synthesize_config() to stat.c · 0a4e64d3
      Jiri Olsa authored
      So that it can be used globally.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-15-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0a4e64d3
    • Jiri Olsa's avatar
      perf stat: Add 'perf_event__handler_t' argument to perf_stat_synthesize_config() · c2c247f2
      Jiri Olsa authored
      So that it's completely independent and can be used outside the 'perf stat' command.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-14-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c2c247f2
    • Jiri Olsa's avatar
      perf stat: Add 'struct perf_evlist' argument to perf_stat_synthesize_config() · 1c21e989
      Jiri Olsa authored
      Get rid of the 'evsel_list' global variable dependency, here in
      perf_stat_synthesize_config() we are adding the 'evlist' arg.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-13-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1c21e989
    • Jiri Olsa's avatar
      perf stat: Add 'struct perf_tool' argument to perf_stat_synthesize_config() · 1821f4eb
      Jiri Olsa authored
      So that we can use the function outside the 'perf stat' command with standard
      synthesize functions, that take 'struct perf_tool *' argument.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-12-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1821f4eb
    • Jiri Olsa's avatar
      perf stat: Add 'struct perf_stat_config' argument to perf_stat_synthesize_config() · 73d586c3
      Jiri Olsa authored
      Add a 'struct perf_stat_config' argument to perf_stat_synthesize_config(),
      so we could synthesize arbitrary config.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-11-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      73d586c3
    • Jiri Olsa's avatar
      perf stat: Rename 'is_pipe' argument to 'attrs' in perf_stat_synthesize_config() · 491073a6
      Jiri Olsa authored
      The attrs name makes more sense.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-10-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      491073a6
    • Jiri Olsa's avatar
      perf stat: Move create_perf_stat_counter() to stat.c · d09cefd2
      Jiri Olsa authored
      Move create_perf_stat_counter() to the 'stat' class, so that we can use
      it globally.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-9-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d09cefd2
    • Jiri Olsa's avatar
      perf evsel: Introduce perf_evsel__store_ids() · 650d6220
      Jiri Olsa authored
      Add perf_evsel__store_ids() from stat's store_counter_ids() code to the
      evsel class, so that it can be used globally.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-8-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      650d6220
    • Jiri Olsa's avatar
      perf tools: Switch 'session' argument to 'evlist' in perf_event__synthesize_attrs() · 318ec184
      Jiri Olsa authored
      To be able to pass in other than session's evlist.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-7-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      318ec184
    • Jiri Olsa's avatar
      perf stat: Add 'identifier' flag to 'struct perf_stat_config' · 7d9ad16a
      Jiri Olsa authored
      Add 'identifier' flag to 'struct perf_stat_config' to carry the info
      whether to use PERF_SAMPLE_IDENTIFIER for events.
      
      This makes create_perf_stat_counter() independent.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-6-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7d9ad16a
    • Jiri Olsa's avatar
      perf stat: Use local config arg for scale in create_perf_stat_counter() · 35386233
      Jiri Olsa authored
      Use the local 'scale' member in the 'struct perf_stat_config' argument
      instead of the global 'stat_config' variable, to make the function
      independent.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-5-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      35386233
    • Jiri Olsa's avatar
      perf stat: Move 'no_inherit' to 'struct perf_stat_config' · 5698f26b
      Jiri Olsa authored
      Move the static 'no_inherit' variable to 'struct perf_stat_config', so
      it can be passed around and used outside the 'perf stat' command.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-4-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5698f26b
    • Jiri Olsa's avatar
      perf stat: Move 'initial_delay' to 'struct perf_stat_config' · 728c0ee0
      Jiri Olsa authored
      Move the static 'initial_delay' variable to 'struct perf_stat_config',
      so it can be passed around and used outside the 'perf stat' command.
      
      Add 'struct perf_stat_config' argument to create_perf_stat_counter() and
      use its 'initial_delay' member instead of the static one.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-3-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      728c0ee0
    • Jiri Olsa's avatar
      perf stat: Use evsel->threads in create_perf_stat_counter() · d50ed0ce
      Jiri Olsa authored
      Get rid of the evsel_list dependency, here we can use the evsel->threads
      copy of the struct thread_map.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180830063252.23729-2-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d50ed0ce
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Show comm and tid for tracepoint events · c4191e55
      Arnaldo Carvalho de Melo authored
      So that all events have that info, improving reading by having
      information better aligned, etc.
      
      Before:
      
        # echo 1 > /proc/sys/vm/drop_caches
        # perf trace -e block:*,ext4:*,tools/perf/examples/bpf/augmented_syscalls.c,close cat tools/perf/examples/bpf/hello.c
             0.000 (         ): #include <stdio.h>
      
        int syscall_enter(openat)(void *args)
        {
        	puts("Hello, world\n");
        	return 0;
        }
      
        license(GPL);
        cat/2731 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
             0.025 (         ): syscalls:sys_exit_openat:0x3
             0.063 ( 0.022 ms): cat/2731 close(fd: 3) = 0
             0.110 (         ): cat/2731 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC)
             0.123 (         ): syscalls:sys_exit_openat:0x3
             0.243 ( 0.008 ms): cat/2731 close(fd: 3) = 0
             0.485 (         ): cat/2731 open(filename: /usr/lib/locale/locale-archive, flags: CLOEXEC)
             0.500 (         ): syscalls:sys_exit_open:0x3
             0.531 ( 0.017 ms): cat/2731 close(fd: 3) = 0
             0.587 (         ): cat/2731 openat(dfd: CWD, filename: tools/perf/examples/bpf/hello.c)
             0.601 (         ): syscalls:sys_exit_openat:0x3
             0.631 (         ): ext4:ext4_es_lookup_extent_enter:dev 253,2 ino 1311399 lblk 0
             0.639 (         ): ext4:ext4_es_lookup_extent_exit:dev 253,2 ino 1311399 found 1 [0/1) 5276651 W0x10
             0.654 (         ): block:block_bio_queue:253,2 R 42213208 + 8 [cat]
             0.663 (         ): block:block_bio_remap:8,0 R 58206040 + 8 <- (253,2) 42213208
             0.671 (         ): block:block_bio_remap:8,0 R 175570776 + 8 <- (8,6) 58206040
             0.678 (         ): block:block_bio_queue:8,0 R 175570776 + 8 [cat]
             0.692 (         ): block:block_getrq:8,0 R 175570776 + 8 [cat]
             0.700 (         ): block:block_plug:[cat]
             0.708 (         ): block:block_rq_insert:8,0 R 4096 () 175570776 + 8 [cat]
             0.713 (         ): block:block_unplug:[cat] 1
             0.716 (         ): block:block_rq_issue:8,0 R 4096 () 175570776 + 8 [cat]
             0.949 ( 0.007 ms): cat/2731 close(fd: 3) = 0
             0.969 ( 0.006 ms): cat/2731 close(fd: 1) = 0
             0.982 ( 0.006 ms): cat/2731 close(fd: 2) = 0
        #
      
      After:
      
        # echo 1 > /proc/sys/vm/drop_caches
        # perf trace -e block:*,ext4:*,tools/perf/examples/bpf/augmented_syscalls.c,close cat tools/perf/examples/bpf/hello.c
             0.000 (         ): cat/1380 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)#include <stdio.h>
      
        int syscall_enter(openat)(void *args)
        {
        	puts("Hello, world\n");
        	return 0;
        }
      
        license(GPL);
      
             0.024 (         ): cat/1380 syscalls:sys_exit_openat:0x3
             0.063 ( 0.024 ms): cat/1380 close(fd: 3) = 0
             0.114 (         ): cat/1380 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC)
             0.127 (         ): cat/1380 syscalls:sys_exit_openat:0x3
             0.247 ( 0.009 ms): cat/1380 close(fd: 3) = 0
             0.484 (         ): cat/1380 open(filename: /usr/lib/locale/locale-archive, flags: CLOEXEC)
             0.499 (         ): cat/1380 syscalls:sys_exit_open:0x3
             0.613 ( 0.010 ms): cat/1380 close(fd: 3) = 0
             0.662 (         ): cat/1380 openat(dfd: CWD, filename: tools/perf/examples/bpf/hello.c)
             0.678 (         ): cat/1380 syscalls:sys_exit_openat:0x3
             0.712 (         ): cat/1380 ext4:ext4_es_lookup_extent_enter:dev 253,2 ino 1311399 lblk 0
             0.721 (         ): cat/1380 ext4:ext4_es_lookup_extent_exit:dev 253,2 ino 1311399 found 1 [0/1) 5276651 W0x10
             0.734 (         ): cat/1380 block:block_bio_queue:253,2 R 42213208 + 8 [cat]
             0.745 (         ): cat/1380 block:block_bio_remap:8,0 R 58206040 + 8 <- (253,2) 42213208
             0.754 (         ): cat/1380 block:block_bio_remap:8,0 R 175570776 + 8 <- (8,6) 58206040
             0.761 (         ): cat/1380 block:block_bio_queue:8,0 R 175570776 + 8 [cat]
             0.780 (         ): cat/1380 block:block_getrq:8,0 R 175570776 + 8 [cat]
             0.791 (         ): cat/1380 block:block_plug:[cat]
             0.802 (         ): cat/1380 block:block_rq_insert:8,0 R 4096 () 175570776 + 8 [cat]
             0.806 (         ): cat/1380 block:block_unplug:[cat] 1
             0.810 (         ): cat/1380 block:block_rq_issue:8,0 R 4096 () 175570776 + 8 [cat]
             1.005 ( 0.011 ms): cat/1380 close(fd: 3) = 0
             1.031 ( 0.008 ms): cat/1380 close(fd: 1) = 0
             1.048 ( 0.008 ms): cat/1380 close(fd: 2) = 0
        #
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-us1mwsupxffs4jlm3uqm5dvj@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c4191e55
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Hook into syscalls:sys_exit_SYSCALL too · f5b076dc
      Arnaldo Carvalho de Melo authored
      Hook the pair enter/exit when using augmented_{filename,sockaddr,etc}_syscall(),
      this way we'll be able to see what entries are in the ELF sections generated
      from augmented_syscalls.c and filter them out from the main raw_syscalls:*
      tracepoints used by 'perf trace'.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-cyav42qj5yylolw4attcw99z@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f5b076dc
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Rename augmented_*_syscall__enter to just *_syscall · 4c8f0a72
      Arnaldo Carvalho de Melo authored
      As we'll also hook into the syscalls:sys_exit_SYSCALL for which there
      are enter hooks.
      
      This way we'll be able to iterate the ELF file for the eBPF program,
      find the syscalls that have hooks and filter them out from the general
      raw_syscalls:sys_{enter,exit} tracepoint for not-yet-augmented (the ones
      with pointer arguments not yet being attached to the usual syscalls
      tracepoint payload) and non augmentable syscalls (syscalls without
      pointer arguments).
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-cl1xyghwb1usp500354mv37h@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4c8f0a72
    • Arnaldo Carvalho de Melo's avatar
      perf augmented_syscalls: Update the header comments · 5e2d8a5a
      Arnaldo Carvalho de Melo authored
      Reflecting the fact that it now augments more than syscalls:sys_enter_SYSCALL
      tracepoints that have filename strings as args. Also mention how the
      extra data is handled by the by now modified 'perf trace' beautifiers,
      that will use special "augmented" beautifiers when extra data is found
      after the expected syscall enter/exit tracepoints.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-ybskanehmdilj5fs7080nz1g@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5e2d8a5a
    • Arnaldo Carvalho de Melo's avatar
      perf bpf: Add syscall_exit() helper · 664b6a95
      Arnaldo Carvalho de Melo authored
      So that we can hook to the syscalls:sys_exit_SYSCALL tracepoints in
      addition to the syscalls:sys_enter_SYSCALL we hook using the
      syscall_enter() helper.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-6qh8aph1jklyvdu7w89c0izc@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      664b6a95
    • Tzvetomir Stoyanov (VMware)'s avatar
      tools lib traceevent, perf tools: Split trace-seq related APIs in a separate header file · 266b851c
      Tzvetomir Stoyanov (VMware) authored
      In order to make libtraceevent into a proper library, all its APIs
      should be defined in corresponding header files.  This patch splits
      trace-seq related APIs in a separate header file: trace-seq.h
      Signed-off-by: default avatarTzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: http://lkml.kernel.org/r/20180828185038.2dcb2743@gandalf.local.homeSigned-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      266b851c
    • Thomas Richter's avatar
      perf report: Create auxiliary trace data files for s390 · 766e0618
      Thomas Richter authored
      Create auxiliary trace data log files when invoked with option
      --itrace=d as in:
      
        [root@s35lp76 perf] perf report -i perf.data.aux1 --stdio --itrace=d
      
      perf report creates several data files in the current directory named
      aux.smp.## where ## is a 2 digit hex number with leading zeros
      representing the CPU number this trace data was recorded from. The file
      contents is binary and contains the CPU-Measurement Sampling Data Blocks
      (SDBs).
      
      The directory to save the auxiliary trace buffer can be changed using
      the perf config file and command. Specify section 'auxtrace' keyword
      'dumpdir' and assign it a valid directory name. If the directory does
      not exist or has the wrong file type, the current directory is used.
      
        [root@p23lp27 perf]# perf config auxtrace.dumpdir=/tmp
        [root@p23lp27 perf]# perf config --user -l auxtrace.dumpdir=/tmp
        [root@p23lp27 perf]# perf report ...
        [root@p23lp27 perf]# ll /tmp/aux.smp.00
        -rw-r--r-- 1 root root 204800 Aug  2 13:48 /tmp/aux.smp.00
        [root@p23lp27 perf]#
      Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
      Reviewed-by: default avatarHendrik Brueckner <brueckner@linux.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Link: http://lkml.kernel.org/r/20180809045650.89197-1-tmricht@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      766e0618
    • Arnaldo Carvalho de Melo's avatar
      perf trace beauty: Reorganize 'struct sockaddr *' beautifier · b043cb52
      Arnaldo Carvalho de Melo authored
      Use an array to multiplex by sockaddr->sa_family, this way adding new
      families gets a bit easier and tidy.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-v3s85ra659tc40g1s1xaqoun@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b043cb52
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Augment sendto's 'addr' arg · 6ebb6862
      Arnaldo Carvalho de Melo authored
      Its a 'struct sockaddr' pointer, augment it with the same beautifier as
      for 'connect' and 'bind', that all receive from userspace that pointer.
      
      Doing it in the other direction remains to be done, hooking at the
      syscalls:sys_exit_{accept4?,recvmsg} tracepoints somehow.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-k2eu68lsphnm2fthc32gq76c@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6ebb6862
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Augment bind's 'myaddr' sockaddr arg · 02ef2884
      Arnaldo Carvalho de Melo authored
      One more, to reuse the augmented_sockaddr_syscall_enter() macro
      introduced from the augmentation of connect's sockaddr arg, also to get
      a subset of the struct arg augmentations done using the manual method,
      before switching to something automatic, using tracefs's format file or,
      even better, BTF containing the syscall args structs.
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c
           0.000 sshd/11479 bind(fd: 3<socket:[170336]>, umyaddr: { .family: NETLINK }, addrlen: 12)
           1.752 sshd/11479 bind(fd: 3<socket:[170336]>, umyaddr: { .family: INET, port: 22, addr: 0.0.0.0 }, addrlen: 16)
           1.924 sshd/11479 bind(fd: 4<socket:[170338]>, umyaddr: { .family: INET6, port: 22, addr: :: }, addrlen: 28)
        ^C#
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-a2drqpahpmc7uwb3n3gj2plu@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      02ef2884
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Add augmented_sockaddr_syscall_enter() · 24a6c2cd
      Arnaldo Carvalho de Melo authored
      From the one for 'connect', so that we can use it with sendto and others
      that receive a 'struct sockaddr'.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-8bdqv1q0ndcjl1nqns5r5je2@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      24a6c2cd
    • Arnaldo Carvalho de Melo's avatar
      perf trace augmented_syscalls: Augment connect's 'sockaddr' arg · d5a7e661
      Arnaldo Carvalho de Melo authored
      As the first example of augmenting something other than a 'filename',
      augment the 'struct sockaddr' argument for the 'connect' syscall:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c ssh -6 fedorapeople.org
           0.000 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           0.042 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           1.329 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           1.362 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           1.458 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           1.478 ssh/29669 connect(fd: 3, uservaddr: { .family: LOCAL, path: /var/run/nscd/socket }, addrlen: 110)
           1.683 ssh/29669 connect(fd: 3<socket:[125942]>, uservaddr: { .family: INET, port: 53, addr: 192.168.43.1 }, addrlen: 16)
           4.710 ssh/29669 connect(fd: 3<socket:[125942]>, uservaddr: { .family: INET6, port: 22, addr: 2610:28:3090:3001:5054:ff:fea7:9474 }, addrlen: 28)
        root@fedorapeople.org: Permission denied (publickey).
        #
      
      This is still just augmenting the syscalls:sys_enter_connect part, later
      we'll wire this up to augment the enter+exit combo, like in the
      tradicional 'perf trace' and 'strace' outputs.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-s7l541cbiqb22ifio6z7dpf6@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d5a7e661
    • Arnaldo Carvalho de Melo's avatar
      perf bpf: Add linux/socket.h to the headers accessible to bpf proggies · 403f833d
      Arnaldo Carvalho de Melo authored
      So that we don't have to define sockaddr_storage in the
      augmented_syscalls.c bpf example when hooking into syscalls needing it,
      idea is to mimic the system headers. Eventually we probably need to have
      sys/socket.h, etc.  Start by having at least linux/socket.h.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-yhzarcvsjue8pgpvkjhqgioc@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      403f833d
    • Arnaldo Carvalho de Melo's avatar
      perf bpf: Give precedence to bpf header dir · d35b168c
      Arnaldo Carvalho de Melo authored
      I need to check the need for $KERNEL_INC_OPTIONS when building eBPF
      restricted C programs, for now just give precedence to
      $PERF_BPF_INC_OPTIONS so that we can get a linux/socket.h usable
      in eBPF programs.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-5z7qw529sdebrn9y1xxqw9hf@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d35b168c
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Add a etcsnoop.c augmented syscalls eBPF utility · 9ab5aade
      Arnaldo Carvalho de Melo authored
      We need to put common stuff into a separate header in tools/perf/include/bpf/
      for these augmented syscalls, but I couldn't resist adding a etcsnoop.c tool,
      combining augmented syscalls + filtering, that in the future will be passed
      from 'perf trace''s command line, to use in building the eBPF program to do
      that specific filtering at the source, inside the kernel:
      
        Running system wide: (hope there isn't any embarassing stuff here...  ;-) )
      
        # perf trace -e tools/perf/examples/bpf/etcsnoop.c
             0.000 sed/21878 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
          1741.473 cat/21883 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
          1741.892 cat/21883 openat(dfd: CWD, filename: /etc/passwd)
          1748.948 sed/21886 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
          1777.136 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1777.738 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.158 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.528 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.595 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.901 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.939 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.966 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1778.992 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.019 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.045 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.071 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.095 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.121 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.148 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.175 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.202 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.229 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.254 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.279 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.309 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.336 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.363 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.388 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.414 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.442 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.470 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.500 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.529 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.557 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.586 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.617 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.648 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.679 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.706 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.739 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.769 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.798 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.823 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.844 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.862 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.880 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.911 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.942 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1779.972 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1780.004 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
          1780.035 gvfs-udisks2-v/2302 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
         13059.154 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13060.739 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13061.990 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13063.177 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13064.265 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13065.483 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13067.383 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13068.902 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13069.922 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13070.915 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13072.612 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13074.816 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13077.343 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13078.731 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13559.064 DNS Res~er #22/21054 open(filename: /etc/hosts, flags: CLOEXEC)
         22419.522 sed/21896 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         24473.313 git/21900 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         24491.988 less/21901 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         24493.793 git/21901 openat(dfd: CWD, filename: /etc/sysless)
         24565.772 sed/21924 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         25878.752 git/21928 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         26075.666 git/21928 open(filename: /etc/localtime, flags: CLOEXEC)
         26075.565 less/21929 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         26076.060 less/21929 openat(dfd: CWD, filename: /etc/sysless)
         26346.395 sed/21932 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         26483.583 sed/21938 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         26954.890 sed/21944 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         27016.165 gsd-color/1762 openat(dfd: CWD, filename: /etc/localtime)
         27016.414 gsd-color/1762 openat(dfd: CWD, filename: /etc/localtime)
         27712.313 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
         27712.616 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
         27829.035 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27829.368 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27829.584 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27829.800 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27830.107 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27830.521 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         27961.516 git/21948 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         27987.568 less/21949 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         27988.948 bash/21949 openat(dfd: CWD, filename: /etc/sysless)
         28043.536 sed/21972 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         28736.008 sed/21978 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         34882.664 git/21991 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         34882.664 sort/21990 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         34884.441 uniq/21992 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         35593.098 git/21997 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         35638.839 git/21997 openat(dfd: CWD, filename: /etc/gitattributes)
         35702.851 sed/22000 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         36076.039 sed/22006 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         37569.049 git/22014 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         37673.712 git/22014 open(filename: /etc/localtime, flags: CLOEXEC)
         37781.710 vim/22040 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         37783.667 git/22040 openat(dfd: CWD, filename: /etc/vimrc)
         37792.394 git/22040 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         37792.436 git/22040 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         37792.580 git/22040 open(filename: /etc/passwd, flags: CLOEXEC)
         43893.625 DNS Res~er #23/21365 open(filename: /etc/hosts, flags: CLOEXEC)
         48060.409 nm-dhcp-helper/22044 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48071.745 systemd/1 openat(dfd: CWD, filename: /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service, flags: CLOEXEC|NOFOLLOW|NOCTTY)
         48082.780 nm-dispatcher/22049 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48111.418 systemd/22049 open(filename: /etc/NetworkManager/dispatcher.d, flags: CLOEXEC|DIRECTORY|NONBLOCK)
         48111.904 systemd/22049 open(filename: /etc/localtime, flags: CLOEXEC)
         48118.357 00-netreport/22052 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48119.668 systemd/22052 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48119.762 systemd/22052 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48119.887 systemd/22052 open(filename: /etc/passwd, flags: CLOEXEC)
         48120.025 systemd/22052 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/00-netreport)
         48124.144 hostname/22054 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48125.492 systemd/22052 openat(dfd: CWD, filename: /etc/init.d/functions)
         48127.253 systemd/22052 openat(dfd: CWD, filename: /etc/profile.d/lang.sh)
         48127.388 systemd/22052 openat(dfd: CWD, filename: /etc/locale.conf)
         48137.749 cat/22056 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48143.519 04-iscsi/22058 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48144.438 04-iscsi/22058 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48144.478 04-iscsi/22058 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48144.577 04-iscsi/22058 open(filename: /etc/passwd, flags: CLOEXEC)
         48144.819 04-iscsi/22058 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/04-iscsi)
         48145.620 10-ifcfg-rh-ro/22059 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48146.169 systemd/22059 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48146.207 systemd/22059 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48146.287 systemd/22059 open(filename: /etc/passwd, flags: CLOEXEC)
         48146.387 systemd/22059 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/10-ifcfg-rh-routes.sh)
         48147.215 11-dhclient/22060 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48147.787 11-dhclient/22060 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48147.813 11-dhclient/22060 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48147.929 11-dhclient/22060 open(filename: /etc/passwd, flags: CLOEXEC)
         48148.016 11-dhclient/22060 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/11-dhclient)
         48148.906 grep/22063 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48151.165 11-dhclient/22060 openat(dfd: CWD, filename: /etc/sysconfig/network)
         48151.560 11-dhclient/22060 open(filename: /etc/dhcp/dhclient.d/, flags: CLOEXEC|DIRECTORY|NONBLOCK)
         48151.704 11-dhclient/22060 openat(dfd: CWD, filename: /etc/dhcp/dhclient.d/chrony.sh)
         48153.593 20-chrony/22065 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48154.695 20-chrony/22065 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48154.756 20-chrony/22065 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48154.914 20-chrony/22065 open(filename: /etc/passwd, flags: CLOEXEC)
         48155.067 20-chrony/22065 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/20-chrony)
         48156.962 25-polipo/22066 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48157.824 systemd/22066 open(filename: /etc/nsswitch.conf, flags: CLOEXEC)
         48157.866 systemd/22066 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
         48157.981 systemd/22066 open(filename: /etc/passwd, flags: CLOEXEC)
         48158.090 systemd/22066 openat(dfd: CWD, filename: /etc/NetworkManager/dispatcher.d/25-polipo)
         48533.616 gsd-housekeepi/2412 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC)
         87122.021 gsd-color/1762 openat(dfd: CWD, filename: /etc/localtime)
         87122.146 gsd-color/1762 openat(dfd: CWD, filename: /etc/localtime)
         87825.582 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
         87825.844 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
         87829.524 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         87830.531 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         87831.288 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         87832.011 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         87832.672 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         87833.276 gnome-shell/2125 openat(dfd: CWD, filename: /etc/localtime)
         ^C#
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-0o770jvdcy04ee6vhv6v471m@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9ab5aade
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Augment 'newstat' (aka 'stat') filename ptr · 16cc6359
      Arnaldo Carvalho de Melo authored
      This one will need some more work, that 'statbuf' pointer requires a
      beautifier in 'perf trace'.
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c
           0.000 weechat/3596 stat(filename: /etc/localtime, statbuf: 0x7ffd87d11f60)
           0.186 perf/29818 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_stat/format)
           0.279 perf/29818 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_newstat/for)
           0.670 perf/29818 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/form)
          60.805 DNS Res~er #20/21308 stat(filename: /etc/resolv.conf, statbuf: 0x7ffa733fe4a0)
          60.836 DNS Res~er #20/21308 open(filename: /etc/hosts, flags: CLOEXEC)
          60.931 perf/29818 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_open/format)
         607.070 DNS Res~er #21/29812 stat(filename: /etc/resolv.conf, statbuf: 0x7ffa5e1fe3f0)
         607.098 DNS Res~er #21/29812 open(filename: /etc/hosts, flags: CLOEXEC)
         999.336 weechat/3596 stat(filename: /etc/localtime, statbuf: 0x7ffd87d11f60)
      ^C#
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-4lhabe7m4uzo76lnqpyfmnvk@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      16cc6359
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Introduce augmented_filename_syscall_enter() declarator · f6618ce6
      Arnaldo Carvalho de Melo authored
      Helping with tons of boilerplate for syscalls that only want to augment
      a filename. Now supporting one such syscall is just a matter of
      declaring its arguments struct + using:
      
        augmented_filename_syscall_enter(openat);
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-ls7ojdseu8fxw7fvj77ejpao@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f6618ce6
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Augment inotify_add_watch pathname syscall arg · 9779fc02
      Arnaldo Carvalho de Melo authored
      Again, just changing tools/perf/examples/bpf/augmented_syscalls.c, that
      is starting to have too much boilerplate, some macro will come to the
      rescue.
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c
           0.000 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /var/cache/app-info/yaml, mask: 16789454)
           0.023 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /var/lib/app-info/xmls, mask: 16789454)
           0.028 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /var/lib/app-info/yaml, mask: 16789454)
           0.032 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /usr/share/app-info/yaml, mask: 16789454)
           0.039 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /usr/local/share/app-info/xmls, mask: 16789454)
           0.045 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /usr/local/share/app-info/yaml, mask: 16789454)
           0.049 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /home/acme/.local/share/app-info/yaml, mask: 16789454)
           0.056 gmain/2590 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: , mask: 16789454)
           0.010 gmain/2245 inotify_add_watch(fd: 7<anon_inode:inotify>, pathname: /home/acme/~, mask: 16789454)
           0.087 perf/20116 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_inotify_add)
           0.436 perf/20116 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/form)
          56.042 gmain/2791 inotify_add_watch(fd: 4<anon_inode:inotify>, pathname: /var/lib/fwupd/remotes.d/lvfs-testing, mask: 16789454)
         113.986 gmain/1721 inotify_add_watch(fd: 3<anon_inode:inotify>, pathname: /var/lib/gdm/~, mask: 16789454)
        3777.265 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
        3777.550 gsd-color/2408 openat(dfd: CWD, filename: /etc/localtime)
      ^C[root@jouet perf]#
      
      Still not combining raw_syscalls:sys_enter + raw_syscalls:sys_exit, to
      get it strace-like, but that probably will come very naturally with some
      more wiring up...
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-ol83juin2cht9vzquynec5hz@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9779fc02
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Augment the 'open' syscall 'filename' arg · daa1284a
      Arnaldo Carvalho de Melo authored
      As described in the previous cset, all we had to do was to touch the
      augmented_syscalls.c eBPF program, fire up 'perf trace' with that new
      eBPF script in system wide mode and wait for 'open' syscalls, in
      addition to 'openat' ones to see that it works:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c
             0.000 StreamT~s #200/16150 openat(dfd: CWD, filename: /home/acme/.mozilla/firefox/fqxhj76d.default/prefs.js, flags: CREAT|EXCL|TRUNC|WRONLY, mode: IRUSR|IWUSR)
             0.065 StreamT~s #200/16150 openat(dfd: CWD, filename: /home/acme/.mozilla/firefox/fqxhj76d.default/prefs-1.js, flags: CREAT|EXCL|TRUNC|WRONLY, mode: IRUSR|IWUSR)
             0.435 StreamT~s #200/16150 openat(dfd: CWD, filename: /home/acme/.mozilla/firefox/fqxhj76d.default/prefs-1.js, flags: CREAT|TRUNC|WRONLY, mode: IRUSR|IWUSR)
             1.875 perf/16772 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/form)
          1227.260 gnome-shell/1463 openat(dfd: CWD, filename: /proc/self/stat)
          1227.397 gnome-shell/2125 openat(dfd: CWD, filename: /proc/self/stat)
          7227.619 gnome-shell/1463 openat(dfd: CWD, filename: /proc/self/stat)
          7227.661 gnome-shell/2125 openat(dfd: CWD, filename: /proc/self/stat)
         10018.079 gnome-shell/1463 openat(dfd: CWD, filename: /proc/self/stat)
         10018.514 perf/16772 openat(dfd: CWD, filename: /proc/1237/status)
         10018.568 perf/16772 openat(dfd: CWD, filename: /proc/1237/status)
         10022.409 gnome-shell/2125 openat(dfd: CWD, filename: /proc/self/stat)
         10090.044 NetworkManager/1237 openat(dfd: CWD, filename: /proc/2125/stat)
         10090.351 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         10090.407 perf/16772 openat(dfd: CWD, filename: /sys/kernel/debug/tracing/events/syscalls/sys_enter_open/format)
         10091.763 NetworkManager/1237 openat(dfd: CWD, filename: /proc/2125/stat)
         10091.812 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         10092.807 NetworkManager/1237 openat(dfd: CWD, filename: /proc/2125/stat)
         10092.851 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         10094.650 NetworkManager/1237 openat(dfd: CWD, filename: /proc/1463/stat)
         10094.926 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         10096.010 NetworkManager/1237 openat(dfd: CWD, filename: /proc/1463/stat)
         10096.057 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         10097.056 NetworkManager/1237 openat(dfd: CWD, filename: /proc/1463/stat)
         10097.099 NetworkManager/1237 open(filename: /etc/passwd, flags: CLOEXEC)
         13228.345 gnome-shell/1463 openat(dfd: CWD, filename: /proc/self/stat)
         13232.734 gnome-shell/2125 openat(dfd: CWD, filename: /proc/self/stat)
         15198.956 lighttpd/16748 open(filename: /proc/loadavg, mode: ISGID|IXOTH)
        ^C#
      
      It even catches 'perf' itself looking at the sys_enter_open and
      sys_enter_openat tracefs format dictionaries when it first finds them in
      the trace... :-)
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-upmogc57uatljr6el6u8537l@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      daa1284a
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Use the augmented filename, expanding syscall enter pointers · 75d1e306
      Arnaldo Carvalho de Melo authored
      This is the final touch in showing how a syscall argument beautifier can
      access the augmented args put in place by the
      tools/perf/examples/bpf/augmented_syscalls.c eBPF script, right after
      the regular raw syscall args, i.e. the up to 6 long integer values in
      the syscall interface.
      
      With this we are able to show the 'openat' syscall arg, now with up to
      64 bytes, but in time this will be configurable, just like with the
      'strace -s strsize' argument, from 'strace''s man page:
      
        -s strsize  Specify the maximum string size to print (the default is 32).
      
      This actually is the maximum string to _collect_ and store in the ring
      buffer, not just print.
      
      Before:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): cat/9658 openat(dfd: CWD, filename: 0x6626eda8, flags: CLOEXEC)
           0.017 ( 0.007 ms): cat/9658 openat(dfd: CWD, filename: 0x6626eda8, flags: CLOEXEC) = 3
           0.049 (         ): cat/9658 openat(dfd: CWD, filename: 0x66476ce0, flags: CLOEXEC)
           0.051 ( 0.007 ms): cat/9658 openat(dfd: CWD, filename: 0x66476ce0, flags: CLOEXEC) = 3
           0.377 (         ): cat/9658 openat(dfd: CWD, filename: 0x1e8f806b)
           0.379 ( 0.005 ms): cat/9658 openat(dfd: CWD, filename: 0x1e8f806b) = 3
        #
      
      After:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): cat/11966 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC)
           0.006 ( 0.006 ms): cat/11966 openat(dfd: CWD, filename: 0x4bfdcda8, flags: CLOEXEC) = 3
           0.034 (         ): cat/11966 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC)
           0.036 ( 0.008 ms): cat/11966 openat(dfd: CWD, filename: 0x4c1e4ce0, flags: CLOEXEC) = 3
           0.375 (         ): cat/11966 openat(dfd: CWD, filename: /etc/passwd)
           0.377 ( 0.005 ms): cat/11966 openat(dfd: CWD, filename: 0xe87906b) = 3
        #
      
      This cset should show all the aspects of establishing a protocol between
      an eBPF syscall arg augmenter program, tools/perf/examples/bpf/augmented_syscalls.c and
      a 'perf trace' beautifier, the one associated with all 'char *' point
      syscall args with names that can heuristically be associated with
      filenames.
      
      Now to wire up 'open' to show a second syscall using this scheme, all we
      have to do now is to change tools/perf/examples/bpf/augmented_syscalls.c,
      as 'perf trace' will notice that the perf_sample.raw_size is more than
      what is expected for a particular syscall payload as defined by its
      tracefs format file and will then use the augmented payload in the
      'filename' syscall arg beautifier.
      
      The same protocol will be used for structs such as 'struct sockaddr *',
      'struct pollfd', etc, with additions for handling arrays.
      
      This will all be done under the hood when 'perf trace' realizes the
      system has the necessary components, and also can be done by providing
      a precompiled augmented_syscalls.c eBPF ELF object.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-gj9kqb61wo7m3shtpzercbcr@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      75d1e306
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Show comm/tid for augmented_syscalls · c96f4edc
      Arnaldo Carvalho de Melo authored
      To get us a bit more like the sys_enter + sys_exit combo:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): openat(dfd: CWD, filename: 0x31b6dda8, flags: CLOEXEC)
           0.009 ( 0.009 ms): cat/3619 openat(dfd: CWD, filename: 0x31b6dda8, flags: CLOEXEC) = 3
           0.051 (         ): openat(dfd: CWD, filename: 0x31d75ce0, flags: CLOEXEC)
           0.054 ( 0.010 ms): cat/3619 openat(dfd: CWD, filename: 0x31d75ce0, flags: CLOEXEC) = 3
           0.539 (         ): openat(dfd: CWD, filename: 0xca71506b)
           0.543 ( 0.115 ms): cat/3619 openat(dfd: CWD, filename: 0xca71506b) = 3
        #
      
      After:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): cat/4919 openat(dfd: CWD, filename: 0xc8358da8, flags: CLOEXEC)
           0.007 ( 0.005 ms): cat/4919 openat(dfd: CWD, filename: 0xc8358da8, flags: CLOEXEC) = 3
           0.032 (         ): cat/4919 openat(dfd: CWD, filename: 0xc8560ce0, flags: CLOEXEC)
           0.033 ( 0.006 ms): cat/4919 openat(dfd: CWD, filename: 0xc8560ce0, flags: CLOEXEC) = 3
           0.301 (         ): cat/4919 openat(dfd: CWD, filename: 0x91fa306b)
           0.304 ( 0.004 ms): cat/4919 openat(dfd: CWD, filename: 0x91fa306b) = 3
        #
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-6w8ytyo5y655a1hsyfpfily6@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c96f4edc
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Extract the comm/tid printing for syscall enter · 6dcbd212
      Arnaldo Carvalho de Melo authored
      Will be used with augmented syscalls, where we haven't transitioned
      completely to combining sys_enter_FOO with sys_exit_FOO, so we'll go
      as far as having it similar to the end result, strace like, as possible.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-canomaoiybkswwnhj69u9ae4@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6dcbd212
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Print the syscall name for augmented_syscalls · 1cdf618f
      Arnaldo Carvalho de Melo authored
      Since we copy all the payload for raw_syscalls:sys_enter plus add
      expanded pointers, we can use the syscall id to get its name, etc:
      
        # grep 'field:.* id' /sys/kernel/debug/tracing/events/raw_syscalls/sys_enter/format
      	field:long id;	offset:8;	size:8;	signed:1;
        #
      
      Before:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): __augmented_syscalls__:dfd: CWD, filename: 0xec9f9da8, flags: CLOEXEC
           0.006 ( 0.006 ms): cat/2395 openat(dfd: CWD, filename: 0xec9f9da8, flags: CLOEXEC) = 3
           0.041 (         ): __augmented_syscalls__:dfd: CWD, filename: 0xecc01ce0, flags: CLOEXEC
           0.042 ( 0.007 ms): cat/2395 openat(dfd: CWD, filename: 0xecc01ce0, flags: CLOEXEC) = 3
           0.376 (         ): __augmented_syscalls__:dfd: CWD, filename: 0xac0a806b
           0.379 ( 0.006 ms): cat/2395 openat(dfd: CWD, filename: 0xac0a806b) = 3
        #
      
      After:
      
        # perf trace -e tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): openat(dfd: CWD, filename: 0x31b6dda8, flags: CLOEXEC)
           0.009 ( 0.009 ms): cat/3619 openat(dfd: CWD, filename: 0x31b6dda8, flags: CLOEXEC) = 3
           0.051 (         ): openat(dfd: CWD, filename: 0x31d75ce0, flags: CLOEXEC)
           0.054 ( 0.010 ms): cat/3619 openat(dfd: CWD, filename: 0x31d75ce0, flags: CLOEXEC) = 3
           0.539 (         ): openat(dfd: CWD, filename: 0xca71506b)
           0.543 ( 0.115 ms): cat/3619 openat(dfd: CWD, filename: 0xca71506b) = 3
        #
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-epz6y9i0eavmerc5ha98t7gn@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1cdf618f
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Make the augmented_syscalls filter out the tracepoint event · 6ccc18a9
      Arnaldo Carvalho de Melo authored
      When we attach a eBPF object to a tracepoint, if we return 1, then that
      tracepoint will be stored in the perf's ring buffer. In the
      augmented_syscalls.c case we want to just attach and _override_ the
      tracepoint payload with an augmented, extended one.
      
      In this example, tools/perf/examples/bpf/augmented_syscalls.c, we are
      attaching to the 'openat' syscall, and adding, after the
      syscalls:sys_enter_openat usual payload as defined by
      /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/format, a
      snapshot of its sole pointer arg:
      
        # grep 'field:.*\*' /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/format
      	field:const char * filename;	offset:24;	size:8;	signed:0;
        #
      
      For now this is not being considered, the next csets will make use of
      it, but as this is overriding the syscall tracepoint enter, we don't
      want that event appearing on the ring buffer, just our synthesized one.
      
      Before:
      
        # perf trace -e ~acme/git/perf/tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): __augmented_syscalls__:dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC
           0.006 (         ): syscalls:sys_enter_openat:dfd: CWD, filename: , flags: CLOEXEC
           0.007 ( 0.004 ms): cat/24044 openat(dfd: CWD, filename: 0x216dda8, flags: CLOEXEC                  ) = 3
           0.028 (         ): __augmented_syscalls__:dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC
           0.030 (         ): syscalls:sys_enter_openat:dfd: CWD, filename: , flags: CLOEXEC
           0.031 ( 0.006 ms): cat/24044 openat(dfd: CWD, filename: 0x2375ce0, flags: CLOEXEC                  ) = 3
           0.291 (         ): __augmented_syscalls__:dfd: CWD, filename: /etc/passwd
           0.293 (         ): syscalls:sys_enter_openat:dfd: CWD, filename:
           0.294 ( 0.004 ms): cat/24044 openat(dfd: CWD, filename: 0x637db06b                                 ) = 3
        #
      
      After:
      
        # perf trace -e ~acme/git/perf/tools/perf/examples/bpf/augmented_syscalls.c,openat cat /etc/passwd > /dev/null
           0.000 (         ): __augmented_syscalls__:dfd: CWD, filename: 0x9c6a1da8, flags: CLOEXEC
           0.005 ( 0.015 ms): cat/27341 openat(dfd: CWD, filename: 0x9c6a1da8, flags: CLOEXEC                 ) = 3
           0.040 (         ): __augmented_syscalls__:dfd: CWD, filename: 0x9c8a9ce0, flags: CLOEXEC
           0.041 ( 0.006 ms): cat/27341 openat(dfd: CWD, filename: 0x9c8a9ce0, flags: CLOEXEC                 ) = 3
           0.294 (         ): __augmented_syscalls__:dfd: CWD, filename: 0x482a706b
           0.296 ( 0.067 ms): cat/27341 openat(dfd: CWD, filename: 0x482a706b                                 ) = 3
        #
      
      Now lets replace that __augmented_syscalls__ name with the syscall name,
      using:
      
        # grep 'field:.*syscall_nr' /sys/kernel/debug/tracing/events/syscalls/sys_enter_openat/format
      	field:int __syscall_nr;	offset:8;	size:4;	signed:1;
        #
      
      That the synthesized payload has exactly where the syscall enter
      tracepoint puts it.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-og4r9k87mzp9hv7el046idmd@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6ccc18a9