]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf report: Fix sample number stats for branch entry mode
authorThomas Falcon <thomas.falcon@intel.com>
Thu, 20 Feb 2025 04:59:42 +0000 (22:59 -0600)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 25 Feb 2025 00:02:28 +0000 (16:02 -0800)
Currently, stats->nr_samples is incremented per entry in the branch stack
instead of per sample taken. As a result, statistics of samples taken
during perf record in --branch-filter or --branch-any mode does not
seem correct. Instead call hists__inc_nr_samples() for each sample taken
instead of for each entry in the branch stack.

Before:

$ ./perf record -e cycles:u -b -c 10000000000 ./tchain_edit
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.005 MB perf.data (2 samples) ]
$ perf report -D | tail -n 16
Aggregated stats:
               TOTAL events:         16
                COMM events:          2  (12.5%)
                EXIT events:          1  ( 6.2%)
              SAMPLE events:          2  (12.5%)
               MMAP2 events:          2  (12.5%)
             KSYMBOL events:          1  ( 6.2%)
      FINISHED_ROUND events:          1  ( 6.2%)
            ID_INDEX events:          1  ( 6.2%)
          THREAD_MAP events:          1  ( 6.2%)
             CPU_MAP events:          1  ( 6.2%)
        EVENT_UPDATE events:          2  (12.5%)
           TIME_CONV events:          1  ( 6.2%)
       FINISHED_INIT events:          1  ( 6.2%)
cpu_core/cycles/u stats:
              SAMPLE events:         64

After:

$ ./perf report -D | tail -n 16
Aggregated stats:
               TOTAL events:         16
                COMM events:          2  (12.5%)
                EXIT events:          1  ( 6.2%)
              SAMPLE events:          2  (12.5%)
               MMAP2 events:          2  (12.5%)
             KSYMBOL events:          1  ( 6.2%)
      FINISHED_ROUND events:          1  ( 6.2%)
            ID_INDEX events:          1  ( 6.2%)
          THREAD_MAP events:          1  ( 6.2%)
             CPU_MAP events:          1  ( 6.2%)
        EVENT_UPDATE events:          2  (12.5%)
           TIME_CONV events:          1  ( 6.2%)
       FINISHED_INIT events:          1  ( 6.2%)
cpu_core/cycles/u stats:
              SAMPLE events:          2

Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
Link: https://lore.kernel.org/r/20250220045942.114965-1-thomas.falcon@intel.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/hist.c

index a29324e33ed04d1004960256cb5de9d18e85ccf1..fbf131aeae7ffe9bcf00f9bae697b764016ae11d 100644 (file)
@@ -991,8 +991,6 @@ iter_add_next_branch_entry(struct hist_entry_iter *iter, struct addr_location *a
        if (he == NULL)
                return -ENOMEM;
 
-       hists__inc_nr_samples(hists, he->filtered);
-
 out:
        iter->he = he;
        iter->curr++;
@@ -1011,9 +1009,15 @@ static int
 iter_finish_branch_entry(struct hist_entry_iter *iter,
                         struct addr_location *al __maybe_unused)
 {
+       struct evsel *evsel = iter->evsel;
+       struct hists *hists = evsel__hists(evsel);
+
        for (int i = 0; i < iter->total; i++)
                branch_info__exit(&iter->bi[i]);
 
+       if (iter->he)
+               hists__inc_nr_samples(hists, iter->he->filtered);
+
        zfree(&iter->bi);
        iter->he = NULL;