OSDN Git Service

perf record: Set PERF_FORMAT_LOST by default
authorNamhyung Kim <namhyung@kernel.org>
Thu, 1 Sep 2022 19:57:36 +0000 (12:57 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 4 Oct 2022 11:55:20 +0000 (08:55 -0300)
As we want to see the number of lost samples in the perf report, set the
LOST format when it configs evsel.  On old kernels, it'd fallback to
disable it.

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220901195739.668604-3-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evsel.c
tools/perf/util/evsel.h

index e1bc76e..5776bfa 100644 (file)
@@ -1161,6 +1161,7 @@ void evsel__config(struct evsel *evsel, struct record_opts *opts,
        attr->sample_id_all = perf_missing_features.sample_id_all ? 0 : 1;
        attr->inherit       = !opts->no_inherit;
        attr->write_backward = opts->overwrite ? 1 : 0;
+       attr->read_format   = PERF_FORMAT_LOST;
 
        evsel__set_sample_bit(evsel, IP);
        evsel__set_sample_bit(evsel, TID);
@@ -1856,6 +1857,8 @@ static int __evsel__prepare_open(struct evsel *evsel, struct perf_cpu_map *cpus,
 
 static void evsel__disable_missing_features(struct evsel *evsel)
 {
+       if (perf_missing_features.read_lost)
+               evsel->core.attr.read_format &= ~PERF_FORMAT_LOST;
        if (perf_missing_features.weight_struct) {
                evsel__set_sample_bit(evsel, WEIGHT);
                evsel__reset_sample_bit(evsel, WEIGHT_STRUCT);
@@ -1907,7 +1910,12 @@ bool evsel__detect_missing_features(struct evsel *evsel)
         * Must probe features in the order they were added to the
         * perf_event_attr interface.
         */
-       if (!perf_missing_features.weight_struct &&
+       if (!perf_missing_features.read_lost &&
+           (evsel->core.attr.read_format & PERF_FORMAT_LOST)) {
+               perf_missing_features.read_lost = true;
+               pr_debug2("switching off PERF_FORMAT_LOST support\n");
+               return true;
+       } else if (!perf_missing_features.weight_struct &&
            (evsel->core.attr.sample_type & PERF_SAMPLE_WEIGHT_STRUCT)) {
                perf_missing_features.weight_struct = true;
                pr_debug2("switching off weight struct support\n");
index d927713..989865e 100644 (file)
@@ -188,6 +188,7 @@ struct perf_missing_features {
        bool data_page_size;
        bool code_page_size;
        bool weight_struct;
+       bool read_lost;
 };
 
 extern struct perf_missing_features perf_missing_features;