Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ac77e1c authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf stat: Introduce perf_counts function



Introducing perf_counts function, that returns
'struct perf_counts_values' pointer for given cpu.

Also moving perf_counts* structures into stat.h.

Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1435310967-14570-5-git-send-email-jolsa@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 134aa44f
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ static int read_cb(struct perf_evsel *evsel, int cpu, int thread __maybe_unused,
		if (!evsel->snapshot)
			perf_evsel__compute_deltas(evsel, cpu, count);
		perf_counts_values__scale(count, scale, NULL);
		evsel->counts->cpu[cpu] = *count;
		*perf_counts(evsel->counts, cpu) = *count;
		if (aggr_mode == AGGR_NONE)
			perf_stat__update_shadow_stats(evsel, count->values, cpu);
		break;
@@ -805,9 +805,9 @@ static void print_aggr(char *prefix)
				s2 = aggr_get_id(evsel_list->cpus, cpu2);
				if (s2 != id)
					continue;
				val += counter->counts->cpu[cpu].val;
				ena += counter->counts->cpu[cpu].ena;
				run += counter->counts->cpu[cpu].run;
				val += perf_counts(counter->counts, cpu)->val;
				ena += perf_counts(counter->counts, cpu)->ena;
				run += perf_counts(counter->counts, cpu)->run;
				nr++;
			}
			if (prefix)
@@ -915,9 +915,9 @@ static void print_counter(struct perf_evsel *counter, char *prefix)
	int cpu;

	for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
		val = counter->counts->cpu[cpu].val;
		ena = counter->counts->cpu[cpu].ena;
		run = counter->counts->cpu[cpu].run;
		val = perf_counts(counter->counts, cpu)->val;
		ena = perf_counts(counter->counts, cpu)->ena;
		run = perf_counts(counter->counts, cpu)->run;

		if (prefix)
			fprintf(output, "%s", prefix);
+2 −2
Original line number Diff line number Diff line
@@ -98,9 +98,9 @@ int test__openat_syscall_event_on_all_cpus(void)
		}

		expected = nr_openat_calls + cpu;
		if (evsel->counts->cpu[cpu].val != expected) {
		if (perf_counts(evsel->counts, cpu)->val != expected) {
			pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls on cpu %d, got %" PRIu64 "\n",
				 expected, cpus->map[cpu], evsel->counts->cpu[cpu].val);
				 expected, cpus->map[cpu], perf_counts(evsel->counts, cpu)->val);
			err = -1;
		}
	}
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ int test__openat_syscall_event(void)
		goto out_close_fd;
	}

	if (evsel->counts->cpu[0].val != nr_openat_calls) {
	if (perf_counts(evsel->counts, 0)->val != nr_openat_calls) {
		pr_debug("perf_evsel__read_on_cpu: expected to intercept %d calls, got %" PRIu64 "\n",
			 nr_openat_calls, evsel->counts->cpu[0].val);
		goto out_close_fd;
+3 −3
Original line number Diff line number Diff line
@@ -910,8 +910,8 @@ void perf_evsel__compute_deltas(struct perf_evsel *evsel, int cpu,
		tmp = evsel->prev_raw_counts->aggr;
		evsel->prev_raw_counts->aggr = *count;
	} else {
		tmp = evsel->prev_raw_counts->cpu[cpu];
		evsel->prev_raw_counts->cpu[cpu] = *count;
		tmp = *perf_counts(evsel->prev_raw_counts, cpu);
		*perf_counts(evsel->prev_raw_counts, cpu) = *count;
	}

	count->val = count->val - tmp.val;
@@ -972,7 +972,7 @@ int __perf_evsel__read_on_cpu(struct perf_evsel *evsel,

	perf_evsel__compute_deltas(evsel, cpu, &count);
	perf_counts_values__scale(&count, scale, NULL);
	evsel->counts->cpu[cpu] = count;
	*perf_counts(evsel->counts, cpu) = count;
	return 0;
}

+1 −17
Original line number Diff line number Diff line
@@ -9,23 +9,7 @@
#include "xyarray.h"
#include "symbol.h"
#include "cpumap.h"

struct perf_counts_values {
	union {
		struct {
			u64 val;
			u64 ena;
			u64 run;
		};
		u64 values[3];
	};
};

struct perf_counts {
	s8		   	  scaled;
	struct perf_counts_values aggr;
	struct perf_counts_values cpu[];
};
#include "stat.h"

struct perf_evsel;

Loading