Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf probe: Support a special SDT probe format

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>

authored by

Masami Hiramatsu and committed by
Arnaldo Carvalho de Melo
7e9fca51 a598180a

+13 -3
+3 -1
tools/perf/Documentation/perf-probe.txt
··· 152 152 [[GROUP:]EVENT=]SRC;PTN [ARG ...] 153 153 154 154 4) Pre-defined SDT events or cached event with name 155 - %[PROVIDER:]SDTEVENT 155 + %[sdt_PROVIDER:]SDTEVENT 156 + or, 157 + sdt_PROVIDER:SDTEVENT 156 158 157 159 '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. 158 160 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
+10 -2
tools/perf/util/probe-event.c
··· 1243 1243 if (!arg) 1244 1244 return -EINVAL; 1245 1245 1246 - if (arg[0] == '%') { 1246 + /* 1247 + * If the probe point starts with '%', 1248 + * or starts with "sdt_" and has a ':' but no '=', 1249 + * then it should be a SDT/cached probe point. 1250 + */ 1251 + if (arg[0] == '%' || 1252 + (!strncmp(arg, "sdt_", 4) && 1253 + !!strchr(arg, ':') && !strchr(arg, '='))) { 1247 1254 pev->sdt = true; 1248 - arg++; 1255 + if (arg[0] == '%') 1256 + arg++; 1249 1257 } 1250 1258 1251 1259 ptr = strpbrk(arg, ";=@+%");