From: Dapeng Mi <dapeng1.mi@linux.intel.com>
To: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Kan Liang <kan.liang@linux.intel.com>
Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
Yanfei Xu <yanfei.xu@intel.com>, Dapeng Mi <dapeng1.mi@intel.com>,
Dapeng Mi <dapeng1.mi@linux.intel.com>
Subject: [PATCH 0/4] Bug fixes on topdown metrics group leader selection
Date: Wed, 3 Jul 2024 06:40:33 +0800 [thread overview]
Message-ID: <20240702224037.343958-1-dapeng1.mi@linux.intel.com> (raw)
when counting/sampling topdown slots and metrics events, the following
issues are found.
a. incorrect sampling leader selection if group only contains topdown
slots event without topdown metrics event, such as
perf record -e '{slots,branches}:S' -c 10000 -vv sleep 1
In this case, the slots event should be sampled as leader but the
branches event is sampled in fact like the verbose output shows.
perf_event_attr:
type 4 (cpu)
size 168
config 0x400 (slots)
sample_type IP|TID|TIME|READ|CPU|IDENTIFIER
read_format ID|GROUP|LOST
disabled 1
sample_id_all 1
exclude_guest 1
------------------------------------------------------------
sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 5
------------------------------------------------------------
perf_event_attr:
type 0 (PERF_TYPE_HARDWARE)
size 168
config 0x4 (PERF_COUNT_HW_BRANCH_INSTRUCTIONS)
{ sample_period, sample_freq } 10000
sample_type IP|TID|TIME|READ|CPU|IDENTIFIER
read_format ID|GROUP|LOST
sample_id_all 1
exclude_guest 1
b. Fail to run the perf command
perf record -e "{slots,instructions,topdown-retiring}:S" -vv -C0 sleep 1
------------------------------------------------------------
perf_event_attr:
type 4 (cpu)
size 168
config 0x400 (slots)
sample_type IP|TID|TIME|READ|CPU|PERIOD|IDENTIFIER
read_format ID|GROUP|LOST
disabled 1
sample_id_all 1
exclude_guest 1
------------------------------------------------------------
sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 5
------------------------------------------------------------
perf_event_attr:
type 4 (cpu)
size 168
config 0x8000 (topdown-retiring)
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|READ|CPU|PERIOD|IDENTIFIER
read_format ID|GROUP|LOST
freq 1
sample_id_all 1
exclude_guest 1
------------------------------------------------------------
sys_perf_event_open: pid -1 cpu 0 group_fd 5 flags 0x8
sys_perf_event_open failed, error -22
Error:
The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (topdown-retiring).
Perf tool tries to regroup the events and move topdown-retiring event
closely after slots event and leads to topdown-retiring event is select
to sample. This is incorrect.
c. unnecessary events regroup for the group which only has slots event
but without topdown metrics events, such as
perf stat -e "{instructions,slots}" -C 0 sleep 1
WARNING: events were regrouped to match PMUs
Performance counter stats for 'CPU(s) 0':
27,581,148 slots
8,390,827 instructions
1.045546595 seconds time elapsed
Obviously, this events regroup is unnecessary.
The patches 1-3 separately fixes the above 3 issues in order and the
patch 4/4 adds a new perf test to verify the leader sampling.
Dapeng Mi (4):
perf topdown: Correct leader selection with sample_read enabled
perf parse-events: Don't move topdown metrics events when sorting
events
perf parse-events: Don't move slots event when no topdwon metrics
event
perf tests: Add leader sampling test in record tests
tools/perf/arch/x86/util/evlist.c | 11 ++++------
tools/perf/arch/x86/util/topdown.c | 16 ++++++++++++--
tools/perf/tests/shell/record.sh | 28 ++++++++++++++++++++++++
tools/perf/util/evlist.h | 7 +++++-
tools/perf/util/parse-events.c | 35 ++++++++++++++++++------------
5 files changed, 73 insertions(+), 24 deletions(-)
base-commit: 73e931504f8e0d42978bfcda37b323dbbd1afc08
--
2.40.1
next reply other threads:[~2024-07-02 6:39 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 22:40 Dapeng Mi [this message]
2024-07-02 22:40 ` [PATCH 1/4] perf topdown: Correct leader selection with sample_read enabled Dapeng Mi
2024-07-02 16:05 ` Liang, Kan
2024-07-03 2:46 ` Mi, Dapeng
2024-07-03 13:50 ` Liang, Kan
2024-07-02 22:40 ` [PATCH 2/4] perf parse-events: Don't move topdown metrics events when sorting events Dapeng Mi
2024-07-02 22:40 ` [PATCH 3/4] perf parse-events: Don't move slots event when no topdwon metrics event Dapeng Mi
2024-07-02 18:03 ` Liang, Kan
2024-07-03 2:51 ` Mi, Dapeng
2024-07-02 22:40 ` [PATCH 4/4] perf tests: Add leader sampling test in record tests Dapeng Mi
2024-07-02 18:07 ` Liang, Kan
2024-07-03 2:53 ` Mi, Dapeng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240702224037.343958-1-dapeng1.mi@linux.intel.com \
--to=dapeng1.mi@linux.intel.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=dapeng1.mi@intel.com \
--cc=irogers@google.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=yanfei.xu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox