Messages in this thread | | | Date | Wed, 23 Aug 2017 19:43:01 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH v2 08/19] perf, tools: Expression parser enhancements for metrics |
| |
On Fri, Aug 11, 2017 at 04:26:23PM -0700, Andi Kleen wrote: > From: Andi Kleen <ak@linux.intel.com> > > 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> > --- > tools/perf/tests/expr.c | 5 ++++ > tools/perf/util/expr.y | 61 ++++++++++++++++++++++++++++++++++++++++++++----- > 2 files changed, 60 insertions(+), 6 deletions(-) > > diff --git a/tools/perf/tests/expr.c b/tools/perf/tests/expr.c > index 6c6a3749aaf6..e75365098f23 100644 > --- a/tools/perf/tests/expr.c > +++ b/tools/perf/tests/expr.c > @@ -31,6 +31,11 @@ int test__expr(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);
fyi I'm getting on Arnaldo's tree 'syntax error' but test is passing
[jolsa@krava perf]$ ./perf test expr -v 6: Simple expression parser : --- start --- test child forked, pid 1520 syntax error test child finished with 0 ---- end ---- Simple expression parser: Ok
jirka
| |