perf tools: Expression parser enhancements for metrics
Enhance the expression parser for more complex metric formulas. - Support python style IF ELSE operators - Add an #SMT_On magic variable for formulas that depend on the SMT status. Example: 4 *( CPU_CLK_UNHALTED.THREAD_ANY / 2 ) if #SMT_on else cycles - Support MIN/MAX operations Example: min(1 , IDQ.MITE_UOPS / ( UPI * 16 * ( ICACHE.HIT + ICACHE.MISSES ) / 4.0 ) ) This is useful to fix up problems caused by multiplexing. - Support | & ^ operators - Minor cleanups and fixes - Support an \ escape for operators. This allows to specify event names like c2-residency - Support @ as an alternative for / to be able to specify pmus without conflicts with operators (like msr/tsc/ as msr@tsc@) Example: (cstate_core@c3\\-residency@ / msr@tsc@) * 100 Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Link: http://lkml.kernel.org/r/20170811232634.30465-8-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
de5077c4e3
commit
d73bad0685
@@ -31,6 +31,11 @@ int test__expr(struct test *t __maybe_unused, int subtest __maybe_unused)
|
||||
ret |= test(&ctx, "(BAR/2)%2", 1);
|
||||
ret |= test(&ctx, "1 - -4", 5);
|
||||
ret |= test(&ctx, "(FOO-1)*2 + (BAR/2)%2 - -4", 5);
|
||||
ret |= test(&ctx, "1-1 | 1", 1);
|
||||
ret |= test(&ctx, "1-1 & 1", 0);
|
||||
ret |= test(&ctx, "min(1,2) + 1", 2);
|
||||
ret |= test(&ctx, "max(1,2) + 1", 3);
|
||||
ret |= test(&ctx, "1+1 if 3*4 else 0", 2);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user