Skip to content

Commit

Permalink
perf c2c: Support record for hybrid platform
Browse files Browse the repository at this point in the history
Support 'perf c2c record' for hybrid platform. On hybrid platform,
such as Alderlake, when executing 'perf c2c record', it actually calls:

record -W -d --phys-data --sample-cpu
-e {cpu_core/mem-loads-aux/,cpu_core/mem-loads,ldlat=30/}:P
-e cpu_atom/mem-loads,ldlat=30/P
-e cpu_core/mem-stores/P
-e cpu_atom/mem-stores/P

Signed-off-by: Jin Yao <[email protected]>
Acked-by: Jiri Olsa <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Kan Liang <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
Jin Yao authored and acmel committed Jun 1, 2021
1 parent d5a8bd0 commit 79e157b
Showing 1 changed file with 23 additions and 17 deletions.
40 changes: 23 additions & 17 deletions tools/perf/builtin-c2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
#include "ui/ui.h"
#include "ui/progress.h"
#include "../perf.h"
#include "pmu.h"
#include "pmu-hybrid.h"

struct c2c_hists {
struct hists hists;
Expand Down Expand Up @@ -2907,8 +2909,9 @@ static const char * const *record_mem_usage = __usage_record;

static int perf_c2c__record(int argc, const char **argv)
{
int rec_argc, i = 0, j;
int rec_argc, i = 0, j, rec_tmp_nr = 0;
const char **rec_argv;
char **rec_tmp;
int ret;
bool all_user = false, all_kernel = false;
bool event_set = false;
Expand All @@ -2932,11 +2935,21 @@ static int perf_c2c__record(int argc, const char **argv)
argc = parse_options(argc, argv, options, record_mem_usage,
PARSE_OPT_KEEP_UNKNOWN);

rec_argc = argc + 11; /* max number of arguments */
if (!perf_pmu__has_hybrid())
rec_argc = argc + 11; /* max number of arguments */
else
rec_argc = argc + 11 * perf_pmu__hybrid_pmu_num();

rec_argv = calloc(rec_argc + 1, sizeof(char *));
if (!rec_argv)
return -1;

rec_tmp = calloc(rec_argc + 1, sizeof(char *));
if (!rec_tmp) {
free(rec_argv);
return -1;
}

rec_argv[i++] = "record";

if (!event_set) {
Expand Down Expand Up @@ -2964,21 +2977,9 @@ static int perf_c2c__record(int argc, const char **argv)
rec_argv[i++] = "--phys-data";
rec_argv[i++] = "--sample-cpu";

for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
e = perf_mem_events__ptr(j);
if (!e->record)
continue;

if (!e->supported) {
pr_err("failed: event '%s' not supported\n",
perf_mem_events__name(j, NULL));
free(rec_argv);
return -1;
}

rec_argv[i++] = "-e";
rec_argv[i++] = perf_mem_events__name(j, NULL);
}
ret = perf_mem_events__record_args(rec_argv, &i, rec_tmp, &rec_tmp_nr);
if (ret)
goto out;

if (all_user)
rec_argv[i++] = "--all-user";
Expand All @@ -3002,6 +3003,11 @@ static int perf_c2c__record(int argc, const char **argv)
}

ret = cmd_record(i, rec_argv);
out:
for (i = 0; i < rec_tmp_nr; i++)
free(rec_tmp[i]);

free(rec_tmp);
free(rec_argv);
return ret;
}
Expand Down

0 comments on commit 79e157b

Please sign in to comment.