Messages in this thread | | | Date | Fri, 17 Sep 2021 23:35:05 -0700 | Subject | [PATCH v8 0/8] Don't compute events that won't be used in a metric. | From | Ian Rogers <> |
| |
For a metric like: EVENT1 if #smt_on else EVENT2
currently EVENT1 and EVENT2 will be measured and then when the metric is reported EVENT1 or EVENT2 will be printed depending on the value from smt_on() during the expr parsing. Computing both events is unnecessary and can lead to multiplexing as discussed in this thread: https://lore.kernel.org/lkml/20201110100346.2527031-1-irogers@google.com/
This change modifies expression parsing so that constants are considered when building the set of ids (events) and only events not contributing to a constant value are measured.
v8. rebases, adds an ability to compute metrics with no events and further breaks apart the "Don't compute unused events" part of the change as requested by Jiri Olsa <jolsa@redhat.com>.
v7. fixes the fix to be in the correct patch.
v6. rebases and fixes issues raised by Namhyung Kim <namhyung@kernel.org>, a memory leak and a function comment.
v5. uses macros to reduce boiler plate in patch 5/5 as suggested by Andi Kleen <ak@linux.intel.com>.
v4. reduces references to BOTTOM/NAN in patch 5/5 by using utility functions. It improves comments and fixes an unnecessary union in a peephole optimization.
v3. fixes an assignment in patch 2/5. In patch 5/5 additional comments are added and useless frees are replaced by asserts. A new peephole optimization is added for the case CONST IF expr ELSE CONST, where the the constants are identical, as we don't need to evaluate the IF condition.
v2. is a rebase.
Ian Rogers (8): perf metric: Restructure struct expr_parse_ctx. perf metric: Use NAN for missing event IDs. perf expr: Modify code layout perf metric: Rename expr__find_other. perf metric: Add utilities to work on ids map. perf metric: Allow metrics with no events perf metric: Don't compute unused events. perf test: Add metric test for eliminating events
tools/perf/tests/expr.c | 159 +++++++++++----- tools/perf/tests/pmu-events.c | 50 ++--- tools/perf/util/expr.c | 137 ++++++++++++-- tools/perf/util/expr.h | 21 ++- tools/perf/util/expr.l | 9 - tools/perf/util/expr.y | 343 ++++++++++++++++++++++++++-------- tools/perf/util/metricgroup.c | 145 +++++++------- tools/perf/util/stat-shadow.c | 54 ++++-- 8 files changed, 650 insertions(+), 268 deletions(-)
-- 2.33.0.464.g1972c5931b-goog
| |