perf evlist: Fix error out while applying initial delay and LBR
PATCH 1/1 perf evlist: Fix error out while applying initial delay and LBR
From: Kan Liang <[email protected]>
Perf record will error out if both --delay and LBR are applied. For example:
perf record -D 1000 -a -e cycles -j any -- sleep 2
Error:
dummy:HG: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'
A dummy event is added implicitly for initial delay, which has the same configurations as real sampling events. The dummy event is a software event. If LBR is configured, perf must error out.
The dummy event only be used to track PERF_RECORD_MMAP while perf waits for the initial delay to enable the real events. The BRANCH_STACK bit can be safely cleared for the dummy event.
After applying the patch:
perf record -D 1000 -a -e cycles -j any -- sleep 2
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.054 MB perf.data (828 samples) ]
--- tools/perf/util/evsel.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
tools/perf/util/evsel.c +14 -0
@@ -848,6 +848,12 @@ static void apply_config_terms(struct perf_evsel *evsel, } } +static bool is_dummy_event (struct perf_evsel *evsel) +{ +return (evsel->attr.type ==PERF_TYPE_SOFTWARE ) && + (evsel->attr.config ==PERF_COUNT_SW_DUMMY ); +} +/* * The enable_on_exec/disabled value strategy: *
@@ -1086,6 +1092,14 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,else perf_evsel__reset_sample_bit (evsel,PERIOD ); } + +/* +* For initial_delay, a dummy event is added implicitly. +* The software event will trigger -EOPNOTSUPP error out, +* if BRANCH_STACK bit is set. +*/ +if (opts->initial_delay &&is_dummy_event (evsel)) +perf_evsel__reset_sample_bit (evsel,BRANCH_STACK ); }static int perf_evsel__alloc_fd (struct perf_evsel *evsel,int ncpus,int nthreads)
Signature · 1 line
2.7.4
Quoted 17 lines · On Mon, Jul 09, 2018 at 07:15:22AM -0700, [email protected] wrote:
From: Kan Liang <[email protected]>
Perf record will error out if both --delay and LBR are applied. For example:
perf record -D 1000 -a -e cycles -j any -- sleep 2
Error:
dummy:HG: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'A dummy event is added implicitly for initial delay, which has the same configurations as real sampling events. The dummy event is a software event. If LBR is configured, perf must error out.
The dummy event only be used to track
PERF_RECORD_MMAPwhile perf waits for the initial delay to enable the real events. TheBRANCH_STACKbit can be safely cleared for the dummy event.
Quoted 7 lines
After applying the patch:
perf record -D 1000 -a -e cycles -j any -- sleep 2
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.054 MB perf.data (828 samples) ]Reported-by Pandey, Sunil K <[email protected]>Signed-off-by Kan Liang <[email protected]>
thanks,
jirka
Arnaldo Carvalho de Melo
maintainerEm Mon, Jul 09, 2018 at 05:20:54PM +0200, Jiri Olsa escreveu:
Quoted 10 lines · On Mon, Jul 09, 2018 at 07:15:22AM -0700, [email protected] wrote:
Quoted 7 lines
After applying the patch:
perf record -D 1000 -a -e cycles -j any -- sleep 2
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.054 MB perf.data (828 samples) ]Reported-by Pandey, Sunil K <[email protected]>Signed-off-by Kan Liang <[email protected]>Acked-by Jiri Olsa <[email protected]>
Thanks, applied, tested.
- Arnaldo
tip-bot for Kan Liang
merge botperf evlist: Fix error out while applying initial delay and LBR
Commit-ID: 95035c5e167ae6e740b1ddd30210ae0eaf39a5db Gitweb: https://git.kernel.org/tip/95035c5e167ae6e740b1ddd30210ae0eaf39a5db Author: Kan Liang <[email protected]> AuthorDate: Mon, 9 Jul 2018 07:15:22 -0700 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 31 Jul 2018 09:56:46 -0300
perf evlist: Fix error out while applying initial delay and LBR
'perf record' will error out if both --delay and LBR are applied.
For example:
# perf record -D 1000 -a -e cycles -j any -- sleep 2 Error: dummy:HG: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat' #
A dummy event is added implicitly for initial delay, which has the same configurations as real sampling events. The dummy event is a software event. If LBR is configured, perf must error out.
The dummy event will only be used to track PERF_RECORD_MMAP while perf waits for the initial delay to enable the real events. The BRANCH_STACK bit can be safely cleared for the dummy event.
After applying the patch:
# perf record -D 1000 -a -e cycles -j any -- sleep 2 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 1.054 MB perf.data (828 samples) ] #
--- tools/perf/util/evsel.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
tools/perf/util/evsel.c +14 -0
@@ -859,6 +859,12 @@ static void apply_config_terms(struct perf_evsel *evsel, } } +static bool is_dummy_event (struct perf_evsel *evsel) +{ +return (evsel->attr.type ==PERF_TYPE_SOFTWARE ) && + (evsel->attr.config ==PERF_COUNT_SW_DUMMY ); +} +/* * The enable_on_exec/disabled value strategy: *
@@ -1097,6 +1103,14 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,else perf_evsel__reset_sample_bit (evsel,PERIOD ); } + +/* +* For initial_delay, a dummy event is added implicitly. +* The software event will trigger -EOPNOTSUPP error out, +* if BRANCH_STACK bit is set. +*/ +if (opts->initial_delay &&is_dummy_event (evsel)) +perf_evsel__reset_sample_bit (evsel,BRANCH_STACK ); }static int perf_evsel__alloc_fd (struct perf_evsel *evsel,int ncpus,int nthreads)