• Masami Hiramatsu's avatar
    perf probe: Support $params special probe argument · f8bffbf1
    Masami Hiramatsu authored
    $params is similar to $vars but matches only function parameters not
    local variables.
    
    Thus, this is useful for tracing function parameter changing or tracing
    function call with parameters.
    
    Testing it:
    
     # perf probe tcp_sendmsg '$params'
     Added new event:
      probe:tcp_sendmsg    (on tcp_sendmsg with $params)
    
     You can now use it in all perf tools, such as:
    
    	perf record -e probe:tcp_sendmsg -aR sleep 1
    
     # perf probe -l
      probe:tcp_sendmsg    (on tcp_sendmsg@acme/git/linux/net/ipv4/tcp.c with iocb sk msg size)
     # perf record -a -e probe:*
     press some random letters to generate TCP (sshd) traffic...
    
     ^C[ perf record: Woken up 1 times to write data ]
     [ perf record: Captured and wrote 0.223 MB perf.data (6 samples) ]
    
     # perf script
       sshd 6385 [2] 3.907529: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
       sshd 6385 [2] 4.138973: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
       sshd 6385 [2] 4.378966: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
       sshd 6385 [2] 4.603681: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
       sshd 6385 [2] 4.818455: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
       sshd 6385 [2] 5.043603: probe:tcp_sendmsg: iocb=0xffff8800ac4cfe70 sk=0xffff88042196c140 msg=0xffff8800ac4cfda8 size=0x24
     # cat /sys/kernel/debug/tracing/events/probe/tcp_sendmsg/format
     name: tcp_sendmsg
     ID: 1927
     format:
       field:unsigned short common_type;	offset:0;	size:2;	signed:0;
       field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
       field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
       field:int common_pid;	offset:4;	size:4;	signed:1;
    
       field:unsigned long __probe_ip;	offset:8;	size:8;	signed:0;
       field:u64 iocb;	offset:16;	size:8;	signed:0;
       field:u64 sk;	offset:24;	size:8;	signed:0;
       field:u64 msg;	offset:32;	size:8;	signed:0;
       field:u64 size;	offset:40;	size:8;	signed:0;
    
     print fmt: "(%lx) iocb=0x%Lx sk=0x%Lx msg=0x%Lx size=0x%Lx", REC->__probe_ip, REC->iocb, REC->sk, REC->msg, REC->size
     #
    
     Do some system wide tracing of this probe + write syscalls:
    
     # perf trace -e write --ev probe:* --filter-pids 6385
      462.612 (0.010 ms): bash/19153 write(fd: 1</dev/pts/1>, buf: 0x7f7556c78000, count: 29               ) = 29
      462.701 (0.027 ms): sshd/19152 write(fd: 3<socket:[63117]>, buf: 0x7f78dd12e160, count: 68           ) ...
      462.701 (        ): probe:tcp_sendmsg:(ffffffff8163db30) iocb=0xffff8803ebec7e70 sk=0xffff88042196ab80 msg=0xffff8803ebec7da8 size=0x44)
      462.710 (0.035 ms): sshd/19152  ... [continued]: write()) = 68
      462.787 (0.009 ms): bash/19153 write(fd: 2</dev/pts/1>, buf: 0x7f7556c77000, count: 22               ) = 22
      462.865 (0.002 ms): sshd/19152 write(fd: 3<socket:[63117]>, buf: 0x7f78dd12e160, count: 68           ) ...
      462.865 (        ): probe:tcp_sendmsg:(ffffffff8163db30) iocb=0xffff8803ebec7e70 sk=0xffff88042196ab80 msg=0xffff8803ebec7da8 size=0x44)
      462.873 (0.010 ms): sshd/19152  ... [continued]: write()) = 68
    Signed-off-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20150506124653.4961.59806.stgit@localhost.localdomain
    [ Add some examples to the changelog message showing how to use it ]
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    f8bffbf1
probe-finder.c 41.6 KB