Commit b5f2511d authored by Alexey Bayduraev's avatar Alexey Bayduraev Committed by Arnaldo Carvalho de Melo

perf record: Implement compatibility checks

Implement compatibility checks for other modes and related command line
options: asynchronous (--aio) trace streaming and affinity (--affinity)
modes, pipe mode, AUX area tracing --snapshot and --aux-sample options,
--switch-output, --switch-output-event, --switch-max-files and
--timestamp-filename options. Parallel data streaming is compatible with
Zstd compression (--compression-level) and external control commands
(--control). CPU mask provided via -C option filters --threads
specification masks.
Reviewed-by: default avatarRiccardo Mancini <rickyman7@gmail.com>
Signed-off-by: default avatarAlexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
Tested-by: default avatarJiri Olsa <jolsa@kernel.org>
Tested-by: default avatarRiccardo Mancini <rickyman7@gmail.com>
Acked-by: default avatarNamhyung Kim <namhyung@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexei Budankov <abudankov@huawei.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/fadc1cf74057af4d5766248fcfe5cdde40732aa9.1642440724.git.alexey.v.bayduraev@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f466e5ed
...@@ -805,6 +805,12 @@ static int record__auxtrace_init(struct record *rec) ...@@ -805,6 +805,12 @@ static int record__auxtrace_init(struct record *rec)
{ {
int err; int err;
if ((rec->opts.auxtrace_snapshot_opts || rec->opts.auxtrace_sample_opts)
&& record__threads_enabled(rec)) {
pr_err("AUX area tracing options are not available in parallel streaming mode.\n");
return -EINVAL;
}
if (!rec->itr) { if (!rec->itr) {
rec->itr = auxtrace_record__init(rec->evlist, &err); rec->itr = auxtrace_record__init(rec->evlist, &err);
if (err) if (err)
...@@ -2198,6 +2204,17 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) ...@@ -2198,6 +2204,17 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
return PTR_ERR(session); return PTR_ERR(session);
} }
if (record__threads_enabled(rec)) {
if (perf_data__is_pipe(&rec->data)) {
pr_err("Parallel trace streaming is not available in pipe mode.\n");
return -1;
}
if (rec->opts.full_auxtrace) {
pr_err("Parallel trace streaming is not available in AUX area tracing mode.\n");
return -1;
}
}
fd = perf_data__fd(data); fd = perf_data__fd(data);
rec->session = session; rec->session = session;
...@@ -2938,12 +2955,22 @@ static int switch_output_setup(struct record *rec) ...@@ -2938,12 +2955,22 @@ static int switch_output_setup(struct record *rec)
* --switch-output=signal, as we'll send a SIGUSR2 from the side band * --switch-output=signal, as we'll send a SIGUSR2 from the side band
* thread to its parent. * thread to its parent.
*/ */
if (rec->switch_output_event_set) if (rec->switch_output_event_set) {
if (record__threads_enabled(rec)) {
pr_warning("WARNING: --switch-output-event option is not available in parallel streaming mode.\n");
return 0;
}
goto do_signal; goto do_signal;
}
if (!s->set) if (!s->set)
return 0; return 0;
if (record__threads_enabled(rec)) {
pr_warning("WARNING: --switch-output option is not available in parallel streaming mode.\n");
return 0;
}
if (!strcmp(s->str, "signal")) { if (!strcmp(s->str, "signal")) {
do_signal: do_signal:
s->signal = true; s->signal = true;
...@@ -3262,8 +3289,8 @@ static struct option __record_options[] = { ...@@ -3262,8 +3289,8 @@ static struct option __record_options[] = {
"Set affinity mask of trace reading thread to NUMA node cpu mask or cpu of processed mmap buffer", "Set affinity mask of trace reading thread to NUMA node cpu mask or cpu of processed mmap buffer",
record__parse_affinity), record__parse_affinity),
#ifdef HAVE_ZSTD_SUPPORT #ifdef HAVE_ZSTD_SUPPORT
OPT_CALLBACK_OPTARG('z', "compression-level", &record.opts, &comp_level_default, OPT_CALLBACK_OPTARG('z', "compression-level", &record.opts, &comp_level_default, "n",
"n", "Compressed records using specified level (default: 1 - fastest compression, 22 - greatest compression)", "Compress records using specified level (default: 1 - fastest compression, 22 - greatest compression)",
record__parse_comp_level), record__parse_comp_level),
#endif #endif
OPT_CALLBACK(0, "max-size", &record.output_max_size, OPT_CALLBACK(0, "max-size", &record.output_max_size,
...@@ -3758,6 +3785,17 @@ int cmd_record(int argc, const char **argv) ...@@ -3758,6 +3785,17 @@ int cmd_record(int argc, const char **argv)
if (rec->opts.kcore || record__threads_enabled(rec)) if (rec->opts.kcore || record__threads_enabled(rec))
rec->data.is_dir = true; rec->data.is_dir = true;
if (record__threads_enabled(rec)) {
if (rec->opts.affinity != PERF_AFFINITY_SYS) {
pr_err("--affinity option is mutually exclusive to parallel streaming mode.\n");
goto out_opts;
}
if (record__aio_enabled(rec)) {
pr_err("Asynchronous streaming mode (--aio) is mutually exclusive to parallel streaming mode.\n");
goto out_opts;
}
}
if (rec->opts.comp_level != 0) { if (rec->opts.comp_level != 0) {
pr_debug("Compression enabled, disabling build id collection at the end of the session.\n"); pr_debug("Compression enabled, disabling build id collection at the end of the session.\n");
rec->no_buildid = true; rec->no_buildid = true;
...@@ -3791,6 +3829,11 @@ int cmd_record(int argc, const char **argv) ...@@ -3791,6 +3829,11 @@ int cmd_record(int argc, const char **argv)
} }
} }
if (rec->timestamp_filename && record__threads_enabled(rec)) {
rec->timestamp_filename = false;
pr_warning("WARNING: --timestamp-filename option is not available in parallel streaming mode.\n");
}
/* /*
* Allow aliases to facilitate the lookup of symbols for address * Allow aliases to facilitate the lookup of symbols for address
* filters. Refer to auxtrace_parse_filters(). * filters. Refer to auxtrace_parse_filters().
......
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