From nobody Fri Oct 3 16:41:01 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B06702BEC2F for ; Thu, 28 Aug 2025 20:59:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756414799; cv=none; b=gkwxUS5YQgirqjaTQ9ynZqsqJBL74uMFoLbGHevkog+Ep6dXTwL9V4y2urDtjJwgfp+PBvG+yMexC6Im0+8yPd+A1kAPH5ZEN9/XNj9VZ5lC15UeHme4a39RDVypPKpYyON+WYZgIZOsCXP29QWedPTIMBbWkltxqAgal9rDAxo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756414799; c=relaxed/simple; bh=4U+L4Xwx8fMw/jYZx1FUstLXrkfwQ7cUJShrXuuki3g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=u60VFmE5DZjFySH/cS3ecoN3J5EaY8QeV1KpBJjEU6jNOvLIqWwi24obn/+OxdD2xeru0Y+Tr+urKvhj95IIc37CEcK5TmDCJkdMMke+07T1u5Ps0HwDlmhRwsNhQHbVwCO2pScDTprjV3PwwNNZvriyecH02CMrbEm6LdoDUO8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eITUPB/Z; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eITUPB/Z" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b49ddcdd5e9so1850422a12.3 for ; Thu, 28 Aug 2025 13:59:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756414797; x=1757019597; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=B5QvFyFoCZYjnxni8upUiYsAQGKLADYqIqDf8F+46ok=; b=eITUPB/ZFvFszpe0uVwcvdT3k2bk5l7eqwXCJ94Ztj/wLWg14zNiUZbtBq80Ssn4eh Y3TN5kGBFOpCtt5aiPgIbnILX2HzmPMFmU2C5DwTKAG23dTirfEoPLew5PIcTqUzAERy tjtYeZruEsRn6XH93kuR2oWPNnQ5OMutY7N0n/EVr2Tgl4WVhpt9zXKO/W2Y29mDHvCU V+NWDpdTrBtwTbe1eGA9YcPk9qyZqc3JzIla7eKv9jMr8zgrhUWNWAI2EPVIo06eIGbc IAbio79wAbgiCyj1dgsejyKBffW9sewNTtd4KHKjU4SfQGlm1q7fWetpl4GndCqYLsb+ YhaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756414797; x=1757019597; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=B5QvFyFoCZYjnxni8upUiYsAQGKLADYqIqDf8F+46ok=; b=klK6ZRDEXPR7vlHEtLAjb+85aiSxLuzbJaNMHzkosGCa/+S8WuDVbqVa0SHssdudlc XiSqufl+OrqoB1f0ZaM5WY65iwMBQ4XjA9DIm0zdNZoUoleBbp3vCCZITHW6F25PdFOq uNnNnGuQkQmS5MoKqIrAGGl6BUPvlMahr+qr1QWJp6m1Q/guFn+iMgJPTGIcCVlDpV0B l2L1grlzNoE8qi6EIq6FHcc5dxkpjpv0PfykmA568Os39TLiqQs6Nk459ULTirukzpGA Au4Q9XnsrCAn1WMvHi/p4toShMuzLUtDTapTStp+TAlTghSeyxC2nY2mM2XWmE1/qhps UqaA== X-Forwarded-Encrypted: i=1; AJvYcCXVwLh3t//KuPAJA06b11CwLo6LK7ufkvz/xhSpoMZxBxvLEASLMIYDwYc/w2l0PNp07GOVbzThbud18fo=@vger.kernel.org X-Gm-Message-State: AOJu0Yxel1n/tynXjLIB0CgY2ljQHP/sVgNNlB1Pm75QqKp8IQd1ByZI omKGRUsLQXuhHoLbkAbkGD4CNL6xQh3WClkfO6jqk1+3JJwBs553dVO2I4sOUx1yNZ3I4ycruFf bjFgsx33OmQ== X-Google-Smtp-Source: AGHT+IGT7VvNBOysikqm7Ip6z5MM9qYjsXZMh/F3vX+DAq2/r1JjBgr3kNz7krbG3UTwwZvNOtMhRC0tfCtD X-Received: from pjbpa13.prod.google.com ([2002:a17:90b:264d:b0:31f:3029:884a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1a88:b0:240:671c:6341 with SMTP id d9443c01a7336-2462ee9bb60mr391361215ad.26.1756414796965; Thu, 28 Aug 2025 13:59:56 -0700 (PDT) Date: Thu, 28 Aug 2025 13:59:17 -0700 In-Reply-To: <20250828205930.4007284-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250828205930.4007284-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250828205930.4007284-3-irogers@google.com> Subject: [PATCH v3 02/15] perf perf_api_probe: Avoid scanning all PMUs, try software PMU first From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , Thomas Falcon , Andi Kleen , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , Beeman Strong , Leo Yan , Vince Weaver Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Scan the software PMU first rather than last as it is the least likely to fail the probe. Specifying the software PMU by name was enabled by commit 9957d8c801fe ("perf jevents: Add common software event json"). For hardware events, add core PMU names when getting events to probe so that not all PMUs are scanned. For example, when legacy events support wildcards and for the event "cycles:u" on x86, we want to only scan the "cpu" PMU and not all uncore PMUs for the event too. Signed-off-by: Ian Rogers --- tools/perf/util/perf_api_probe.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/perf_api_probe.c b/tools/perf/util/perf_api_pr= obe.c index 1de3b69cdf4a..6ecf38314f01 100644 --- a/tools/perf/util/perf_api_probe.c +++ b/tools/perf/util/perf_api_probe.c @@ -59,10 +59,10 @@ static int perf_do_probe_api(setup_probe_fn_t fn, struc= t perf_cpu cpu, const cha =20 static bool perf_probe_api(setup_probe_fn_t fn) { - const char *try[] =3D {"cycles:u", "instructions:u", "cpu-clock:u", NULL}; + struct perf_pmu *pmu; struct perf_cpu_map *cpus; struct perf_cpu cpu; - int ret, i =3D 0; + int ret =3D 0; =20 cpus =3D perf_cpu_map__new_online_cpus(); if (!cpus) @@ -70,12 +70,23 @@ static bool perf_probe_api(setup_probe_fn_t fn) cpu =3D perf_cpu_map__cpu(cpus, 0); perf_cpu_map__put(cpus); =20 - do { - ret =3D perf_do_probe_api(fn, cpu, try[i++]); - if (!ret) - return true; - } while (ret =3D=3D -EAGAIN && try[i]); - + ret =3D perf_do_probe_api(fn, cpu, "software/cpu-clock/u"); + if (!ret) + return true; + + pmu =3D perf_pmus__scan_core(/*pmu=3D*/NULL); + if (pmu) { + const char *try[] =3D {"cycles", "instructions", NULL}; + char buf[256]; + int i =3D 0; + + while (ret =3D=3D -EAGAIN && try[i]) { + snprintf(buf, sizeof(buf), "%s/%s/u", pmu->name, try[i++]); + ret =3D perf_do_probe_api(fn, cpu, buf); + if (!ret) + return true; + } + } return false; } =20 --=20 2.51.0.318.gd7df087d1a-goog