perf mem: Print memory operation type
authorLeo Yan <leo.yan@linaro.org>
Sun, 17 Apr 2022 12:45:24 +0000 (20:45 +0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 18 Apr 2022 14:44:06 +0000 (11:44 -0300)
The memory operation types are not only for load and store, for easier
reviewing the memory operation type, this patch prints out it.

Before:
  ls 14753 [011]  3678.072400:  1    l1d-miss:  88000182 L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1  l1d-access:  88000182 L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1  tlb-access:  88000182 L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1      memory:  88000182 L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])

After:

  ls 14753 [011]  3678.072400:  1    l1d-miss:  88000182 |OP LOAD|LVL L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1  l1d-access:  88000182 |OP LOAD|LVL L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1  tlb-access:  88000182 |OP LOAD|LVL L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])
  ls 14753 [011]  3678.072400:  1      memory:  88000182 |OP LOAD|LVL L1 miss|SNP N/A|TLB Walker hit|LCK No|BLK  N/A ffffa7c22b4b2a00 [unknown] ([kernel.kallsyms])

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ali Saidi <alisaidi@amazon.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Li Huafei <lihuafei1@huawei.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220417124524.901148-1-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/mem-events.c

index ed0ab838bcc5dc7ff7dbc93c7b182831bbdcb716..efaf263464b97c44c56dbbc7d718dbf2d20076c1 100644 (file)
@@ -314,6 +314,30 @@ static const char * const mem_hops[] = {
        "board",
 };
 
+static int perf_mem__op_scnprintf(char *out, size_t sz, struct mem_info *mem_info)
+{
+       u64 op = PERF_MEM_LOCK_NA;
+       int l;
+
+       if (mem_info)
+               op = mem_info->data_src.mem_op;
+
+       if (op & PERF_MEM_OP_NA)
+               l = scnprintf(out, sz, "N/A");
+       else if (op & PERF_MEM_OP_LOAD)
+               l = scnprintf(out, sz, "LOAD");
+       else if (op & PERF_MEM_OP_STORE)
+               l = scnprintf(out, sz, "STORE");
+       else if (op & PERF_MEM_OP_PFETCH)
+               l = scnprintf(out, sz, "PFETCH");
+       else if (op & PERF_MEM_OP_EXEC)
+               l = scnprintf(out, sz, "EXEC");
+       else
+               l = scnprintf(out, sz, "No");
+
+       return l;
+}
+
 int perf_mem__lvl_scnprintf(char *out, size_t sz, struct mem_info *mem_info)
 {
        size_t i, l = 0;
@@ -466,7 +490,10 @@ int perf_script__meminfo_scnprintf(char *out, size_t sz, struct mem_info *mem_in
 {
        int i = 0;
 
-       i += perf_mem__lvl_scnprintf(out, sz, mem_info);
+       i += scnprintf(out, sz, "|OP ");
+       i += perf_mem__op_scnprintf(out + i, sz - i, mem_info);
+       i += scnprintf(out + i, sz - i, "|LVL ");
+       i += perf_mem__lvl_scnprintf(out + i, sz, mem_info);
        i += scnprintf(out + i, sz - i, "|SNP ");
        i += perf_mem__snp_scnprintf(out + i, sz - i, mem_info);
        i += scnprintf(out + i, sz - i, "|TLB ");