Commit ea0ddc27 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo
Browse files

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: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarJiri 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 0d435bf8
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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,