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>
This commit is contained in:
Родитель
a598180aa1
Коммит
7e9fca51fb
|
@ -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
|
||||
|
|
|
@ -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, ";=@+%");
|
||||
|
|
Загрузка…
Ссылка в новой задаче