summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicky Ringler <ricky.ringler@proton.me>2026-01-29 03:42:27 +0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2026-02-07 00:51:15 +0300
commit920c5570a67549956eb4e6922eb1ed5e32169a0d (patch)
tree6b358f6d7edf814bbb10136cfda19ebb183cb2d5
parentc73a56ed3c97ae6571c2c50e6bc8772b1cee42e0 (diff)
downloadlinux-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.c17
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 = {