perf script: Support data page size
Display the data page size if it is available and asked by the user:
Can be configured by the user, for example:
perf script --fields comm,event,phys_addr,data_page_size
dtlb mem-loads:uP: 3fec82ea8 4K
dtlb mem-loads:uP: 3fec82e90 4K
dtlb mem-loads:uP: 3e23700a4 4K
dtlb mem-loads:uP: 3fec82f20 4K
dtlb mem-loads:uP: 3e23700a4 4K
dtlb mem-loads:uP: 3b4211bec 4K
dtlb mem-loads:uP: 382205dc0 2M
dtlb mem-loads:uP: 36fa082c0 2M
dtlb mem-loads:uP: 377607340 2M
dtlb mem-loads:uP: 330010180 2M
dtlb mem-loads:uP: 33200fd80 2M
dtlb mem-loads:uP: 31b012b80 2M
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Stephane Eranian <eranian@google.com>
Cc: Will Deacon <will@kernel.org>
Link: http://lore.kernel.org/lkml/20201216185805.9981-2-kan.liang@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
b53d4872d2
commit
6b9bae63de
@@ -32,6 +32,7 @@
|
||||
#include "ui/progress.h"
|
||||
#include "../perf.h"
|
||||
#include "arch/common.h"
|
||||
#include "units.h"
|
||||
#include <internal/lib.h>
|
||||
|
||||
#ifdef HAVE_ZSTD_SUPPORT
|
||||
@@ -1258,10 +1259,19 @@ static void dump_event(struct evlist *evlist, union perf_event *event,
|
||||
event->header.size, perf_event__name(event->header.type));
|
||||
}
|
||||
|
||||
char *get_page_size_name(u64 size, char *str)
|
||||
{
|
||||
if (!size || !unit_number__scnprintf(str, PAGE_SIZE_NAME_LEN, size))
|
||||
snprintf(str, PAGE_SIZE_NAME_LEN, "%s", "N/A");
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
static void dump_sample(struct evsel *evsel, union perf_event *event,
|
||||
struct perf_sample *sample)
|
||||
{
|
||||
u64 sample_type;
|
||||
char str[PAGE_SIZE_NAME_LEN];
|
||||
|
||||
if (!dump_trace)
|
||||
return;
|
||||
@@ -1296,6 +1306,9 @@ static void dump_sample(struct evsel *evsel, union perf_event *event,
|
||||
if (sample_type & PERF_SAMPLE_PHYS_ADDR)
|
||||
printf(" .. phys_addr: 0x%"PRIx64"\n", sample->phys_addr);
|
||||
|
||||
if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
|
||||
printf(" .. data page size: %s\n", get_page_size_name(sample->data_page_size, str));
|
||||
|
||||
if (sample_type & PERF_SAMPLE_TRANSACTION)
|
||||
printf("... transaction: %" PRIx64 "\n", sample->transaction);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user