perf lock: Carefully combine lock stats for discarded entries
Stats from discarded entries should be omitted. But a lock class may have both good and bad entries. If the first entry was bad, we can zero-fill the stats and only add good stats if any. The entry can remove the discard state if it finds a good entry later. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20220127000050.3011493-7-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
0d435bf8c3
commit
ea0ddc27e2
@ -295,6 +295,9 @@ static void combine_lock_stats(struct lock_stat *st)
|
||||
ret = !!st->name - !!p->name;
|
||||
|
||||
if (ret == 0) {
|
||||
if (st->discard)
|
||||
goto out;
|
||||
|
||||
p->nr_acquired += st->nr_acquired;
|
||||
p->nr_contended += st->nr_contended;
|
||||
p->wait_time_total += st->wait_time_total;
|
||||
@ -307,6 +310,10 @@ static void combine_lock_stats(struct lock_stat *st)
|
||||
if (p->wait_time_max < st->wait_time_max)
|
||||
p->wait_time_max = st->wait_time_max;
|
||||
|
||||
/* now it got a new !discard record */
|
||||
p->discard = 0;
|
||||
|
||||
out:
|
||||
st->combined = 1;
|
||||
return;
|
||||
}
|
||||
@ -319,6 +326,15 @@ static void combine_lock_stats(struct lock_stat *st)
|
||||
|
||||
rb_link_node(&st->rb, parent, rb);
|
||||
rb_insert_color(&st->rb, &sorted);
|
||||
|
||||
if (st->discard) {
|
||||
st->nr_acquired = 0;
|
||||
st->nr_contended = 0;
|
||||
st->wait_time_total = 0;
|
||||
st->avg_wait_time = 0;
|
||||
st->wait_time_min = ULLONG_MAX;
|
||||
st->wait_time_max = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void insert_to_result(struct lock_stat *st,
|
||||
|
Loading…
Reference in New Issue
Block a user