perf script: Allow +- operator for type specific fields option
Add support to add/remove fields for specific event types in -F option. It's now possible to use '+-' after event type, like: # cat > test.c #include <stdio.h> int main(void) { printf("Hello world\n"); while(1) {} } ^D # gcc -g -o test test.c # perf probe -x test 'test.c:5' # perf record -e '{cpu/cpu-cycles,period=10000/,probe_test:main}:S' ./test ... # perf script -Ftrace:+period,-cpu test 3859 396291.117343: 10275 cpu/cpu-cycles,period=10000/: 7f.. test 3859 396291.118234: 11041 cpu/cpu-cycles,period=10000/: ffffff.. test 3859 396291.118234: 1 probe_test:main: test 3859 396291.118248: 8668 cpu/cpu-cycles,period=10000/: ffffff.. test 3859 396291.118263: 10139 cpu/cpu-cycles,period=10000/: ffffff.. Committer testing: Couldn't make the test above work, but tested it with: # perf probe -x hello main Added new event: probe_hello:main (on main in /home/acme/c/hello) You can now use it in all perf tools, such as: perf record -e probe_hello:main -aR sleep 1 # perf record -e probe_hello:main ./hello hello, world [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.025 MB perf.data (1 samples) ] # perf script hello 21454 [002] 254116.874005: probe_hello:main: (401126) # # perf script -Ftrace:+period,-cpu hello 21454 254116.874005: 1 probe_hello:main: (401126) Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20190220122800.864-4-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
6e7e8b9fec
commit
6ef362fd3c
@ -159,6 +159,12 @@ OPTIONS
|
||||
the override, and the result of the above is that only S/W and H/W
|
||||
events are displayed with the given fields.
|
||||
|
||||
It's possible tp add/remove fields only for specific event type:
|
||||
|
||||
-Fsw:-cpu,-period
|
||||
|
||||
removes cpu and period from software events.
|
||||
|
||||
For the 'wildcard' option if a user selected field is invalid for an
|
||||
event type, a message is displayed to the user that the option is
|
||||
ignored for that type. For example:
|
||||
|
@ -2560,6 +2560,10 @@ static int parse_output_fields(const struct option *opt __maybe_unused,
|
||||
pr_warning("Overriding previous field request for %s events.\n",
|
||||
event_type(type));
|
||||
|
||||
/* Don't override defaults for +- */
|
||||
if (strchr(tok, '+') || strchr(tok, '-'))
|
||||
goto parse;
|
||||
|
||||
output[type].fields = 0;
|
||||
output[type].user_set = true;
|
||||
output[type].wildcard_set = false;
|
||||
@ -2644,6 +2648,10 @@ parse:
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (change == REMOVE)
|
||||
output[type].fields &= ~all_output_options[i].field;
|
||||
else
|
||||
output[type].fields |= all_output_options[i].field;
|
||||
output[type].user_set = true;
|
||||
output[type].wildcard_set = true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user