29 Jan, 2020

1 commit

  • Pull networking updates from David Miller:

    1) Add WireGuard

    2) Add HE and TWT support to ath11k driver, from John Crispin.

    3) Add ESP in TCP encapsulation support, from Sabrina Dubroca.

    4) Add variable window congestion control to TIPC, from Jon Maloy.

    5) Add BCM84881 PHY driver, from Russell King.

    6) Start adding netlink support for ethtool operations, from Michal
    Kubecek.

    7) Add XDP drop and TX action support to ena driver, from Sameeh
    Jubran.

    8) Add new ipv4 route notifications so that mlxsw driver does not have
    to handle identical routes itself. From Ido Schimmel.

    9) Add BPF dynamic program extensions, from Alexei Starovoitov.

    10) Support RX and TX timestamping in igc, from Vinicius Costa Gomes.

    11) Add support for macsec HW offloading, from Antoine Tenart.

    12) Add initial support for MPTCP protocol, from Christoph Paasch,
    Matthieu Baerts, Florian Westphal, Peter Krystad, and many others.

    13) Add Octeontx2 PF support, from Sunil Goutham, Geetha sowjanya, Linu
    Cherian, and others.

    * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1469 commits)
    net: phy: add default ARCH_BCM_IPROC for MDIO_BCM_IPROC
    udp: segment looped gso packets correctly
    netem: change mailing list
    qed: FW 8.42.2.0 debug features
    qed: rt init valid initialization changed
    qed: Debug feature: ilt and mdump
    qed: FW 8.42.2.0 Add fw overlay feature
    qed: FW 8.42.2.0 HSI changes
    qed: FW 8.42.2.0 iscsi/fcoe changes
    qed: Add abstraction for different hsi values per chip
    qed: FW 8.42.2.0 Additional ll2 type
    qed: Use dmae to write to widebus registers in fw_funcs
    qed: FW 8.42.2.0 Parser offsets modified
    qed: FW 8.42.2.0 Queue Manager changes
    qed: FW 8.42.2.0 Expose new registers and change windows
    qed: FW 8.42.2.0 Internal ram offsets modifications
    MAINTAINERS: Add entry for Marvell OcteonTX2 Physical Function driver
    Documentation: net: octeontx2: Add RVU HW and drivers overview
    octeontx2-pf: ethtool RSS config support
    octeontx2-pf: Add basic ethtool support
    ...

    Linus Torvalds
     

21 Jan, 2020

1 commit


14 Jan, 2020

1 commit

  • clock_nanosleep() accepts absolute values of expiration time when
    TIMER_ABSTIME flag is set. This absolute value is inside the task's
    time namespace, and has to be converted to the host's time.

    There is timens_ktime_to_host() helper for converting time, but
    it accepts ktime argument.

    As a preparation, make hrtimer_nanosleep() accept a clock value in ktime
    instead of timespec64.

    Co-developed-by: Dmitry Safonov
    Signed-off-by: Andrei Vagin
    Signed-off-by: Dmitry Safonov
    Signed-off-by: Thomas Gleixner
    Link: https://lore.kernel.org/r/20191112012724.250792-17-dima@arista.com

    Andrei Vagin
     

26 Aug, 2019

4 commits


30 Jul, 2019

10 commits

  • I.e. two strings:

    # perf trace -e rename
    systemd/1 rename("/run/systemd/units/.#invocation:dnf-makecache.service970761b7f2840dcc", "/run/systemd/units/invocation:dnf-makecache.service") = 0
    systemd-journa/715 rename("/run/systemd/journal/streams/.#9:17539785BJDblc", "/run/systemd/journal/streams/9:17539785") = 0
    mv/1936 rename("/tmp/build/perf/fd/.array.o.tmp", "/tmp/build/perf/fd/.array.o.cmd") = 0
    sh/1949 rename("/tmp/build/perf/.cpu.o.tmp", "/tmp/build/perf/.cpu.o.cmd") = 0
    mv/1954 rename("/tmp/build/perf/fs/.tracing_path.o.tmp", "/tmp/build/perf/fs/.tracing_path.o.cmd") = 0
    mv/1963 rename("/tmp/build/perf/common-cmds.h+", "/tmp/build/perf/common-cmds.h") = 0
    :1975/1975 rename("/tmp/build/perf/.exec-cmd.o.tmp", "/tmp/build/perf/.exec-cmd.o.cmd") = 0
    mv/1979 rename("/tmp/build/perf/fs/.fs.o.tmp", "/tmp/build/perf/fs/.fs.o.cmd") = 0
    mv/2005 rename("/tmp/build/perf/.debug.o.tmp", "/tmp/build/perf/.debug.o.cmd") = 0
    mv/2012 rename("/tmp/build/perf/.str_error_r.o.tmp", "/tmp/build/perf/.str_error_r.o.cmd") = 0
    mv/2019 rename("/tmp/build/perf/.help.o.tmp", "/tmp/build/perf/.help.o.cmd") = 0
    mv/2031 rename("/tmp/build/perf/.trace-seq.o.tmp", "/tmp/build/perf/.trace-seq.o.cmd") = 0
    make/2038 ... [continued]: rename()) = 0
    :2038/2038 rename("/tmp/build/perf/.event-plugin.o.tmp", "/tmp/build/perf/.event-plugin.o.cmd") ...
    ar/2035 rename("/tmp/build/perf/stzwBX3a", "/tmp/build/perf/libapi.a") = 0
    mv/2051 rename("/tmp/build/perf/.parse-utils.o.tmp", "/tmp/build/perf/.parse-utils.o.cmd") = 0
    mv/2069 rename("/tmp/build/perf/.subcmd-config.o.tmp", "/tmp/build/perf/.subcmd-config.o.cmd") = 0
    make/2080 rename("/tmp/build/perf/.parse-filter.o.tmp", "/tmp/build/perf/.parse-filter.o.cmd") = 0
    mv/2099 rename("/tmp/build/perf/.pager.o.tmp", "/tmp/build/perf/.pager.o.cmd") = 0
    :2124/2124 rename("/tmp/build/perf/.sigchain.o.tmp", "/tmp/build/perf/.sigchain.o.cmd") = 0
    make/2140 rename("/tmp/build/perf/.event-parse.o.tmp", "/tmp/build/perf/.event-parse.o.cmd") = 0
    mv/2164 rename("/tmp/build/perf/.kbuffer-parse.o.tmp", "/tmp/build/perf/.kbuffer-parse.o.cmd") = 0
    sh/2174 rename("/tmp/build/perf/.run-command.o.tmp", "/tmp/build/perf/.run-command.o.cmd") = 0
    mv/2190 rename("/tmp/build/perf/.tep_strerror.o.tmp", "/tmp/build/perf/.tep_strerror.o.cmd") = 0
    :2261/2261 rename("/tmp/build/perf/.event-parse-api.o.tmp", "/tmp/build/perf/.event-parse-api.o.cmd") = 0
    :2480/2480 rename("/tmp/build/perf/stLv3kG2", "/tmp/build/perf/libtraceevent.a") = 0
    ^C#

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-6hh2rl27uri6gsxhmk6q3hx5@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • By just writing the collector in the augmented_raw_syscalls.c BPF
    program:

    # perf trace -e sendto

    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    Socket Thread/3573 sendto(247, 0x7fb32d49c000, 120, NONE, { .family: PF_UNSPEC }, NULL) = 120
    DNS Res~er #18/11374 sendto(242, 0x7fb342cfe420, 20, NONE, { .family: PF_NETLINK }, 0xc) = 20
    DNS Res~er #18/11374 sendto(242, 0x7fb342cfcca0, 42, MSG_NOSIGNAL, { .family: PF_UNSPEC }, NULL) = 42
    DNS Res~er #18/11374 sendto(242, 0x7fb342cfcccc, 42, MSG_NOSIGNAL, { .family: PF_UNSPEC }, NULL) = 42
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    Socket Thread/3573 sendto(242, 0x7fb308bb1c08, 296, NONE, { .family: PF_UNSPEC }, NULL) = 296
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ping/23492 sendto(3, 0x56253bbef700, 64, NONE, { .family: PF_INET, port: 0, addr: 10.10.161.32 }, 0x10) = 64
    ^C
    #

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-p0l0rlvq19v5zf8qc2x2itow@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • We already had a beautifier for an augmented sockaddr payload, but that
    was when we were hooking on each syscalls:sys_enter_foo tracepoints,
    since now we're almost doing that by doing a tail call from
    raw_syscalls:sys_enter, its almost the same, we can reuse it straight
    away.

    # perf trace -e connec* ssh www.bla.com
    connect(3, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(3, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(4, { .family: PF_LOCAL, path: /var/lib/sss/pipes/nss }, 0x6e) = 0
    connect(7, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(7, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(5, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(5, { .family: PF_LOCAL, path: /var/run/nscd/socket }, 0x6e) = -1 ENOENT (No such file or directory)
    connect(5, { .family: PF_INET, port: 53, addr: 192.168.44.1 }, 0x10) = 0
    connect(5, { .family: PF_INET, port: 22, addr: 146.112.61.108 }, 0x10) = 0
    connect(5, { .family: PF_INET6, port: 22, addr: ::ffff:146.112.61.108 }, 0x1c) = 0
    ^C#

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-5xkrbcpjsgnr3zt1aqdd7nvc@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • It'll get other stuff in there than just filenames, starting with
    sockaddr for 'connect' and 'bind'.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-bsexidtsn91ehdpzcd6n5fm9@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Starting with the renameat and renameat2 syscall, that both receive as
    second and fourth parameters a pathname:

    # perf trace -e rename* mv one ANOTHER
    LLVM: dumping /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    mv: cannot stat 'one': No such file or directory
    renameat2(AT_FDCWD, "one", AT_FDCWD, "ANOTHER", RENAME_NOREPLACE) = -1 ENOENT (No such file or directory)
    #

    Since the per CPU scratch buffer map has space for two maximum sized
    pathnames, the verifier is satisfied that there will be no overrun.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-x2uboyg5kx2wqeru288209b6@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Trying to control what arguments to copy, which ones were strings, etc
    all from userspace via maps went nowhere, lots of difficulties to get
    the verifier satisfied, so use what the fine BPF guys designed for such
    a syscall handling mechanism: bpf_tail_call + BPF_MAP_TYPE_PROG_ARRAY.

    The series leading to this should have explained it thoroughly, but the
    end result, explained via gdb should help understand this:

    Breakpoint 1, syscall_arg__scnprintf_filename (bf=0xc002b1 "", size=2031, arg=0x7fffffff7970) at builtin-trace.c:1268
    1268 {
    (gdb) n
    1269 unsigned long ptr = arg->val;
    (gdb) n
    1271 if (arg->augmented.args)
    (gdb) n
    1272 return syscall_arg__scnprintf_augmented_string(arg, bf, size);
    (gdb) s
    syscall_arg__scnprintf_augmented_string (arg=0x7fffffff7970, bf=0xc002b1 "", size=2031) at builtin-trace.c:1251
    1251 {
    (gdb) n
    1252 struct augmented_arg *augmented_arg = arg->augmented.args;
    (gdb) n
    1253 size_t printed = scnprintf(bf, size, "\"%.*s\"", augmented_arg->size, augmented_arg->value);
    (gdb) n
    1258 int consumed = sizeof(*augmented_arg) + augmented_arg->size;
    (gdb) p bf
    $1 = 0xc002b1 "\"/etc/ld.so.cache\""
    (gdb) bt
    #0 syscall_arg__scnprintf_augmented_string (arg=0x7fffffff7970, bf=0xc002b1 "\"/etc/ld.so.cache\"", size=2031) at builtin-trace.c:1258
    #1 0x0000000000492634 in syscall_arg__scnprintf_filename (bf=0xc002b1 "\"/etc/ld.so.cache\"", size=2031, arg=0x7fffffff7970) at builtin-trace.c:1272
    #2 0x0000000000493cd7 in syscall__scnprintf_val (sc=0xc0de68, bf=0xc002b1 "\"/etc/ld.so.cache\"", size=2031, arg=0x7fffffff7970, val=140737354091036) at builtin-trace.c:1689
    #3 0x000000000049404f in syscall__scnprintf_args (sc=0xc0de68, bf=0xc002a7 "AT_FDCWD, \"/etc/ld.so.cache\"", size=2041, args=0x7ffff6cbf1ec "\234\377\377\377", augmented_args=0x7ffff6cbf21c, augmented_args_size=28, trace=0x7fffffffa170,
    thread=0xbff940) at builtin-trace.c:1756
    #4 0x0000000000494a97 in trace__sys_enter (trace=0x7fffffffa170, evsel=0xbe1900, event=0x7ffff6cbf1a0, sample=0x7fffffff7b00) at builtin-trace.c:1975
    #5 0x0000000000496ff1 in trace__handle_event (trace=0x7fffffffa170, event=0x7ffff6cbf1a0, sample=0x7fffffff7b00) at builtin-trace.c:2685
    #6 0x0000000000497edb in __trace__deliver_event (trace=0x7fffffffa170, event=0x7ffff6cbf1a0) at builtin-trace.c:3029
    #7 0x000000000049801e in trace__deliver_event (trace=0x7fffffffa170, event=0x7ffff6cbf1a0) at builtin-trace.c:3056
    #8 0x00000000004988de in trace__run (trace=0x7fffffffa170, argc=2, argv=0x7fffffffd660) at builtin-trace.c:3258
    #9 0x000000000049c2d3 in cmd_trace (argc=2, argv=0x7fffffffd660) at builtin-trace.c:4220
    #10 0x00000000004dcb6c in run_builtin (p=0xa18e00 , argc=5, argv=0x7fffffffd660) at perf.c:304
    #11 0x00000000004dcdd9 in handle_internal_command (argc=5, argv=0x7fffffffd660) at perf.c:356
    #12 0x00000000004dcf20 in run_argv (argcp=0x7fffffffd4bc, argv=0x7fffffffd4b0) at perf.c:400
    #13 0x00000000004dd28c in main (argc=5, argv=0x7fffffffd660) at perf.c:522
    (gdb)
    (gdb) continue
    Continuing.
    openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

    Now its a matter of automagically assigning the BPF programs copying
    syscall arg pointers to functions that are "open"-like (i.e. that need
    only the first syscall arg copied as a string), or "openat"-like (2nd
    arg, etc).

    End result in tool output:

    # perf trace -e open* ls /tmp/notthere
    LLVM: dumping /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = ls: cannot access '/tmp/notthere'-1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY: No such file or directory) =
    -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    #

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-snc7ry99cl6r0pqaspjim98x@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • I.e. for a syscall that has its second argument being a string, its
    difficult these days to find 'open' being used in the wild :-)

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-yf3kbzirqrukd3fb2sp5qx4p@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • I.e. look for "syscalls_sys_enter" and "syscalls_sys_exit" BPF maps of
    type PROG_ARRAY and populate it with the handlers as specified per
    syscall, for now only 'open' is wiring it to something, in time all
    syscalls that need to copy arguments entering a syscall or returning
    from one will set these to the right handlers, reusing when possible
    pre-existing ones.

    Next step is to use bpf_tail_call() into that.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-t0p4u43i9vbpzs1xtowna3gb@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • This is a step in the direction of being able to use a
    BPF_MAP_TYPE_PROG_ARRAY to handle syscalls that need to copy pointer
    payloads in addition to the raw tracepoint syscall args.

    There is a first example in
    tools/perf/examples/bpf/augmented_raw_syscalls.c for the 'open' syscall.

    Next step is to introduce the prog array map and use this 'open'
    augmenter, then use that augmenter in other syscalls that also only copy
    the first arg as a string, and then show how to use with a syscall that
    reads more than one filename, like 'rename', etc.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-pys4v57x5qqrybb4cery2mc8@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Will be used to assign to syscalls that don't need augmentation, i.e.
    those with just integer args.

    All syscalls will be in a BPF_MAP_TYPE_PROG_ARRAY, and the
    bpf_tail_call() keyed by the syscall id will either find nothing in
    place, which means the syscall is being filtered, or a function that
    will either add things like filenames to the ring buffer, right after
    the raw syscall args, or be this unaugmented handler that will just
    return 1, meaning don't filter the original
    raw_syscalls:sys_{enter,exit} tracepoint.

    For now it is not really being used, this is just leg work to break the
    patch into smaller pieces.

    It introduces a trace__find_bpf_program_by_title() helper that in turn
    uses libbpf's bpf_object__find_program_by_title() on the BPF object with
    the __augmented_syscalls__ map. "title" is how libbpf calls the SEC()
    argument for functions, i.e. the ELF section that follows a convention
    to specify what BPF program (a function with this SEC() marking) should
    be connected to which tracepoint, kprobes, etc.

    In perf anything that is of the form SEC("sys:event_name") will be
    connected to that tracepoint by perf's BPF loader.

    In this case its something that will be bpf_tail_call()ed from either
    the "raw_syscalls:sys_enter" or "raw_syscall:sys_exit" tracepoints, so
    its named "!raw_syscalls:unaugmented" to convey that idea, i.e. its not
    going to be directly attached to a tracepoint, thus it starts with a
    "!".

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-meucpjx2u0slpkayx56lxqq6@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

05 Jun, 2019

4 commits

  • Almost there, next step is to copy more than one filename payload.

    Probably to read syscall arg structs, etc we'll need just a variation of
    this that will decide what to use, if probe_read_str() or plain
    probe_read for structs, i.e. fixed size.

    Cc: Adrian Hunter
    Cc: Brendan Gregg
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-uf6u0pld6xe4xuo16f04owlz@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • So that we can use it for multiple args, baby steps not to step into the
    verifier toes.

    In the process make sure we handle -EFAULT from bpf_prog_read_str(), as
    this really is needed now that we'll handle more than one augmented
    argument, i.e. if there is failure, then we have the argument that fails
    have:

    (size = 0, err = -EFAULT, value = [] )

    followed by the next, lets say that worked for a second pathname:

    (size = 4, err = 0, value = "/tmp" )

    So we can skip the first while telling the user about the problem and
    then process the second.

    Cc: Adrian Hunter
    Cc: Brendan Gregg
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-deyvqi39um6gp6hux6jovos8@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • One more step into copying multiple filenames to support syscalls like
    rename*.

    Cc: Adrian Hunter
    Cc: Brendan Gregg
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-xdqtjexdyp81oomm1rkzeifl@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Since we know what args are strings from reading the syscall
    descriptions in tracefs and also already mark such args to be beautified
    using the syscall_arg__scnprintf_filename() helper, all we need is to
    fill in this info in the 'syscalls' BPF map we were using to state which
    syscalls the user is interested in, i.e. the syscall filter.

    Right now just set that with PATH_MAX and unroll the syscall arg in the
    BPF program, as the verifier isn't liking something clang generates when
    unrolling the loop.

    This also makes the augmented_raw_syscalls.c program support all arches,
    since we removed that set of defines with the hard coded syscall
    numbers, all should be automatically set for all arches, with the
    syscall id mapping done correcly.

    Doing baby steps here, i.e. just the first string arg for a syscall is
    printed, syscalls with more than one, say, the various rename* syscalls,
    need further work, but lets get first something that the BPF verifier
    accepts before increasing the complexity

    To test it, something like:

    # perf trace -e string -e /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.c

    With:

    # cat ~/.perfconfig
    [llvm]
    dump-obj = true
    clang-opt = -g
    [trace]
    #add_events = /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.c
    show_zeros = yes
    show_duration = no
    no_inherit = yes
    show_timestamp = no
    show_arg_names = no
    args_alignment = 40
    show_prefix = yes
    #

    That commented add_events line is needed for developing this
    augmented_raw_syscalls.c BPF program, as if we add it via the
    'add_events' mechanism so as to shorten the 'perf trace' command lines,
    then we end up not setting up the -v option which precludes us having
    access to the bpf verifier log :-\

    Cc: Adrian Hunter
    Cc: Alexei Starovoitov
    Cc: Andrii Nakryiko
    Cc: Daniel Borkmann
    Cc: Jesper Dangaard Brouer
    Cc: Jiri Olsa
    Cc: Leo Yan
    Cc: Namhyung Kim
    Cc: Song Liu
    Cc: Yonghong Song
    Link: https://lkml.kernel.org/n/tip-dn863ya0cbsqycxuy0olvbt1@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

29 May, 2019

3 commits

  • Use existing beautifiers for the first 2 args (dfd, path) and wire up
    the recently introduced fspick flags table generator.

    Now it should be possible to just use:

    perf trace -e fspick

    As root and see all move_mount syscalls with its args beautified, either
    using the vfs_getname perf probe method or using the
    augmented_raw_syscalls.c eBPF helper to get the pathnames, the other
    args should work in all cases, i.e. all that is needed can be obtained
    directly from the raw_syscalls:sys_enter tracepoint args.

    # cat sys_fspick.c
    #define _GNU_SOURCE /* See feature_test_macros(7) */
    #include
    #include /* For SYS_xxx definitions */
    #include

    #define __NR_fspick 433

    #define FSPICK_CLOEXEC 0x00000001
    #define FSPICK_SYMLINK_NOFOLLOW 0x00000002
    #define FSPICK_NO_AUTOMOUNT 0x00000004
    #define FSPICK_EMPTY_PATH 0x00000008

    static inline int sys_fspick(int fd, const char *path, int flags)
    {
    syscall(__NR_fspick, fd, path, flags);
    }

    int main(int argc, char *argv[])
    {
    int flags = 0, fd = 0;

    open("/foo", 0);
    sys_fspick(fd++, "/foo1", flags);
    flags |= FSPICK_CLOEXEC;
    sys_fspick(fd++, "/foo2", flags);
    flags |= FSPICK_SYMLINK_NOFOLLOW;
    sys_fspick(fd++, "/foo3", flags);
    flags |= FSPICK_NO_AUTOMOUNT;
    sys_fspick(fd++, "/foo4", flags);
    flags |= FSPICK_EMPTY_PATH;
    return sys_fspick(fd++, "/foo5", flags);
    }
    # perf trace -e fspick ./sys_fspick
    LLVM: dumping /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    fspick(0, "/foo1", 0) = -1 ENOENT (No such file or directory)
    fspick(1, "/foo2", FSPICK_CLOEXEC) = -1 ENOENT (No such file or directory)
    fspick(2, "/foo3", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
    fspick(3, "/foo4", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW|FSPICK_NO_AUTOMOUNT) = -1 ENOENT (No such file or directory)
    fspick(4, "/foo5", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW|FSPICK_NO_AUTOMOUNT|FSPICK_EMPTY_PATH) = -1 ENOENT (No such file or directory)
    #

    Cc: Adrian Hunter
    Cc: Al Viro
    Cc: Brendan Gregg
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-erau5xjtt8wvgnhvdbchstuk@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Use existing beautifiers for the first 4 args (to/from fds, pathnames)
    and wire up the recently introduced move_mount flags table generator.

    Now it should be possible to just use:

    perf trace -e move_mount

    As root and see all move_mount syscalls with its args beautified, except
    for the filenames, that need work in the augmented_raw_syscalls.c eBPF
    helper to pass more than one, see comment in the
    augmented_raw_syscalls.c source code, the other args should work in all
    cases, i.e. all that is needed can be obtained directly from the
    raw_syscalls:sys_enter tracepoint args.

    Running without the strace "skin" (.perfconfig setting output formatting
    switches to look like strace output + BPF to collect strings, as we
    still need to support collecting multiple string args for the same
    syscall, like with move_mount):

    # cat sys_move_mount.c
    #define _GNU_SOURCE /* See feature_test_macros(7) */
    #include
    #include /* For SYS_xxx definitions */

    #define __NR_move_mount 429

    #define MOVE_MOUNT_F_SYMLINKS 0x00000001 /* Follow symlinks on from path */
    #define MOVE_MOUNT_F_AUTOMOUNTS 0x00000002 /* Follow automounts on from path */
    #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */
    #define MOVE_MOUNT_T_SYMLINKS 0x00000010 /* Follow symlinks on to path */
    #define MOVE_MOUNT_T_AUTOMOUNTS 0x00000020 /* Follow automounts on to path */
    #define MOVE_MOUNT_T_EMPTY_PATH 0x00000040 /* Empty to path permitted */

    static inline int sys_move_mount(int from_fd, const char *from_pathname,
    int to_fd, const char *to_pathname,
    int flags)
    {
    syscall(__NR_move_mount, from_fd, from_pathname, to_fd, to_pathname, flags);
    }

    int main(int argc, char *argv[])
    {
    int flags = 0, from_fd = 0, to_fd = 100;

    sys_move_mount(from_fd++, "/foo", to_fd++, "bar", flags);
    flags |= MOVE_MOUNT_F_SYMLINKS;
    sys_move_mount(from_fd++, "/foo1", to_fd++, "bar1", flags);
    flags |= MOVE_MOUNT_F_AUTOMOUNTS;
    sys_move_mount(from_fd++, "/foo2", to_fd++, "bar2", flags);
    flags |= MOVE_MOUNT_F_EMPTY_PATH;
    sys_move_mount(from_fd++, "/foo3", to_fd++, "bar3", flags);
    flags |= MOVE_MOUNT_T_SYMLINKS;
    sys_move_mount(from_fd++, "/foo4", to_fd++, "bar4", flags);
    flags |= MOVE_MOUNT_T_AUTOMOUNTS;
    sys_move_mount(from_fd++, "/foo5", to_fd++, "bar5", flags);
    flags |= MOVE_MOUNT_T_EMPTY_PATH;
    return sys_move_mount(from_fd++, "/foo6", to_fd++, "bar6", flags);
    }
    # mv ~/.perfconfig ~/.perfconfig.OFF
    # perf trace -e move_mount ./sys_move_mount
    0.000 ( 0.009 ms): sys_move_mount/28971 move_mount(from_pathname: 0x402010, to_dfd: 100, to_pathname: 0x402015) = -1 ENOENT (No such file or directory)
    0.011 ( 0.003 ms): sys_move_mount/28971 move_mount(from_dfd: 1, from_pathname: 0x40201e, to_dfd: 101, to_pathname: 0x402019, flags: F_SYMLINKS) = -1 ENOENT (No such file or directory)
    0.016 ( 0.002 ms): sys_move_mount/28971 move_mount(from_dfd: 2, from_pathname: 0x402029, to_dfd: 102, to_pathname: 0x402024, flags: F_SYMLINKS|F_AUTOMOUNTS) = -1 ENOENT (No such file or directory)
    0.020 ( 0.002 ms): sys_move_mount/28971 move_mount(from_dfd: 3, from_pathname: 0x402034, to_dfd: 103, to_pathname: 0x40202f, flags: F_SYMLINKS|F_AUTOMOUNTS|F_EMPTY_PATH) = -1 ENOENT (No such file or directory)
    0.023 ( 0.002 ms): sys_move_mount/28971 move_mount(from_dfd: 4, from_pathname: 0x40203f, to_dfd: 104, to_pathname: 0x40203a, flags: F_SYMLINKS|F_AUTOMOUNTS|F_EMPTY_PATH|T_SYMLINKS) = -1 ENOENT (No such file or directory)
    0.027 ( 0.002 ms): sys_move_mount/28971 move_mount(from_dfd: 5, from_pathname: 0x40204a, to_dfd: 105, to_pathname: 0x402045, flags: F_SYMLINKS|F_AUTOMOUNTS|F_EMPTY_PATH|T_SYMLINKS|T_AUTOMOUNTS) = -1 ENOENT (No such file or directory)
    0.031 ( 0.017 ms): sys_move_mount/28971 move_mount(from_dfd: 6, from_pathname: 0x402055, to_dfd: 106, to_pathname: 0x402050, flags: F_SYMLINKS|F_AUTOMOUNTS|F_EMPTY_PATH|T_SYMLINKS|T_AUTOMOUNTS|T_EMPTY_PATH) = -1 ENOENT (No such file or directory)
    #

    Cc: Adrian Hunter
    Cc: Al Viro
    Cc: Brendan Gregg
    Cc: David Howells
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-83rim8g4k0s4gieieh5nnlck@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Cut'n'paste error, the second comment is about the syscalls that have as
    its second arg a string.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-zo5s6rloy42u41acsf6q3pvi@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

02 Apr, 2019

2 commits

  • The previous method, copying to the BPF stack limited us in how many
    bytes we could copy from strings, use a PERCPU_ARRAY map like devised by
    the sysdig guys[1] to copy more bytes:

    Before:

    # trace --no-inherit -e openat touch `python -c "print "$s" 'a' * 2000"`
    touch: cannot touch 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
    openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", O_CREAT|O_NOCTTY|O_NONBLOCK|O_WRONLY, S_IRUGO|S_IWUGO) = -1 ENAMETOOLONG (File name too long)
    openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
    openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)

    #

    After:

    [root@quaco acme]# trace --no-inherit -e openat touch `python -c "print "$s" 'a' * 2000"`

    openat(AT_FDCWD, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", O_CREAT|O_NOCTTY|O_NONBLOC) = -1 ENAMETOOLONG (File name too long)

    If we leave something like 'perf trace -e string' to trace all syscalls
    with a string, and then do some 'perf top', to get some annotation for
    the augmented_raw_syscalls.o BPF program we get:

    │ → callq *ffffffffc45576d1 ▒
    │ augmented_args->filename.size = probe_read_str(&augmented_args->filename.value, ▒
    0.05 │ mov %eax,0x40(%r13)

    Looking with pahole, expanding types, asking for hex offsets and sizes,
    and use of BTF type information to see what is at that 0x40 offset from
    %r13:

    # pahole -F btf -C augmented_args_filename --expand_types --hex /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    struct augmented_args_filename {
    struct syscall_enter_args {
    long long unsigned int common_tp_fields; /* 0 0x8 */
    long int syscall_nr; /* 0x8 0x8 */
    long unsigned int args[6]; /* 0x10 0x30 */
    } args; /* 0 0x40 */
    /* --- cacheline 1 boundary (64 bytes) --- */
    struct augmented_filename {
    unsigned int size; /* 0x40 0x4 */
    int reserved; /* 0x44 0x4 */
    char value[4096]; /* 0x48 0x1000 */
    } filename; /* 0x40 0x1008 */

    /* size: 4168, cachelines: 66, members: 2 */
    /* last cacheline: 8 bytes */
    };
    #

    Then looking if PATH_MAX leaves some signature in the tests:

    │ if (augmented_args->filename.size < sizeof(augmented_args->filename.value)) { ▒
    │ cmp $0xfff,%rdi

    0xfff == 4095
    sizeof(augmented_args->filename.value) == PATH_MAX == 4096

    [1] https://sysdig.com/blog/the-art-of-writing-ebpf-programs-a-primer/

    Cc: Adrian Hunter
    Cc: Andrii Nakryiko
    Cc: Daniel Borkmann
    Cc: Gianluca Borello
    Cc: Jesper Dangaard Brouer
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    cc: Martin Lau
    Cc: Namhyung Kim
    Cc: Wang Nan
    Cc: Yonghong Song
    Link: https://lkml.kernel.org/n/tip-76gce2d2ghzq537ubwhjkone@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Gets the augmented_raw_syscalls a bit more useful as-is, add a comment
    stating that the intent is to have all this in a map populated by
    userspace via the 'syscalls' BPF map, that right now has only a flag
    stating if the syscall is filtered or not.

    With it:

    # grep -B1 augmented_raw ~/.perfconfig
    [trace]
    add_events = /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    #
    # perf trace -e string
    weechat/6001 stat("/etc/localtime", 0x7ffe22c23d10) = 0
    gnome-shell/1943 openat(AT_FDCWD, "/proc/self/stat", O_RDONLY) = 81
    weechat/6001 stat("/etc/localtime", 0x7ffe22c23d10) = 0
    gmain/2475 inotify_add_watch(20, "/home/acme/.config/firewall", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/var/cache/app-info/yaml", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/var/lib/app-info/xmls", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/var/lib/app-info/yaml", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/usr/share/app-info/yaml", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/usr/local/share/app-info/xmls", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/usr/local/share/app-info/yaml", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2391 inotify_add_watch(3, "/home/acme/.local/share/app-info/yaml", 16789454) = -1 ENOENT (No such file or directory)
    gmain/1121 inotify_add_watch(12, "/etc/NetworkManager/VPN", 16789454) = -1 ENOENT (No such file or directory)
    weechat/6001 stat("/etc/localtime", 0x7ffe22c23d10) = 0
    gmain/2050 inotify_add_watch(8, "/home/acme/~", 16789454) = -1 ENOENT (No such file or directory)
    gmain/2521 inotify_add_watch(6, "/var/lib/fwupd/remotes.d/lvfs-testing", 16789454) = -1 ENOENT (No such file or directory)
    weechat/6001 stat("/etc/localtime", 0x7ffe22c23d10) = 0
    DOM Worker/22714 ... [continued]: openat()) = 257
    FS Broker 3982/3990 openat(AT_FDCWD, "/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY) = 187
    DOMCacheThread/16652 mkdir("/home/acme/.mozilla/firefox/ina67tev.default/storage/default/https+++web.whatsapp.com/cache/morgue/192", S_IRUGO|S_IXUGO|S_IWUSR) = -1 EEXIST (File exists)
    ^C#

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-a1hxffoy8t43e0wq6bzhp23u@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

25 Jan, 2019

3 commits

  • To make the code more compact, end result is the same:

    # perf trace -e /home/acme/git/perf/tools/perf/examples/bpf/augmented_syscalls.c sleep 1
    0.000 ( 0.008 ms): sleep/9663 openat(dfd: CWD, filename: "/etc/ld.so.cache", flags: RDONLY|CLOEXEC) = 3
    0.022 ( 0.005 ms): sleep/9663 openat(dfd: CWD, filename: "/lib64/libc.so.6", flags: RDONLY|CLOEXEC) = 3
    0.226 ( 0.006 ms): sleep/9663 openat(dfd: CWD, filename: "/usr/lib/locale/locale-archive", flags: RDONLY|CLOEXEC) = 3
    #

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-23z08bgizqnbc3qdsyl7jyyg@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Making the code more compact, end result is the same:

    # trace -e /home/acme/git/perf/tools/perf/examples/bpf/etcsnoop.c
    0.000 ( ): sed/7385 openat(dfd: CWD, filename: "/etc/ld.so.cache", flags: RDONLY|CLOEXEC) ...
    2727.723 ( ): cat/7389 openat(dfd: CWD, filename: "/etc/ld.so.cache", flags: RDONLY|CLOEXEC) ...
    2728.543 ( ): cat/7389 openat(dfd: CWD, filename: "/etc/passwd") ...
    ^C

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-znhgz24p0daux2kay200ovc1@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • To make the code more compact and also paving the way to have the BTF
    annotation to be done transparently.

    Cc: Adrian Hunter
    Cc: Daniel Borkmann
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Martin KaFai Lau
    Cc: Namhyung Kim
    Cc: Wang Nan
    Cc: Yonghong Song
    Link: https://lkml.kernel.org/n/tip-pjlf38sv3i1hbn5vzkr4y3ol@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

22 Jan, 2019

1 commit

  • For the original mode of operation it isn't needed, since we report back
    errors via PERF_RECORD_LOST records in the ring buffer, but for use in
    bpf_perf_event_output() it is convenient to return the errors, basically
    -ENOSPC.

    Currently bpf_perf_event_output() returns an error indication, the last
    thing it does, which is to push it to the ring buffer is that can fail
    and if so, this failure won't be reported back to its users, fix it.

    Reported-by: Jamal Hadi Salim
    Tested-by: Jamal Hadi Salim
    Acked-by: Peter Zijlstra (Intel)
    Cc: Adrian Hunter
    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/r/20190118150938.GN5823@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

19 Dec, 2018

1 commit

  • This will all come from userspace, but to test the changes to make 'perf
    trace' output similar to strace's, do this one more now manually.

    To update the precompiled augmented_raw_syscalls.o binary I just run:

    # perf record -e ~acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.c sleep 1
    LLVM: dumping /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.022 MB perf.data ]
    #

    Because to have augmented_raw_syscalls to be always used and a fast
    startup and remove the need to have the llvm toolchain installed, I'm
    using:

    # perf config | grep add_events
    trace.add_events=/home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
    #

    So when doing changes to augmented_raw_syscals.c one needs to rebuild
    the .o file.

    This will be done automagically later, i.e. have a 'make' behaviour of
    recompiling when the .c gets changed.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-lw3i2atyq8549fpqwmszn3qp@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

18 Dec, 2018

3 commits

  • We're not using that puts() thing, and thus we don't need to define the
    __bpf_stdout__ map, reducing the setup time.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Luis Cláudio Gonçalves
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-3452xgatncpil7v22minkwbo@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • We'll start adding more perf-syscall stuff, so lets do this prep step so
    that the next ones are just about adding more fields.

    Run it with the .c file once to cache the .o file:

    # trace --filter-pids 2834,2199 -e openat,augmented_raw_syscalls.c
    LLVM: dumping augmented_raw_syscalls.o
    0.000 ( 0.021 ms): tmux: server/4952 openat(dfd: CWD, filename: /proc/5691/cmdline ) = 11
    349.807 ( 0.040 ms): DNS Res~er #39/11082 openat(dfd: CWD, filename: /etc/hosts, flags: CLOEXEC ) = 44
    4988.759 ( 0.052 ms): gsd-color/2431 openat(dfd: CWD, filename: /etc/localtime ) = 18
    4988.976 ( 0.029 ms): gsd-color/2431 openat(dfd: CWD, filename: /etc/localtime ) = 18
    ^C[root@quaco bpf]#

    From now on, we can use just the newly built .o file, skipping the
    compilation step for a faster startup:

    # trace --filter-pids 2834,2199 -e openat,augmented_raw_syscalls.o
    0.000 ( 0.046 ms): DNS Res~er #39/11088 openat(dfd: CWD, filename: /etc/hosts, flags: CLOEXEC ) = 44
    1946.408 ( 0.190 ms): systemd/1 openat(dfd: CWD, filename: /proc/1071/cgroup, flags: CLOEXEC ) = 20
    1946.792 ( 0.215 ms): systemd/1 openat(dfd: CWD, filename: /proc/954/cgroup, flags: CLOEXEC ) = 20
    ^C#

    Now on to do the same in the builtin-trace.c side of things.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-k8mwu04l8es29rje5loq9vg7@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Just another map, this time an BPF_MAP_TYPE_ARRAY, stating with
    one bool per syscall, stating if it should be filtered or not.

    So, with a pre-built augmented_raw_syscalls.o file, we use:

    # perf trace -e open*,augmented_raw_syscalls.o
    0.000 ( 0.016 ms): DNS Res~er #37/29652 openat(dfd: CWD, filename: /etc/hosts, flags: CLOEXEC ) = 138
    187.039 ( 0.048 ms): gsd-housekeepi/2436 openat(dfd: CWD, filename: /etc/fstab, flags: CLOEXEC ) = 11
    187.348 ( 0.041 ms): gsd-housekeepi/2436 openat(dfd: CWD, filename: /proc/self/mountinfo, flags: CLOEXEC ) = 11
    188.793 ( 0.036 ms): gsd-housekeepi/2436 openat(dfd: CWD, filename: /proc/self/mountinfo, flags: CLOEXEC ) = 11
    189.803 ( 0.029 ms): gsd-housekeepi/2436 openat(dfd: CWD, filename: /proc/self/mountinfo, flags: CLOEXEC ) = 11
    190.774 ( 0.027 ms): gsd-housekeepi/2436 openat(dfd: CWD, filename: /proc/self/mountinfo, flags: CLOEXEC ) = 11
    284.620 ( 0.149 ms): DataStorage/3076 openat(dfd: CWD, filename: /home/acme/.mozilla/firefox/ina67tev.default/SiteSecurityServiceState.txt, flags: CREAT|TRUNC|WRONLY, mode: IRUGO|IWUSR|IWGRP) = 167
    ^C#

    What is it that this gsd-housekeeping thingy needs to open
    /proc/self/mountinfo four times periodically? :-)

    This map will be extended to tell per-syscall parameters, i.e. how many
    bytes to copy per arg, using the function signature to get the types and
    then the size of those types, via BTF.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-cy222g9ucvnym3raqvxp0hpg@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

21 Nov, 2018

6 commits

  • Now that we have the "filtered_pids" logic in place, no need to do this
    rough filter to avoid the feedback loop from 'perf trace's own syscalls,
    revert it.

    This reverts commit 7ed71f124284359676b6496ae7db724fee9da753.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-88vh02cnkam0vv5f9vp02o3h@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Now that 'perf trace' fills in that "filtered_pids" BPF map, remove the
    set of filtered pids used as an example to test that feature.

    That feature works like this:

    Starting a system wide 'strace' like 'perf trace' augmented session we
    noticed that lots of events take place for a pid, which ends up being
    the feedback loop of perf trace's syscalls being processed by the
    'gnome-terminal' process:

    # perf trace -e tools/perf/examples/bpf/augmented_raw_syscalls.c
    0.391 ( 0.002 ms): gnome-terminal/2469 read(fd: 17, buf: 0x564b79f750bc, count: 8176) = 453
    0.394 ( 0.001 ms): gnome-terminal/2469 read(fd: 17, buf: 0x564b79f75280, count: 7724) = -1 EAGAIN Resource temporarily unavailable
    0.438 ( 0.001 ms): gnome-terminal/2469 read(fd: 4, buf: 0x7fffc696aeb0, count: 16) = 8
    0.519 ( 0.001 ms): gnome-terminal/2469 read(fd: 17, buf: 0x564b79f75280, count: 7724) = 114
    0.522 ( 0.001 ms): gnome-terminal/2469 read(fd: 17, buf: 0x564b79f752f1, count: 7611) = -1 EAGAIN Resource temporarily unavailable
    ^C

    So we can use --filter-pids to get rid of that one, and in this case what is
    being used to implement that functionality is that "filtered_pids" BPF map that
    the tools/perf/examples/bpf/augmented_raw_syscalls.c created and that 'perf trace'
    bpf loader noticed and created a "struct bpf_map" associated that then got populated
    by 'perf trace':

    # perf trace --filter-pids 2469 -e tools/perf/examples/bpf/augmented_raw_syscalls.c
    0.020 ( 0.002 ms): gnome-shell/1663 epoll_pwait(epfd: 12, events: 0x7ffd8f3ef960, maxevents: 32, sigsetsize: 8) = 1
    0.025 ( 0.002 ms): gnome-shell/1663 read(fd: 24, buf: 0x560c01bb8240, count: 8112) = 48
    0.029 ( 0.001 ms): gnome-shell/1663 read(fd: 24, buf: 0x560c01bb8258, count: 8088) = -1 EAGAIN Resource temporarily unavailable
    0.032 ( 0.001 ms): gnome-shell/1663 read(fd: 24, buf: 0x560c01bb8240, count: 8112) = -1 EAGAIN Resource temporarily unavailable
    0.040 ( 0.003 ms): gnome-shell/1663 recvmsg(fd: 46, msg: 0x7ffd8f3ef950) = -1 EAGAIN Resource temporarily unavailable
    21.529 ( 0.002 ms): gnome-shell/1663 epoll_pwait(epfd: 5, events: 0x7ffd8f3ef960, maxevents: 32, sigsetsize: 8) = 1
    21.533 ( 0.004 ms): gnome-shell/1663 recvmsg(fd: 82, msg: 0x7ffd8f3ef7b0, flags: DONTWAIT|CMSG_CLOEXEC) = 236
    21.581 ( 0.006 ms): gnome-shell/1663 ioctl(fd: 8, cmd: DRM_I915_GEM_BUSY, arg: 0x7ffd8f3ef060) = 0
    21.605 ( 0.020 ms): gnome-shell/1663 ioctl(fd: 8, cmd: DRM_I915_GEM_CREATE, arg: 0x7ffd8f3eeea0) = 0
    21.626 ( 0.119 ms): gnome-shell/1663 ioctl(fd: 8, cmd: DRM_I915_GEM_SET_DOMAIN, arg: 0x7ffd8f3eee94) = 0
    21.746 ( 0.081 ms): gnome-shell/1663 ioctl(fd: 8, cmd: DRM_I915_GEM_PWRITE, arg: 0x7ffd8f3eeea0) = 0
    ^C

    Oops, yet another gnome process that is involved with the output that
    'perf trace' generates, lets filter that out too:

    # perf trace --filter-pids 2469,1663 -e tools/perf/examples/bpf/augmented_raw_syscalls.c
    ? ( ): wpa_supplicant/1366 ... [continued]: select()) = 0 Timeout
    0.006 ( 0.002 ms): wpa_supplicant/1366 clock_gettime(which_clock: BOOTTIME, tp: 0x7fffe5b1e430) = 0
    0.011 ( 0.001 ms): wpa_supplicant/1366 clock_gettime(which_clock: BOOTTIME, tp: 0x7fffe5b1e3e0) = 0
    0.014 ( 0.001 ms): wpa_supplicant/1366 clock_gettime(which_clock: BOOTTIME, tp: 0x7fffe5b1e430) = 0
    ? ( ): gmain/1791 ... [continued]: poll()) = 0 Timeout
    0.017 ( ): wpa_supplicant/1366 select(n: 6, inp: 0x55646fed3ad0, outp: 0x55646fed3b60, exp: 0x55646fed3bf0, tvp: 0x7fffe5b1e4a0) ...
    157.879 ( 0.019 ms): gmain/1791 inotify_add_watch(fd: 8, pathname: , mask: 16789454) = -1 ENOENT No such file or directory
    ? ( ): cupsd/1001 ... [continued]: epoll_pwait()) = 0
    ? ( ): gsd-color/1908 ... [continued]: poll()) = 0 Timeout
    499.615 ( ): cupsd/1001 epoll_pwait(epfd: 4, events: 0x557a21166500, maxevents: 4096, timeout: 1000, sigsetsize: 8) ...
    586.593 ( 0.004 ms): gsd-color/1908 recvmsg(fd: 3, msg: 0x7ffdef34e800) = -1 EAGAIN Resource temporarily unavailable
    ? ( ): fwupd/2230 ... [continued]: poll()) = 0 Timeout
    ? ( ): rtkit-daemon/906 ... [continued]: poll()) = 0 Timeout
    ? ( ): rtkit-daemon/907 ... [continued]: poll()) = 1
    724.603 ( 0.007 ms): rtkit-daemon/907 read(fd: 6, buf: 0x7f05ff768d08, count: 8) = 8
    ? ( ): ssh/5461 ... [continued]: select()) = 1
    810.431 ( 0.002 ms): ssh/5461 clock_gettime(which_clock: BOOTTIME, tp: 0x7ffd7f39f870) = 0
    ^C

    Several syscall exit events for syscalls in flight when 'perf trace' started, etc. Saner :-)

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-c3tu5yg204p5mvr9kvwew07n@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Just to test filtering a bunch of pids, now its time to go and get that
    hooked up in 'perf trace', right after we load the bpf program, if we
    find a "pids_filtered" map defined, we'll populate it with the filtered
    pids.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-1i9s27wqqdhafk3fappow84x@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • When testing system wide tracing without filtering the syscalls called
    by 'perf trace' itself we get into a feedback loop, drop for now those
    two syscalls, that are the ones that 'perf trace' does in its loop for
    writing the syscalls it intercepts, to help with testing till we get
    that filtering in place.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-rkbu536af66dbsfx51sr8yof@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Leftover from when we started augmented_raw_syscalls.c from
    tools/perf/examples/bpf/augmented_syscalls.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Fixes: e58a0322dbac ("perf examples bpf: Start augmenting raw_syscalls:sys_{start,exit}")
    Link: https://lkml.kernel.org/n/tip-pmts9ls2skh8n3zisb4txudd@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Just to show where we'll hook pid based filters, and what we use to
    obtain the current pid, using a BPF getpid() equivalent.

    Now we need to remove that hardcoded PID with a BPF hash map, so that we
    start by filtering 'perf trace's own PID, implement the --filter-pid
    functionality, etc.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-oshrcgcekiyhd0whwisxfvtv@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo