Re: new syntax for perf event
From: Peter Zijlstra
Date: Thu Jan 05 2012 - 09:11:09 EST
On Wed, 2011-12-21 at 17:16 +0100, Jiri Olsa wrote:
> grammar
yacc/bison notation it seems.. lemme get the rules for that.
> -------
> events:
> event_mod ',' event_mod | event_mod
events = event_mod, {',' , event_mod};
would be the EBNF variant for allowing inf repetition, not sure how to
express that, it seems to want a recursive rule which I'm not sure I
see. The way I read your thing it only allows 1 or 2 events.
>
> event_mod:
> event | event ':' modifier
event_mod = event, [':' , modifier];
Would be the EBNF thing, and I think your rule does indeed match that.
> event:
> event_symbol |
> event_cache |
> 'cpu' '/' event_cpu |
> 'tracepoint' '/' event_tracepoint
> 'breakpoint' '/' event_breakpoint
I think I'd like to see something like:
event = pmu, '/', event_config
| event_symbol | event_cache;
pmu = ? ls /sys/bus/event_source/devices ?;
(* maybe add some aliasses like you suggest *)
event_config = (event_predef | event_term), {',', event_term};
event_predef = ? special name -> raw mapping read from somewhere ?;
event_term = event_sym, '=', value;
event_sym = "config" | "config1" | "config2"
| ? contents of /sys/bus/event_source/devices/$pmu/format ?;
value = integer | hexint;
> event_symbol:
> cpu-cycles|cycles
> stalled-cycles-frontend|idle-cycles-frontend
> stalled-cycles-backend|idle-cycles-backend
> instructions
> cache-references
> cache-misses
> branch-instructions|branches
> branch-misses
> bus-cycles
> cpu-clock
> task-clock
> page-faults|faults
> minor-faults
> major-faults
> context-switches|cs
> cpu-migrations|migrations
> alignment-faults
> emulation-faults
>
> event_cache:
> cache_type
> cache_type '-' cache_result_op
> cache_type '-' cache_result_op '-' cache_result_op
I'd write that as:
event_cache = cache_type, '-', cache_mod, ['-', cache_xs];
cache_type = cache_l1d | cache_l1i | cache_llc
| cache_dtlb | cache_itlb
| cache_branch | cache_node;
cache_mod = cache_load | cache_store | cache_prefetch;
cache_xs = cache_accesses | cache_misses;
cache_l1d = "L1-dcache" | ... ;
etc..
> event_cpu:
> 'raw' ',' event_cpu_def
> 'hw' ',' event_cpu_def
> 'cache' ',' event_cpu_def
I think these are superfluous and we could deduce them from the actual
event_term's used. Something using "config" will be a raw event etc..
>
> event_cpu_def:
> event_cpu_ass ',' event_cpu_ass |
> event_cpu_ass
>
> event_cpu_ass:
> event_cpu_elem '=' value
Hehehe, you said 'ass', hehe.
> event_tracepoint:
> system ':' tracepoint
>
> event_breakpoint:
> addr ':' type
Right, something like that.
>
> modifier:
> [ukhp]{1,4}
I think you need at least 5, or you can write it like:
modifier = ['u'], ['k'], ['h'], [3*'p'];
Also, I think we grew a few more modifiers with some of the perf kvm
guest muck.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/