perf record: Add new option to sample identifier
authorAdrian Hunter <adrian.hunter@intel.com>
Wed, 15 Jun 2022 05:25:11 +0000 (08:25 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 23 Jun 2022 14:54:22 +0000 (11:54 -0300)
In preparation for recording sideband events in a virtual machine guest so
that they can be injected into a host perf.data file.

Add an option to always include sample type PERF_SAMPLE_IDENTIFIER.

Committer testing:

  # perf record sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.020 MB perf.data (7 samples) ]
  # perf evlist -v
  cycles: size: 128, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|PERIOD, read_format: ID, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, sample_id_all: 1, mmap2: 1, comm_exec: 1, ksymbol: 1, bpf_event: 1
  #
  #
  # perf record --sample-identifier sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.022 MB perf.data (7 samples) ]
  # perf evlist -v
  cycles: size: 128, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|PERIOD|IDENTIFIER, read_format: ID, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, enable_on_exec: 1, task: 1, sample_id_all: 1, mmap2: 1, comm_exec: 1, ksymbol: 1, bpf_event: 1
  #

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20220615052511.4441-1-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-record.txt
tools/perf/builtin-record.c
tools/perf/util/record.c
tools/perf/util/record.h

index cf8ad50..6bd6d07 100644 (file)
@@ -313,6 +313,11 @@ OPTIONS
 --sample-cpu::
        Record the sample cpu.
 
+--sample-identifier::
+       Record the sample identifier i.e. PERF_SAMPLE_IDENTIFIER bit set in
+       the sample_type member of the struct perf_event_attr argument to the
+       perf_event_open system call.
+
 -n::
 --no-samples::
        Don't sample.
index 00c2a6c..40dca1f 100644 (file)
@@ -3191,6 +3191,8 @@ static struct option __record_options[] = {
        OPT_BOOLEAN(0, "code-page-size", &record.opts.sample_code_page_size,
                    "Record the sampled code address (ip) page size"),
        OPT_BOOLEAN(0, "sample-cpu", &record.opts.sample_cpu, "Record the sample cpu"),
+       OPT_BOOLEAN(0, "sample-identifier", &record.opts.sample_identifier,
+                   "Record the sample identifier"),
        OPT_BOOLEAN_SET('T', "timestamp", &record.opts.sample_time,
                        &record.opts.sample_time_set,
                        "Record the sample timestamps"),
index 5b09ecb..b529636 100644 (file)
@@ -121,7 +121,7 @@ void evlist__config(struct evlist *evlist, struct record_opts *opts, struct call
        evlist__for_each_entry(evlist, evsel)
                evsel__config_leader_sampling(evsel, evlist);
 
-       if (opts->full_auxtrace) {
+       if (opts->full_auxtrace || opts->sample_identifier) {
                /*
                 * Need to be able to synthesize and parse selected events with
                 * arbitrary sample types, which requires always being able to
index be9a957..4269e91 100644 (file)
@@ -28,6 +28,7 @@ struct record_opts {
        bool          sample_time;
        bool          sample_time_set;
        bool          sample_cpu;
+       bool          sample_identifier;
        bool          period;
        bool          period_set;
        bool          running_time;