perf: trace-event-parse: support more operators and print formats
cover perf: trace-event-parse: support more operators and print formats
These patches correspond to similar patches recently applied to trace-cmd
[ Re-sending with more Cc's ]
David Sharp (2):
perf: trace-event-parse: support additional operators: '!', '~', and
'!='
perf: trace-event-parse: support printing short fields
tools/perf/util/trace-event-parse.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-)
Signature · 1 line
1.7.3.1
PATCH 1/2 perf: trace-event-parse: support additional operators: '!', '~', and '!='
Add support for the unary operators '!' and '~', and support '!=' so that it is differentiated from '!'.
--- tools/perf/util/trace-event-parse.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-)
tools/perf/util/trace-event-parse.c +19 -0
@@ -1107,6 +1107,9 @@ static int get_op_prio(char *op) {if (!op[1 ]) {switch (op[0 ]) { +case '~' : +case '!' : +return 4 ;case '*' :case '/' :case '%' :
@@ -1184,6 +1187,7 @@ process_op(struct event *event, struct print_arg *arg, char **tok)return EVENT_ERROR ; }switch (token[0 ]) { +case '~' :case '!' :case '+' :case '-' :
@@ -2109,6 +2113,21 @@ static unsigned long long eval_num_arg(void *data, int size, left =eval_num_arg (data, size, event, arg->op.left); right =eval_num_arg (data, size, event, arg->op.right);switch (arg->op.op[0 ]) { +case '!' : +switch (arg->op.op[1 ]) { +case 0 : + val = !right; +break ; +case '=' : + val = left != right; +break ; +default : +die ("unknown op '%s'" , arg->op.op); + } +break ; +case '~' : + val = ~right; +break ;case '|' :if (arg->op.op[1 ]) val = left || right;
Signature · 1 line
1.7.3.1
PATCH 2/2 perf: trace-event-parse: support printing short fields
In reply to David SharpHandle "%hd" etc. in pretty_print()
--- tools/perf/util/trace-event-parse.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
tools/perf/util/trace-event-parse.c +9 -0
@@ -2534,6 +2534,9 @@ static void pretty_print(void *data, int size, struct event *event)case '%' :printf ("%%" );break ; +case 'h' : + ls--; + goto cont_process;case 'l' : ls++; goto cont_process;
@@ -2589,6 +2592,12 @@ static void pretty_print(void *data, int size, struct event *event) } }switch (ls) { +case -2 : +printf (format, (char )val); +break ; +case -1 : +printf (format, (short )val); +break ;case 0 :printf (format, (int )val);break ;
Signature · 1 line
1.7.3.1
Hi, any feedback on these patches? I think it's important that perf and trace-cmd don't drift in the syntax they accept.
d#
Quoted 23 lines · David Sharp
These patches correspond to similar patches recently applied to trace-cmd
[ Re-sending with more Cc's ]
Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Steven Rostedt <[email protected]>Cc Ingo Molnar <[email protected]>Cc Stephane Eranian <[email protected]>David Sharp (2):
perf: trace-event-parse: support additional operators: '!', '~', and '!='
perf: trace-event-parse: support printing short fieldstools/perf/util/trace-event-parse.c | 28 ++++++++++++++++++++++++++++
1 files changed, 28 insertions(+), 0 deletions(-)--
1.7.3.1
Quoted 4 lines · David Sharp
Hi, any feedback on these patches? I think it's important that perf and trace-cmd don't drift in the syntax they accept.
d#
Sorry, I forgot these.
Quoted 12 lines · David Sharp
Quoted 11 lines
These patches correspond to similar patches recently applied to trace-cmd
[ Re-sending with more Cc's ]
Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Steven Rostedt <[email protected]>Cc Ingo Molnar <[email protected]>Cc Stephane Eranian <[email protected]>
Quoted 4 lines
Quoted 4 lines
David Sharp (2):
perf: trace-event-parse: support additional operators: '!', '~', and '!='
perf: trace-event-parse: support printing short fields
So we now have trace events that use these new operations? Which ones? A quick grep on "TP_printk" and "!" doesn't give me any result, probably because TP_printk is often multiline.
Quoted 20 lines · Frederic Weisbecker
Quoted 4 lines · David Sharp
Hi, any feedback on these patches? I think it's important that perf and trace-cmd don't drift in the syntax they accept.
d#
Sorry, I forgot these.
Quoted 12 lines · David Sharp
Quoted 11 lines
These patches correspond to similar patches recently applied to trace-cmd
[ Re-sending with more Cc's ]
Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Steven Rostedt <[email protected]>Cc Ingo Molnar <[email protected]>Cc Stephane Eranian <[email protected]>
Quoted 9 lines
Quoted 4 lines
Quoted 4 lines
David Sharp (2):
perf: trace-event-parse: support additional operators: '!', '~', and '!='
perf: trace-event-parse: support printing short fieldsSo we now have trace events that use these new operations? Which ones? A quick grep on "
TP_printk" and "!" doesn't give me any result, probably becauseTP_printkis often multiline.
We (google) have some events that use '~' and '!', and I threw in '!=' mostly because it needed to be differentiated from '!' during tokenizing.
We set the MSB of the syscall number in raw_syscalls events to indicate a compat syscall, and use '~' and '!' (and '&' and '>>') to extract the bit. eg, for sys_exit:
print fmt: "NR %ld = %ld isCompat: %d", REC->id & (~0UL>>1), REC->ret, !!(REC->id & ~(~0UL>>1))
Patches for this will be forthcoming, but, you know: time.
If our internally-added events are not sufficient reason, I think it still makes sense to support as much of the C expression syntax as reasonable. Leaving holes in the syntax mostly just causes frustration when these operators would be useful. And since they do work with the in-kernel output (which has the whole compiler to leverage), use of unsupported operators can go unnoticed for quite a while.
Thanks,
d#
Quoted 35 lines · David Sharp
Quoted 20 lines · Frederic Weisbecker
Quoted 4 lines · David Sharp
Hi, any feedback on these patches? I think it's important that perf and trace-cmd don't drift in the syntax they accept.
d#
Sorry, I forgot these.
Quoted 12 lines · David Sharp
Quoted 11 lines
These patches correspond to similar patches recently applied to trace-cmd
[ Re-sending with more Cc's ]
Cc Arnaldo Carvalho de Melo <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Steven Rostedt <[email protected]>Cc Ingo Molnar <[email protected]>Cc Stephane Eranian <[email protected]>Quoted 9 lines
Quoted 4 lines
Quoted 4 lines
David Sharp (2):
perf: trace-event-parse: support additional operators: '!', '~', and '!='
perf: trace-event-parse: support printing short fieldsSo we now have trace events that use these new operations? Which ones? A quick grep on "
TP_printk" and "!" doesn't give me any result, probably becauseTP_printkis often multiline.We (google) have some events that use '~' and '!', and I threw in '!=' mostly because it needed to be differentiated from '!' during tokenizing.
Quoted 6 lines
We set the MSB of the syscall number in
raw_syscallsevents to indicate a compat syscall, and use '~' and '!' (and '&' and '>>') to extract the bit. eg, forsys_exit:
print fmt: "NR %ld = %ld isCompat: %d",REC->id& (~0UL>>1),REC->ret, !!(REC->id & ~(~0UL>>1))
Patches for this will be forthcoming, but, you know: time.
Please consider the compat syscall tracing patches from Jason Baron and Ian Munsie:
http://lkml.org/lkml/2010/6/23/69
They were pretty clean IIRC. Someone just need to rebase them, clean up some last things and repost.
Quoted 7 lines
If our internally-added events are not sufficient reason, I think it still makes sense to support as much of the C expression syntax as reasonable. Leaving holes in the syntax mostly just causes frustration when these operators would be useful. And since they do work with the in-kernel output (which has the whole compiler to leverage), use of unsupported operators can go unnoticed for quite a while.
Hmm, ok.