Messages in this thread | | | Date | Tue, 26 May 2020 13:51:55 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH v2 1/2] perf evlist: Ensure grouped events with same cpu map |
| |
On Mon, May 25, 2020 at 02:55:58PM +0800, Jin Yao wrote:
SNIP
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 2a9de6491700..1161cffc0688 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -1704,3 +1704,52 @@ struct evsel *perf_evlist__reset_weak_group(struct evlist *evsel_list, > } > return leader; > } > + > +static bool cpus_map_matched(struct evsel *prev, struct evsel *evsel) > +{ > + if (evsel->core.cpus->nr != prev->core.cpus->nr) > + return false; > + > + for (int i = 0; i < evsel->core.cpus->nr; i++) { > + if (evsel->core.cpus->map[i] != prev->core.cpus->map[i]) > + return false; > + } > + > + return true; > +} > + > +bool evlist__cpus_map_matched(struct evlist *evlist) > +{ > + struct evsel *prev = evlist__first(evlist), *evsel = prev; > + int nr_members = prev->core.nr_members; > + > + evlist__for_each_entry_continue(evlist, evsel) { > + if (nr_members <= 1) { > + prev = evsel; > + nr_members = evsel->core.nr_members; > + continue; > + } > + > + nr_members--; > + > + if (!cpus_map_matched(prev, evsel)) > + return false; > + > + prev = evsel; > + } > + > + return true; > +} > + > +void evlist__force_disable_group(struct evlist *evlist) > +{ > + struct evsel *evsel; > + > + pr_warning("WARNING: event cpu maps are not fully matched, " > + "stop event grouping\n"); > + > + evlist__for_each_entry(evlist, evsel) { > + evsel->leader = evsel; > + evsel->core.nr_members = 0; > + } > +}
I think this is too much, we need to disable only groups with not matching cpus, not all of them, how about something like this
struct evsel *pos;
evlist__for_each_entry(evlist, evsel) { if (evsel->leader == evsel) continue; if (!cpus_map_matched(evsel->leader, evsel)) continue; pr_warn("Disabling group...
for_each_group_member(pos, evsel->leader) { pos->leader = pos; evsel->core.nr_members = 0; } }
jirka
| |