perf probe: Support a special SDT probe format
authorMasami Hiramatsu <mhiramat@kernel.org>
Tue, 12 Jul 2016 10:05:46 +0000 (19:05 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 14 Jul 2016 02:09:09 +0000 (23:09 -0300)
Support a special SDT probe format which can omit the '%' prefix only if
the SDT group name starts with "sdt_". So, for example both of
"%sdt_libc:setjump" and "sdt_libc:setjump" are acceptable for perf probe
--add.

E.g. without this:

  # perf probe -a sdt_libc:setjmp
  Semantic error :There is non-digit char in line number.
  ...

With this:

  # perf probe -a sdt_libc:setjmp
  Added new event:
    sdt_libc:setjmp      (on %setjmp in /usr/lib64/libc-2.20.so)

  You can now use it in all perf tools, such as:

   perf record -e sdt_libc:setjmp -aR sleep 1

Suggested-by: Brendan Gregg <brendan.d.gregg@gmail.com>
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/146831794674.17065.13359473252168740430.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-probe.txt
tools/perf/util/probe-event.c

index 39e387042098d4c70a1ea2c6555784e6839ffaff..736da44596e451fa1a14d9a045f7feda269a0779 100644 (file)
@@ -152,7 +152,9 @@ Probe points are defined by following syntax.
      [[GROUP:]EVENT=]SRC;PTN [ARG ...]
 
     4) Pre-defined SDT events or cached event with name
-     %[PROVIDER:]SDTEVENT
+     %[sdt_PROVIDER:]SDTEVENT
+     or,
+     sdt_PROVIDER:SDTEVENT
 
 'EVENT' specifies the name of new event, if omitted, it will be set the name of the probed function. You can also specify a group name by 'GROUP', if omitted, set 'probe' is used for kprobe and 'probe_<bin>' is used for uprobe.
 Note that using existing group name can conflict with other events. Especially, using the group name reserved for kernel modules can hide embedded events in the
index f12081e48a3263b73cbc1fb3357887a2332aa48b..d4f8835c0a279107ca428d77ffe19cba6f8bde48 100644 (file)
@@ -1243,9 +1243,17 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
        if (!arg)
                return -EINVAL;
 
-       if (arg[0] == '%') {
+       /*
+        * If the probe point starts with '%',
+        * or starts with "sdt_" and has a ':' but no '=',
+        * then it should be a SDT/cached probe point.
+        */
+       if (arg[0] == '%' ||
+           (!strncmp(arg, "sdt_", 4) &&
+            !!strchr(arg, ':') && !strchr(arg, '='))) {
                pev->sdt = true;
-               arg++;
+               if (arg[0] == '%')
+                       arg++;
        }
 
        ptr = strpbrk(arg, ";=@+%");