forked from Minki/linux
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: Riccardo Mancini <rickyman7@gmail.com> Signed-off-by: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com> Tested-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Riccardo Mancini <rickyman7@gmail.com> Acked-by: Namhyung 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.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f466e5ed6c
commit
b5f2511d4b
@ -805,6 +805,12 @@ static int record__auxtrace_init(struct record *rec)
|
||||
{
|
||||
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) {
|
||||
rec->itr = auxtrace_record__init(rec->evlist, &err);
|
||||
if (err)
|
||||
@ -2198,6 +2204,17 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
|
||||
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);
|
||||
rec->session = session;
|
||||
|
||||
@ -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
|
||||
* 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;
|
||||
}
|
||||
|
||||
if (!s->set)
|
||||
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")) {
|
||||
do_signal:
|
||||
s->signal = true;
|
||||
@ -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",
|
||||
record__parse_affinity),
|
||||
#ifdef HAVE_ZSTD_SUPPORT
|
||||
OPT_CALLBACK_OPTARG('z', "compression-level", &record.opts, &comp_level_default,
|
||||
"n", "Compressed records using specified level (default: 1 - fastest compression, 22 - greatest compression)",
|
||||
OPT_CALLBACK_OPTARG('z', "compression-level", &record.opts, &comp_level_default, "n",
|
||||
"Compress records using specified level (default: 1 - fastest compression, 22 - greatest compression)",
|
||||
record__parse_comp_level),
|
||||
#endif
|
||||
OPT_CALLBACK(0, "max-size", &record.output_max_size,
|
||||
@ -3758,6 +3785,17 @@ int cmd_record(int argc, const char **argv)
|
||||
if (rec->opts.kcore || record__threads_enabled(rec))
|
||||
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) {
|
||||
pr_debug("Compression enabled, disabling build id collection at the end of the session.\n");
|
||||
rec->no_buildid = true;
|
||||
@ -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
|
||||
* filters. Refer to auxtrace_parse_filters().
|
||||
|
Loading…
Reference in New Issue
Block a user