Commit b3719108 authored by Leo Yan's avatar Leo Yan Committed by Arnaldo Carvalho de Melo

perf kmem: Support legacy tracepoints

Commit 11e9734b ("mm/slab_common: unify NUMA and UMA version of
tracepoints") removed tracepoints 'kmalloc_node' and
'kmem_cache_alloc_node', we need to consider the tool should be backward
compatible.

If it detect the tracepoint "kmem:kmalloc_node", this patch enables the
legacy tracepoints, otherwise, it will ignore them.

Fixes: 11e9734b ("mm/slab_common: unify NUMA and UMA version of tracepoints")
Reported-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
Reviewed-by: default avatarJames Clark <james.clark@arm.com>
Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Link: https://lore.kernel.org/r/20230108062400.250690-1-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent d891f2b7
...@@ -1824,6 +1824,19 @@ static int parse_line_opt(const struct option *opt __maybe_unused, ...@@ -1824,6 +1824,19 @@ static int parse_line_opt(const struct option *opt __maybe_unused,
return 0; return 0;
} }
static bool slab_legacy_tp_is_exposed(void)
{
/*
* The tracepoints "kmem:kmalloc_node" and
* "kmem:kmem_cache_alloc_node" have been removed on the latest
* kernel, if the tracepoint "kmem:kmalloc_node" is existed it
* means the tool is running on an old kernel, we need to
* rollback to support these legacy tracepoints.
*/
return IS_ERR(trace_event__tp_format("kmem", "kmalloc_node")) ?
false : true;
}
static int __cmd_record(int argc, const char **argv) static int __cmd_record(int argc, const char **argv)
{ {
const char * const record_args[] = { const char * const record_args[] = {
...@@ -1831,22 +1844,28 @@ static int __cmd_record(int argc, const char **argv) ...@@ -1831,22 +1844,28 @@ static int __cmd_record(int argc, const char **argv)
}; };
const char * const slab_events[] = { const char * const slab_events[] = {
"-e", "kmem:kmalloc", "-e", "kmem:kmalloc",
"-e", "kmem:kmalloc_node",
"-e", "kmem:kfree", "-e", "kmem:kfree",
"-e", "kmem:kmem_cache_alloc", "-e", "kmem:kmem_cache_alloc",
"-e", "kmem:kmem_cache_alloc_node",
"-e", "kmem:kmem_cache_free", "-e", "kmem:kmem_cache_free",
}; };
const char * const slab_legacy_events[] = {
"-e", "kmem:kmalloc_node",
"-e", "kmem:kmem_cache_alloc_node",
};
const char * const page_events[] = { const char * const page_events[] = {
"-e", "kmem:mm_page_alloc", "-e", "kmem:mm_page_alloc",
"-e", "kmem:mm_page_free", "-e", "kmem:mm_page_free",
}; };
unsigned int rec_argc, i, j; unsigned int rec_argc, i, j;
const char **rec_argv; const char **rec_argv;
unsigned int slab_legacy_tp_exposed = slab_legacy_tp_is_exposed();
rec_argc = ARRAY_SIZE(record_args) + argc - 1; rec_argc = ARRAY_SIZE(record_args) + argc - 1;
if (kmem_slab) if (kmem_slab) {
rec_argc += ARRAY_SIZE(slab_events); rec_argc += ARRAY_SIZE(slab_events);
if (slab_legacy_tp_exposed)
rec_argc += ARRAY_SIZE(slab_legacy_events);
}
if (kmem_page) if (kmem_page)
rec_argc += ARRAY_SIZE(page_events) + 1; /* for -g */ rec_argc += ARRAY_SIZE(page_events) + 1; /* for -g */
...@@ -1861,6 +1880,10 @@ static int __cmd_record(int argc, const char **argv) ...@@ -1861,6 +1880,10 @@ static int __cmd_record(int argc, const char **argv)
if (kmem_slab) { if (kmem_slab) {
for (j = 0; j < ARRAY_SIZE(slab_events); j++, i++) for (j = 0; j < ARRAY_SIZE(slab_events); j++, i++)
rec_argv[i] = strdup(slab_events[j]); rec_argv[i] = strdup(slab_events[j]);
if (slab_legacy_tp_exposed) {
for (j = 0; j < ARRAY_SIZE(slab_legacy_events); j++, i++)
rec_argv[i] = strdup(slab_legacy_events[j]);
}
} }
if (kmem_page) { if (kmem_page) {
rec_argv[i++] = strdup("-g"); rec_argv[i++] = strdup("-g");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment