Re: [PATCH 1/2] perf record: Fix "--per-thread" option for hybrid machines

From: Liang, Kan
Date: Mon Jul 04 2022 - 09:23:14 EST




On 7/1/2022 10:35 PM, zhengjun.xing@xxxxxxxxxxxxxxx wrote:
From: Zhengjun Xing <zhengjun.xing@xxxxxxxxxxxxxxx>

Commit b91e5492f9d7 ("perf record: Add a dummy event on hybrid systems to
collect metadata records") adds a dummy event on hybrid systems to fix the
symbol "unknown" issue when the workload is created in a P-core but runs
on an E-core. When "--per-thread" is enabled, the nr_cpus is reduced to 1,
adding a dummy event is useless for this issue, and it will also cause

A dummy event is required since a mmap event may be loaded at runtime on any CPU. Thanks Adrian to point it out.

Thanks,
Kan

"failed to mmap with 22 (Invalid argument)". This patch stops adding dummy
events when the option "--per-thread" is enabled, then the option can work
on hybrid machines.

Before:

# ./perf record -e cycles:u --per-thread sleep 1
failed to mmap with 22 (Invalid argument)

After:

# ./perf record -e cycles:u --per-thread sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.002 MB perf.data (6 samples) ]

Fixes: b91e5492f9d7 ("perf record: Add a dummy event on hybrid systems to collect metadata records")
Signed-off-by: Zhengjun Xing <zhengjun.xing@xxxxxxxxxxxxxxx>
Reviewed-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
---
tools/perf/builtin-record.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index e1edd4e98358..44ea2dd424fe 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -1223,7 +1223,7 @@ static int record__open(struct record *rec)
* of waiting or event synthesis.
*/
if (opts->initial_delay || target__has_cpu(&opts->target) ||
- perf_pmu__has_hybrid()) {
+ (perf_pmu__has_hybrid() && !opts->target.per_thread)) {
pos = evlist__get_tracking_event(evlist);
if (!evsel__is_dummy_event(pos)) {
/* Set up dummy event. */