tracing/hist: add modulus operator
Currently histogram field expressions can use addition ('+'),
subtraction ('-'), division ('/'), and multiplication ('*') operators.
It would be helpful to also have a modulus ('%') operator.
This is helpful for capturing the alignment of pointers. For example, on
arm64 with CONFIG_KPROBE_EVENTS_ON_NOTRACE=y, we can record the size and
alignment of copies to user with:
| # echo 'p:copy_to_user __arch_copy_to_user to=$arg1 from=$arg2 n=$arg3' >> /sys/kernel/tracing/kprobe_events
| # echo 'hist keys=n,to%8:vals=hitcount:sort=n,to%8' > /sys/kernel/tracing/events/kprobes/copy_to_user/trigger
| # cat /sys/kernel/tracing/events/kprobes/copy_to_user/hist
| # event histogram
| #
| # trigger info: hist:keys=n,to%8:vals=hitcount:sort=n,to%8:size=2048 [active]
| #
|
| { n: 1, to%8: 1 } hitcount: 5
| { n: 8, to%8: 0 } hitcount: 3
| { n: 16, to%8: 0 } hitcount: 2
| { n: 32, to%8: 0 } hitcount: 1
| { n: 36, to%8: 0 } hitcount: 1
| { n: 128, to%8: 0 } hitcount: 4
| { n: 336, to%8: 0 } hitcount: 1
| { n: 832, to%8: 0 } hitcount: 3
|
| Totals:
| Hits: 20
| Entries: 8
| Dropped: 0
Add a modulus operator, with the same precedence as multiplication and
division, matching C's operator precedence.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
Cc: Tom Zanussi <zanussi@kernel.org>
Cc: linux-trace-kernel@vger.kernel.org
2 files changed