diff options
| author | Ricky Ringler <ricky.ringler@proton.me> | 2026-01-29 03:42:27 +0300 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2026-02-07 00:51:15 +0300 |
| commit | 920c5570a67549956eb4e6922eb1ed5e32169a0d (patch) | |
| tree | 6b358f6d7edf814bbb10136cfda19ebb183cb2d5 | |
| parent | c73a56ed3c97ae6571c2c50e6bc8772b1cee42e0 (diff) | |
| download | linux-920c5570a67549956eb4e6922eb1ed5e32169a0d.tar.xz | |
perf sort: Replace static cacheline size with sysconf cacheline size
Testing:
- Built perf
- Executed perf mem record and report
Committer notes:
This addresses a TODO and improves the situation where record and
report/c2c are performed on the same machine or in machines with the
same cacheline size, but the proper way is to store the cacheline size
in the perf.data header at 'record' time and then use it at post
processing time.
Signed-off-by: Ricky Ringler <ricky.ringler@proton.me>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20260129004223.26799-1-ricky.ringler@proton.me
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/perf/util/sort.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c index 01a9d73ae348..42d5cd7ef4e2 100644 --- a/tools/perf/util/sort.c +++ b/tools/perf/util/sort.c @@ -2474,8 +2474,7 @@ struct sort_entry sort_type_offset = { /* --sort typecln */ -/* TODO: use actual value in the system */ -#define TYPE_CACHELINE_SIZE 64 +#define DEFAULT_CACHELINE_SIZE 64 static int64_t sort__typecln_sort(struct hist_entry *left, struct hist_entry *right) @@ -2484,6 +2483,10 @@ sort__typecln_sort(struct hist_entry *left, struct hist_entry *right) struct annotated_data_type *right_type = right->mem_type; int64_t left_cln, right_cln; int64_t ret; + int cln_size = cacheline_size(); + + if (cln_size == 0) + cln_size = DEFAULT_CACHELINE_SIZE; if (!left_type) { sort__type_init(left); @@ -2499,8 +2502,8 @@ sort__typecln_sort(struct hist_entry *left, struct hist_entry *right) if (ret) return ret; - left_cln = left->mem_type_off / TYPE_CACHELINE_SIZE; - right_cln = right->mem_type_off / TYPE_CACHELINE_SIZE; + left_cln = left->mem_type_off / cln_size; + right_cln = right->mem_type_off / cln_size; return left_cln - right_cln; } @@ -2508,9 +2511,13 @@ static int hist_entry__typecln_snprintf(struct hist_entry *he, char *bf, size_t size, unsigned int width __maybe_unused) { struct annotated_data_type *he_type = he->mem_type; + int cln_size = cacheline_size(); + + if (cln_size == 0) + cln_size = DEFAULT_CACHELINE_SIZE; return repsep_snprintf(bf, size, "%s: cache-line %d", he_type->self.type_name, - he->mem_type_off / TYPE_CACHELINE_SIZE); + he->mem_type_off / cln_size); } struct sort_entry sort_type_cacheline = { |
