From nobody Sat Feb 7 17:19:56 2026 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 087D9346785 for ; Fri, 24 Oct 2025 17:59:02 +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=1761328744; cv=none; b=DywL2Y71hOcz50rG34p0D5MNbtrH0QKe7yL5680/pLsytMyGZT8udi19wWv/Thr7tkq4vw2MIi8MvCJuOyI0Ce+L7jT+XjsdSeX6Ztd4MnsB22S4qR0jAw2+G1bXy99vp5i46Y2t8OGN1RFPC4A1m7KgBl8dbCmzE+VpbEhZUG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328744; c=relaxed/simple; bh=6nMA14P6Qbyeexp3WnkGdWEw8fvqzdlcMJ8tkdNQ/+A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=cDtpr6AAf7UBh3o4awfyEqMbod+JKQHyfumSQxh1ptShHXCh2BaIx1/0fwfq7mCbcMVAFsihMZ3ge3JQDaEoAgrom+98XzNn4Fv+fzbqPlRl0n50fW6KWiaS0TUmpN0aI2vioZ5JbWZQLDLTVYHywXKk182/Z0xiiBAWmiFEKG4= 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=ubZl06AY; 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="ubZl06AY" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b6ce15aaa99so1828897a12.0 for ; Fri, 24 Oct 2025 10:59:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328742; x=1761933542; 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=TbMR3wgxv/2o2pYwh/5JL78UktKAGHt4o5fQQRcTvk0=; b=ubZl06AYWKCcecnNa+f+OIfmu9cJHDMcYhHefMYbQS1vTjOXNsuLUjnxvxcxFtA64K 7IyC1yNTcV317sz27u91BtdyfjseG6GcAEx/yLtS5Uu9WwMvn4bn9MB3ihAEISOd246V qJYZzj4JdKO4GnS9z/Iq8DBcfiS/QAI5jrwqzHLLj5Ny28oHX/HuUZGyNI54cyJPL0Au 5d2jd83v8bC25XFQdzUzHrsa1OfQCzpYLWoiD/QWxL98H9rs4tBAIkaj1e/wYCpxLf2n L6NxDfWSQwRC0mw+m9ZuagCLzWKpwP6Hh5rpIdJJ/Zsi1T7+h1xc15w3eTW0WezrteMB HwaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328742; x=1761933542; 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=TbMR3wgxv/2o2pYwh/5JL78UktKAGHt4o5fQQRcTvk0=; b=JhqS7GByFptwreMJflZ32egkbX/LjJG2dzyPynjhgrsjq035B4wyiZl7g+982Q1Ns6 051ZzWjg4GvSSUxp5bu0AxomK8vcaTgOnax2spqHYZZS+dPLVtcX14/ql7gzJs9QRPF8 tDyL5/031KuHkJp1dU190Iw8anCv6PN8uJ0qG6475jvA2sf2ijbK8PkT32BrF4cTpTaz RTisPs4Zu930CE6dbc4DvZ4fFS3mY7JAZ0PfcKrfmc/DSZ5xmtsdD7Rt9CLhD8GUYZVQ F97/P0aoHpPR8VAc4fxtfBYgTbTIEQbCsuW9U4DZLFSuZMKz1/Hm3DjFxQyv4OIYY1Ov JlNw== X-Forwarded-Encrypted: i=1; AJvYcCVHe6UGhaJgFGXCvbn9R2y/B21emRORSVl35R2IWyGciQfegopJqkgoQ3YVny0uJ7Dut7RpUKLlahV7YOM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9+0Wch7/jR6Cza3WMZu3OxefdCkjKGWn6ur/Z+51j2Y9qkr0d dGkjHCcLj248gkTHkN1Mgt5pfm2L55vou+vOe7x0P42tgbYXGATRQ3i4oxMO3zd2m4LS1JqrfOO N7omkivN3kw== X-Google-Smtp-Source: AGHT+IGpCt51qhaTx579ZsbwdfKtQa8stTm7ZlEnQVHPsQ32n9Rb5o/ubQYxcXG1X+7Sp4X8w5b20JtYjRD7 X-Received: from pjob9.prod.google.com ([2002:a17:90a:8c89:b0:33b:8aa1:75ed]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2412:b0:33e:1ed8:334d with SMTP id 98e67ed59e1d1-33e1ed835a8mr11420778a91.16.1761328742289; Fri, 24 Oct 2025 10:59:02 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:36 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-2-irogers@google.com> Subject: [PATCH v1 01/22] perf evsel: Remove unused metric_events variable From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The metric_events exist in the metric_expr list and so this variable has been unused for a while. Signed-off-by: Ian Rogers --- tools/perf/util/evsel.c | 2 -- tools/perf/util/evsel.h | 1 - 2 files changed, 3 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ad11cbfcbff1..67a898cda86a 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -402,7 +402,6 @@ void evsel__init(struct evsel *evsel, evsel->sample_size =3D __evsel__sample_size(attr->sample_type); evsel__calc_id_pos(evsel); evsel->cmdline_group_boundary =3D false; - evsel->metric_events =3D NULL; evsel->per_pkg_mask =3D NULL; evsel->collect_stat =3D false; evsel->group_pmu_name =3D NULL; @@ -1754,7 +1753,6 @@ void evsel__exit(struct evsel *evsel) evsel__zero_per_pkg(evsel); hashmap__free(evsel->per_pkg_mask); evsel->per_pkg_mask =3D NULL; - zfree(&evsel->metric_events); if (evsel__priv_destructor) evsel__priv_destructor(evsel->priv); perf_evsel__object.fini(evsel); diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index f8de0f9a719b..71f74c7036ef 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -100,7 +100,6 @@ struct evsel { * metric fields are similar, but needs more care as they can have * references to other metric (evsel). */ - struct evsel **metric_events; struct evsel *metric_leader; =20 void *handler; --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 8479234678C for ; Fri, 24 Oct 2025 17:59:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328750; cv=none; b=scq3Ko7G9LGFRtYHgvGewJ+bfmBrXVgoRZJzQg/nSLwjyrEL44QCeTbesQA4zIAWKJQqtdFWI1OziXH1frKdBUNIndFelqPyF9oGSFO9wr4wnc9vNyf2HHmwldKEvklsXfHqqsZjs66v3Ox3n1tCYzlyziek4Kv9PJ5+39VHoGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328750; c=relaxed/simple; bh=bTV8txl6J+Uqsxr3Xc3JLKdUKdNRKaAH612k7TJHs/U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XVMd6j0MbqPEQSS/zgCa/FRV+xjX8areFUq5pG1gEpjxs/n5Ig+rm4ziGcwN4tK5YXoSUwu/mXW1frXx78ctdQEgMTD/xAeebLtwbPFVorXR77rPVYdsj0+hJsvQbflaFQGgYcUlju54qG7PbNvqtPZrR8iqoPpmLc6ff+PbEdM= 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=wViwiQsQ; arc=none smtp.client-ip=209.85.216.73 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="wViwiQsQ" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-33be01bcda8so2394819a91.2 for ; Fri, 24 Oct 2025 10:59:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328745; x=1761933545; 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=BhTEfwSMW0ADFSj2x343ckUKGAB1lcE1/wiXOsdLtZw=; b=wViwiQsQnWUV1L6fbFyuNquccX9W0oDNZmDAhX2IFkaAVmVY1kx3DOYllvHKcVDRZp oDyubkrcO3kr/Cqk8WJHNOb45FhvInfaw/N011Z3Lc2t0imSPyW1SS8/T9FbcdXy5GG3 syxtJNEwra/LQNbiqlzFf9Z1RWS2uwfExmb/v3uXHRIVF2Z5KugdrRPatcBaGEtwriKe twYMkZtpGub+gwQ25hSNobFPnjMzU09VgqMDGoPXjgBjmv7mOoPR6uaK+5zha/feyeHK sS0aOnEI69t6sIL9I+YU4cIbZCfGy92DkEYPBsnvQyl/D8i07PKM6O4ca/r+wkYB5+5p QrJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328745; x=1761933545; 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=BhTEfwSMW0ADFSj2x343ckUKGAB1lcE1/wiXOsdLtZw=; b=c5//l8pC3X6Q7rUeCF9A8NS3F0OZ1mCEHlFX8cj9oBiuojLgczmdaP2yfHHHHvhDG2 GaL9aFDeaqq+y2TC1pkB73f6rKuaO/YCUtE/gPueT55H7lQlwLL8U0HrCbMsGBhw7ic/ aBKkw7w9fAavzrRkkiJK5YrnUUCuT1aPCn14qHtWI+6C4nNnYOb6q1B+RVA8LRPC6bb3 ij9juKM5ZQAU8uB1wD9Qtz1wydFIkMiP8lEO+GPG65YuEcc5SLLJB4rzLsRQ1FUIgMnS 7dPqy2xA2MRyGYIqK+mC92ykwsV1OufBPJIXlsk7wVSApxrey+ne1HkgcYgZ5rjeWKTE jXfQ== X-Forwarded-Encrypted: i=1; AJvYcCXgh3jULYv/0LKRl1KTj3wgmZKc2LWReGecFU085MYNU1cQlBNBiviHGsl0vb8D+7HddJlSd6i3wD+r3hs=@vger.kernel.org X-Gm-Message-State: AOJu0YwsSOXmXeahAecWFWRRFtM4Asj+b8C07neEMFr+5CnTSypMdHW9 o6spXm/HP2V1H1VPafeTkA8To9g3RXtxiRgYoH3jdF/XJTa1aBLWbQ9QuFGIFeqL5xUTZatbZU9 uyqCYfUMh7A== X-Google-Smtp-Source: AGHT+IHhe/p4ofHfb6dV7KY04MrvRtZ5D4pIUmxw/S7DTlnlaUGxskNegeWjkD65dN526PJYlpWhKk1+pJ7s X-Received: from pjvh14.prod.google.com ([2002:a17:90a:db8e:b0:33e:32fc:fc4f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5111:b0:33b:c5ce:3cb0 with SMTP id 98e67ed59e1d1-33bcf8e4560mr39920784a91.20.1761328744649; Fri, 24 Oct 2025 10:59:04 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:37 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-3-irogers@google.com> Subject: [PATCH v1 02/22] perf metricgroup: Update comment on location of metric_event list From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update comment as the stat_config no longer holds all metrics. Signed-off-by: Ian Rogers Fixes: faebee18d720 ("perf stat: Move metric list from config to evlist") --- tools/perf/util/metricgroup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/metricgroup.h b/tools/perf/util/metricgroup.h index 324880b2ed8f..4be6bfc13c46 100644 --- a/tools/perf/util/metricgroup.h +++ b/tools/perf/util/metricgroup.h @@ -16,7 +16,7 @@ struct cgroup; =20 /** * A node in a rblist keyed by the evsel. The global rblist of metric even= ts - * generally exists in perf_stat_config. The evsel is looked up in the rbl= ist + * generally exists in evlist. The evsel is looked up in the rblist * yielding a list of metric_expr. */ struct metric_event { --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 AD66E346E70 for ; Fri, 24 Oct 2025 17:59:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328749; cv=none; b=LK/o9pIQ1b/+pf6tD5GYvao+g4EkQykdVLFmBktaDb4G8HIxX1WWmAjLg6/p65gyWl9ZZHAUzFUb5VZlf28QNxj14wpzemI3iAyuNmSkl+q07umQJaDLun613fDSYBiIOQr8f8ZAkMgzL8MaNxNk75fr2XXKu6rAhW5BB0KD+OE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328749; c=relaxed/simple; bh=rFnvrhJrQ7j7hkJ82kWWbtJZ3FFEl0AVotLlFTPUNLs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=rKWFMxQ7/9tzZ/FsUOTXXEZs3GeuSjCvxjLXoMkHCVSA03/5GbbntoP3Uucu24n698PUKQC5RNT3v0ImEin8DaX1USwcuLYEthPz9vBHU8jZ7umoDbg6xyfDzxDJjCLXR4YTuVDV5OiiRp19CHNiME1qPbOeXWSUNLrlHp+6i34= 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=OeoonKfU; arc=none smtp.client-ip=209.85.214.202 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="OeoonKfU" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-290992f9693so28427595ad.1 for ; Fri, 24 Oct 2025 10:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328747; x=1761933547; 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=e/orE7Kl2T5+FMrzRJXD3kZQQJ5k2gk8t41KGFSxw6I=; b=OeoonKfUrJzc8h6T6Bo83j1pKLTKnl0sXNUuDbFCz8GnRzvmOQWG1YN1malGFP3kn3 KtMdbHn4t7cb6/WtfLSJJ+LOcDyOG/fSTyPNOgxNfxYPrmdSvtXaIAgsa+4v1gJEC4sl BYazjc7G66z+mmH56LDroOTjYQAHPGKLvp66DJokNjHg1IOLNBjV9rps4JJAlDGSvHJj +DJTj+xEkkyDH21909rMiVAgGgHDPZDb+sUodq/R2cpK14F++KVVH9kVSdwpO40yAWDA WG+M09eA180uE+hKnZSVtdal6BLywjF96kRpjkUiClD1SHdL7yT+PAZlT5PyE/plfJgw FC7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328747; x=1761933547; 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=e/orE7Kl2T5+FMrzRJXD3kZQQJ5k2gk8t41KGFSxw6I=; b=k9RxCAbQ/TWu3gY/FKmHw11Ru7dvymwmzvtJSkc4ad3UAh/yVMO0DjT28gtC9aKNGj 3mVy3pQphbPrcGJeb78EZ/2dIm0BtnNwebqIbXL8ZBNmLKEH0SiBAqH0yOrKzVFL/S8M BTyMt1rfLs3mKwCwsg9Y2k5/owIrriiHXw7kfrtfno5tuXE1g/lOGYLAfzk6A5IyGG0z zv7b/4UVAuHZYlvrRJjX7ggD5obEN7bCxetTA39eoVr+t8bw/5G1/qMDxSEzwGeAVZlP pUurEzfFSg3Y5mzcuj4Vyl90AuVRhNclwJOqKRbMyr3FQpyN5vlnfdk6f5QrzS4k17CS 5H7g== X-Forwarded-Encrypted: i=1; AJvYcCUyOjfyYSDlf4g8CpGtVuHEYzoOehNy3THmM7EvcCCcj3AiULzfKEY0VrlFNKjsNd/Owp4XSDxIMluLF1I=@vger.kernel.org X-Gm-Message-State: AOJu0YzpY1KbaVl8DpwOoDbXvScVB1u95PsfbEuQiWpeemt5PJf8WadD M1K/1m1lVyctg4c0XbdVqWwnCVHNwvYqjzuz6kXg/62omyorv6YV7okx95GfYrW9tIKGodGZc+A Ssw28ZW2+Lw== X-Google-Smtp-Source: AGHT+IEiuNrfkGll/jw9TGPgzbkCABGR+L/ughckv4/H2YorryoqXMAe9/saT1zEWVT6iUHw7By6llK3W7B/ X-Received: from pjuq16.prod.google.com ([2002:a17:90a:d390:b0:334:1843:ee45]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f64b:b0:274:506d:7fcc with SMTP id d9443c01a7336-29489d71137mr45832845ad.6.1761328746916; Fri, 24 Oct 2025 10:59:06 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:38 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-4-irogers@google.com> Subject: [PATCH v1 03/22] perf metricgroup: Missed free on error path From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If an out-of-memory occurs the expr also needs freeing. Signed-off-by: Ian Rogers --- tools/perf/util/metricgroup.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 595b83142d2c..c822cf5da53b 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -1455,6 +1455,7 @@ static int parse_groups(struct evlist *perf_evlist, =20 if (!expr->metric_name) { ret =3D -ENOMEM; + free(expr); free(metric_events); goto out; } --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 A6600346E76 for ; Fri, 24 Oct 2025 17:59:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328751; cv=none; b=ICa3L5xNCyqPWIgmzVOzeaW9bRc/TTYmLbE983i7S6Oc1CVFmGMETNjyKbcc/dfQwhJP1PxX5wPUp6wlJ2vQeIZmioogvfd7LeZppEfwVfmcBzMM490xIiEhY8tsh/FtQRS6gM6ymyoZDLnuTh38uMRY1yFFu3LaYzJ6N3GWN+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328751; c=relaxed/simple; bh=y6HnQZia41UtwY0YyvlgW3W6qOJoIv/4XqLTxzvxWN4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=c+JFXJD5dVOmiRVWOfSyXh7zrFBx+EavRgUjlAV5FccOIK60Os38TppIqx2OmI8egYG2GlkMMVN9UKJSIG/eQC4zNT4raXX8W31S8EOJXFxfarLXRRFjqlnxs5+ebE6Wc06wnU84Z5lyOVr810mcEec1tlQNTlP8ZpWKmc7TB3I= 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=KDuB+VzJ; arc=none smtp.client-ip=209.85.216.73 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="KDuB+VzJ" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-33bcb7796d4so2357459a91.0 for ; Fri, 24 Oct 2025 10:59:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328749; x=1761933549; 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=cokO0Sr9XTu+ExHguyCo1Sd9Y8GFVn9rZjxHL+N1gsY=; b=KDuB+VzJfuNUl2ISsqcccc5Z8S3dwFepPPJRJJ+APjLE46jE5s3bBWinFcMYq4RwyO cWLJ25qeenTm0LPBSWbP1eynyHa3pHZNhYbbtxZtDfa9sSvlk+F2L+afrufSdF7PzRc0 E0L5S5D5+jY4N1jngkRhNf4k6nuXJ04627DMeTUf9jcuci6m4sf/ICjK/6RaQZxVk91m M9bsAev4QihTYnIBZKb8XbHNQFJLtDXA2PDpd26j5n6vSt+kcfy2ymzJHJ8ht9tijzH0 8di0qVSp434+opU7N5ngJRDdOw1qaRes1MGy746XeSaGRQv8DNJ01+BnMWeIRiJMpUSB DamA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328749; x=1761933549; 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=cokO0Sr9XTu+ExHguyCo1Sd9Y8GFVn9rZjxHL+N1gsY=; b=AZxOJjV1HyDNWbVKu41r/BQKbNLciZ/xmnV0lD2gmlM0TwcsTyJ7QzBHiHOin7HhAy 3a2NM0Igs2nfS1/6d3FE5wbkP/LS0iSZKw9TOtTb5ZfPt0box9cSbRL+KvQrYPiKTaPZ eyklXXrsJN5IiajFr8JqMqgWzpLoY7nTm0VzbR5U1trbwuLIP6cIQe0v/3dFCsY7Sl7B pRbekphV0phBp3vqHC6+jeny93D84r38RftcDHrndf78qQIEoNqOtYFpa+mTYH2yxobY AXjIX/dEgkoEhYJRQyt6580XjRJSIaiSx45p/V1W8ALNz/qYB/qkKBUx8dxFNBXEFWqG ltZw== X-Forwarded-Encrypted: i=1; AJvYcCXEDMlY3aF7ILIPCGhmrIfOGascq05/k2Ag8ip6H/zzf8zRwJxfirXtg6j2XehjZI/wyPVkTYWbaU66Tng=@vger.kernel.org X-Gm-Message-State: AOJu0YzB/OrFhLQ1xNP+xzDpYO8VTpcoORsdbqo/Sd+a0JRcKQTvxyRi tEqoScBZ0GZ9ar7muscEbBaBSrOYYAQDHl0inPEqDTI2/pnCGKnWfpOZwuuDoLo5cmaCXpwVbeg sEECvenaTjQ== X-Google-Smtp-Source: AGHT+IGI+JqHMiuTh4v84Dx/JIanazWnP/wdgwfnIy5TXQtNZAoVhJ96nHZKWoCgTLxJW1ADY9HnHnWuFdNC X-Received: from pjzg18.prod.google.com ([2002:a17:90a:e592:b0:33b:9e06:6b9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:35cc:b0:33b:ba50:fccc with SMTP id 98e67ed59e1d1-33fafc1bc67mr8458246a91.18.1761328748903; Fri, 24 Oct 2025 10:59:08 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:39 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-5-irogers@google.com> Subject: [PATCH v1 04/22] perf metricgroup: When copy metrics copy default information From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When copy metrics into a group also copy default information from the original metrics. Signed-off-by: Ian Rogers --- tools/perf/util/metricgroup.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index c822cf5da53b..48936e517803 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -1608,6 +1608,7 @@ int metricgroup__copy_metric_events(struct evlist *ev= list, struct cgroup *cgrp, pr_debug("copying metric event for cgroup '%s': %s (idx=3D%d)\n", cgrp ? cgrp->name : "root", evsel->name, evsel->core.idx); =20 + new_me->is_default =3D old_me->is_default; list_for_each_entry(old_expr, &old_me->head, nd) { new_expr =3D malloc(sizeof(*new_expr)); if (!new_expr) @@ -1621,6 +1622,7 @@ int metricgroup__copy_metric_events(struct evlist *ev= list, struct cgroup *cgrp, =20 new_expr->metric_unit =3D old_expr->metric_unit; new_expr->runtime =3D old_expr->runtime; + new_expr->default_metricgroup_name =3D old_expr->default_metricgroup_na= me; =20 if (old_expr->metric_refs) { /* calculate number of metric_events */ --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 C5B6F347FC3 for ; Fri, 24 Oct 2025 17:59:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328753; cv=none; b=AyKuUT9u5Ri64PJyqMGNU+TV327OZJg3kfWompJJao7RhXo8SKfZ96BqMGCb+wUdD9YyEpmj+KkK/zcccGQJ584MpzxawaHrAXCOsWbhKBoQAxkch0N8FUgIGUFuiFxRW+0rpshSkqh4sEhsR/IJzc/szfCCC8k6alWrrVSVu38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328753; c=relaxed/simple; bh=xOECeydUAevHBImyehHqQIDEGR3heRJ/Ena8jgNX4vo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=kN7KWXaNK6tciCGIlL98McRyWF4hChBsoS9LkDmi5oVhkz8WNDz1P5x55xa2GKGUMz/diw6PVR3/sxC9uXnAMIA1L8rm51YNKTtJKn/6wCFS+nEzqsh/H+dtUZk+Gm+Ynm9gE7gmwxcOVKkd7P1nZXP67HLtfWYaNjX064tfT7w= 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=GnXpz8ec; arc=none smtp.client-ip=209.85.214.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="GnXpz8ec" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-28eb14e3cafso43074485ad.1 for ; Fri, 24 Oct 2025 10:59:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328751; x=1761933551; 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=98oLZpU0UKUZs5WlacgZXv8UPFSEP004mNHHINow/FA=; b=GnXpz8ecjIkB71UIuCyJiHBHs+S/hV2dXt8h6Xnl4jHWIajy7oUQ7rneOo2xzWiP4v iIwz7zscuSoLwGPxubrMM7WOKXUqpxmaszHccmkvNemejzLZAP3y5HhF5Ii60m9E367X PO7peALLj8EPzQfDOtHf0kIrSq95pCZ2Ql6YSB5cdlLyJ6XgZEBBqeQIbIy3cZ8H7AYR w7wdtupUolfdiAX5cM1eZknFyjTEWGzmsjd/0zoUKyDdtyv2OXE5DncNPjFa1y7WQ63Y mzBfSSAfnkA+lJTESTl36I20S9oEjZZEjp3/kjE5WqgzOdCTnuSDbyeputrbod3GIGtJ CyNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328751; x=1761933551; 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=98oLZpU0UKUZs5WlacgZXv8UPFSEP004mNHHINow/FA=; b=hSa2exKkx0z4h/Zol64lj65wd7S59HD24KHzm7t6Lbav5FRiBUzzkppnWk3YduP83t 83tnzKoZ7dI688gYHXCaUdzRXvStREev8Oi5jpNlA9UoF/PSV+1kMITtnWUdvuxphudo 0iCv7qLMGd83mGlhAHb4fRWk4Jq0RABYD1tq0knhdEjKaRAC2Ehn1ZqgjkhTnSn4+bP5 3lrRb8BJCy7LGYuZzsPGIN1aACZPZLGR2WQK5bJrTGGICWE3oWStgVVVZzS0Dtm9tNmQ 5YUtEy2dxFPxQmn1ahIBP6OTd7QrGOOXgU4kmhvc6CA5Lo+vgcasGJgUTODMHdSSB2I/ 0Hfw== X-Forwarded-Encrypted: i=1; AJvYcCXS4ZHE2WjItPtCjCqR7TYSRjW3WnLdCU/5L6KZaNItR+070DcLfIk4335Rq6DR9TU2eMkFtKIqG1LFOaE=@vger.kernel.org X-Gm-Message-State: AOJu0YyclXvfn3ZF8FVD+p1QDA0ryDpe9h+8OzNlHxX5gbxhugjq5cK2 NEN4WJ3h6iIR1OSZLFeBKfAIPJprzdWEhW8BDfoRPgA1GK7xRN07bPKjkXLfWto7LDy4C6BZj2Q jlZiMiSMSJQ== X-Google-Smtp-Source: AGHT+IGURs6TgqUzd4+g7oypheTbZWq/9fAOSSxydJkcNYBtbW3Uk34LKWNJlF637subW+6jd5Zcg4J1sRSb X-Received: from plsm23.prod.google.com ([2002:a17:902:bb97:b0:268:842a:ea02]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:18d:b0:269:b2ff:5c0e with SMTP id d9443c01a7336-2948ba5aac4mr43836265ad.46.1761328751064; Fri, 24 Oct 2025 10:59:11 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:40 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-6-irogers@google.com> Subject: [PATCH v1 05/22] perf metricgroup: Add care to picking the evsel for displaying a metric From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rather than using the first evsel in the matched events, try to find the least shared non-tool evsel. The aim is to pick the first evsel that typifies the metric within the list of metrics. This addresses an issue where Default metric group metrics may lose their counter value due to how the stat displaying hides counters for default event/metric output. Signed-off-by: Ian Rogers --- tools/perf/util/metricgroup.c | 48 ++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 48936e517803..76092ee26761 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -1323,6 +1323,51 @@ static int parse_ids(bool metric_no_merge, bool fake= _pmu, return ret; } =20 +/* How many times will a given evsel be used in a set of metrics? */ +static int count_uses(struct list_head *metric_list, struct evsel *evsel) +{ + const char *metric_id =3D evsel__metric_id(evsel); + struct metric *m; + int uses =3D 0; + + list_for_each_entry(m, metric_list, nd) { + if (hashmap__find(m->pctx->ids, metric_id, NULL)) + uses++; + } + return uses; +} + +/* + * Select the evsel that stat-display will use to trigger shadow/metric + * printing. Pick the least shared non-tool evsel, encouraging metrics to = be + * with a hardware counter that is specific to them. + */ +static struct evsel *pick_display_evsel(struct list_head *metric_list, + struct evsel **metric_events) +{ + struct evsel *selected =3D metric_events[0]; + size_t selected_uses; + bool selected_is_tool; + + if (!selected) + return NULL; + + selected_uses =3D count_uses(metric_list, selected); + selected_is_tool =3D evsel__is_tool(selected); + for (int i =3D 1; metric_events[i]; i++) { + struct evsel *candidate =3D metric_events[i]; + size_t candidate_uses =3D count_uses(metric_list, candidate); + + if ((selected_is_tool && !evsel__is_tool(candidate)) || + (candidate_uses < selected_uses)) { + selected =3D candidate; + selected_uses =3D candidate_uses; + selected_is_tool =3D evsel__is_tool(selected); + } + } + return selected; +} + static int parse_groups(struct evlist *perf_evlist, const char *pmu, const char *str, bool metric_no_group, @@ -1430,7 +1475,8 @@ static int parse_groups(struct evlist *perf_evlist, goto out; } =20 - me =3D metricgroup__lookup(&perf_evlist->metric_events, metric_events[0], + me =3D metricgroup__lookup(&perf_evlist->metric_events, + pick_display_evsel(&metric_list, metric_events), /*create=3D*/true); =20 expr =3D malloc(sizeof(struct metric_expr)); --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 0C6FB348452 for ; Fri, 24 Oct 2025 17:59:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328755; cv=none; b=JQ/dVU+7pXWCxEk2TBr2QIWee1tZ1C4uYKgdqacXghZrLHdNLOVOsA4Fmn9Uhz56kKEsBNG/+SiYpQ6my8J4Zhcc7FLkI+83sjeDOlETty2ngZ+2hP46yskMvnVDib65PVl8Z65C0FpUFBfJIfyk0PwiySvVxf7EK1e2LrR/QxE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328755; c=relaxed/simple; bh=e4R6AVkXL/b1gApEzWYidv1J/iqwS7GQ4hazLe6UCLU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uD27Crape8fs8/yHDNw3ht0KnUtkmQ9AknIsf3ZS87fNQh3NWAs/V/c3fqAwZao1TZ7Pb1ptOu5nJfe8WaaMHblBVjZXRYR+9YxZtT0T2BZPN+eRjVW2yqM4mcxbOndAD4lmlmTd/iRIiJfWhdHje+CjyEHjjvtN5w5WjH+zFvs= 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=qZii0vf4; arc=none smtp.client-ip=209.85.214.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="qZii0vf4" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-27356178876so15183325ad.1 for ; Fri, 24 Oct 2025 10:59:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328753; x=1761933553; 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=nG2hV1s5ki9YDnz6tl1mLOAmUldYkmEMzzCVZ1F8mHU=; b=qZii0vf4cZqcISjkB2gZFbGRrAdyCZ7zFWbRFMLAMfhLowyYGD5v92Hha0wQpzFLzq olGjzLv8Km6yYuh1bKkk4j5NaQVCo1NYUf1Eyss0L3jL8QZvnKkqTVfdiyxjt6PN6okI Vb2ZKPGjb9MYujb73/CrHhgOMu94FljpYLK9i+y8v+3lOScwYyf96i0faoc38iuY0mxU GaMcfs80S7kQUi/XFeFT8vayWIANUvGAAvkEfD0lXmFj3hRqO61bx+8qU5sqh+93pfiB +ecpFhYKaBon3zLpdC1V7EeH8YAfmJOaKO1KekK+DveSw78gvYycgaNwAcUPCnl6fCdN 59AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328753; x=1761933553; 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=nG2hV1s5ki9YDnz6tl1mLOAmUldYkmEMzzCVZ1F8mHU=; b=U85JQe9ZlcllHgpygx+YMhSoiBYRSP7Ds5xFGmFhLrUN53UW16R6XMFA462w/2F68E uDkk0l60Ofpvd8T7vYDcZUnSxV+zre+A0cSR9zHtcgStAGAn3bO+WhmOyjDdLMQigswX wvZZHAggf1cUCldKujuv3yA8Xt8efGby9GZYk8Q0qlxi1yXeOwhT8RyPX7Cd1UrxLUfx oH/07hwc3azF8LftZfAsGTMWIRjMNpEA9AzScH68v1+GJo/HYd9mKESHBdzx9CJcHQRn rscFcJgHwggHOb5PWQdyChwiDNSd0zgMgBHn6RRZEI0mfqL0eKES5rCFH7nSfGUCIUEi KLvg== X-Forwarded-Encrypted: i=1; AJvYcCUl4AHGHUzilNvLtl5UIBNGpEOUsSsUhgM3/uUtk5Z2/ra4eDWaI0gH0y6ErMUHJS1iU2oeR8KyI7SR72U=@vger.kernel.org X-Gm-Message-State: AOJu0YxUJa7Gp4nOwvUeApFpnBSP7hFIJHXi40F9OBYzBylGPRrMA7TB plTM4G/pk5IzKeYKd+nxXWEv4DZBpteXgxrEMM+T1D+0KPuaAxpvQVtBo/BlnR0iXnBfFc6bcj+ o7u0/Y1h3GQ== X-Google-Smtp-Source: AGHT+IErrc3a+M+Y7idOuC3m/1xAORwpqR28MnITxE1vZU6cFGOIA0Krct48wBGfAWPzIT+JWfWUg52NODQo X-Received: from pltf1.prod.google.com ([2002:a17:902:74c1:b0:267:ddd1:bc97]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d506:b0:290:c5c8:9412 with SMTP id d9443c01a7336-290c9cf37demr393918065ad.5.1761328753299; Fri, 24 Oct 2025 10:59:13 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:41 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-7-irogers@google.com> Subject: [PATCH v1 06/22] perf jevents: Make all tables static From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The tables created by jevents.py are only used within the pmu-events.c file. Change the declarations of those global variables to be static to encapsulate this. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/empty-pmu-events.c | 10 +++++----- tools/perf/pmu-events/jevents.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-even= ts/empty-pmu-events.c index 336e3924ce84..5120fb93690e 100644 --- a/tools/perf/pmu-events/empty-pmu-events.c +++ b/tools/perf/pmu-events/empty-pmu-events.c @@ -2585,7 +2585,7 @@ static const struct compact_pmu_event pmu_events__com= mon_tool[] =3D { =20 }; =20 -const struct pmu_table_entry pmu_events__common[] =3D { +static const struct pmu_table_entry pmu_events__common[] =3D { { .entries =3D pmu_events__common_default_core, .num_entries =3D ARRAY_SIZE(pmu_events__common_default_core), @@ -2630,7 +2630,7 @@ static const struct compact_pmu_event pmu_events__tes= t_soc_cpu_uncore_imc_free_r =20 }; =20 -const struct pmu_table_entry pmu_events__test_soc_cpu[] =3D { +static const struct pmu_table_entry pmu_events__test_soc_cpu[] =3D { { .entries =3D pmu_events__test_soc_cpu_default_core, .num_entries =3D ARRAY_SIZE(pmu_events__test_soc_cpu_default_core), @@ -2682,7 +2682,7 @@ static const struct compact_pmu_event pmu_metrics__te= st_soc_cpu_default_core[] =3D =20 }; =20 -const struct pmu_table_entry pmu_metrics__test_soc_cpu[] =3D { +static const struct pmu_table_entry pmu_metrics__test_soc_cpu[] =3D { { .entries =3D pmu_metrics__test_soc_cpu_default_core, .num_entries =3D ARRAY_SIZE(pmu_metrics__test_soc_cpu_default_core), @@ -2701,7 +2701,7 @@ static const struct compact_pmu_event pmu_events__tes= t_soc_sys_uncore_sys_ddr_pm =20 }; =20 -const struct pmu_table_entry pmu_events__test_soc_sys[] =3D { +static const struct pmu_table_entry pmu_events__test_soc_sys[] =3D { { .entries =3D pmu_events__test_soc_sys_uncore_sys_ccn_pmu, .num_entries =3D ARRAY_SIZE(pmu_events__test_soc_sys_uncore_sys_ccn_p= mu), @@ -2751,7 +2751,7 @@ struct pmu_events_map { * Global table mapping each known CPU for the architecture to its * table of PMU events. */ -const struct pmu_events_map pmu_events_map[] =3D { +static const struct pmu_events_map pmu_events_map[] =3D { { .arch =3D "common", .cpuid =3D "common", diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 1f3917cbff87..786a7049363f 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -550,7 +550,7 @@ def print_pending_events() -> None: _args.output_file.write(f""" }}; =20 -const struct pmu_table_entry {_pending_events_tblname}[] =3D {{ +static const struct pmu_table_entry {_pending_events_tblname}[] =3D {{ """) for (pmu, tbl_pmu) in sorted(pmus): pmu_name =3D f"{pmu}\\000" @@ -605,7 +605,7 @@ def print_pending_metrics() -> None: _args.output_file.write(f""" }}; =20 -const struct pmu_table_entry {_pending_metrics_tblname}[] =3D {{ +static const struct pmu_table_entry {_pending_metrics_tblname}[] =3D {{ """) for (pmu, tbl_pmu) in sorted(pmus): pmu_name =3D f"{pmu}\\000" @@ -730,7 +730,7 @@ struct pmu_events_map { * Global table mapping each known CPU for the architecture to its * table of PMU events. */ -const struct pmu_events_map pmu_events_map[] =3D { +static const struct pmu_events_map pmu_events_map[] =3D { """) for arch in archs: if arch =3D=3D 'test': --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 4E02134886B for ; Fri, 24 Oct 2025 17:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328757; cv=none; b=SYdk2u6Jg4A+ecjHQZ7lb3Y0DK0pQJTLg3J5yWOCTsT2rBuyoeD9qNWSL+eINfzNO/rbzY4vFPYa+Lm2aFhltirlj5wzayRpZOwBO7c3jioleBrEpQa8DGg+kwUvJsSlJz6Dd/qcbTKlDaGWBc/rbdXCNi1JJzE8t/KcpwwpKio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328757; c=relaxed/simple; bh=9/epWOlvqRElvVAYkJLo+3zLaR28RumkRGXocbmxMUo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XdZlMKivLbZkpSfHMY8nJFPHuSv3iCD1WTk5g6qs5y/YNNC30XCLUNAaCCI5X7tJ2YJ/OmMWCq9fYPYkPwbEzRYZSmyELWltj29Bs1hVNjrS67ENmtq9RpiZZNZbTIyM2K1X3F3YBDgyyA1btsG6L0gRENL7+QBEtenYtLFXJIE= 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=J3AKIj8r; arc=none smtp.client-ip=209.85.216.73 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="J3AKIj8r" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-339b704e2e3so2316611a91.2 for ; Fri, 24 Oct 2025 10:59:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328755; x=1761933555; 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=APc54Tj3AQGNHWIUCnd6bMLg8AtBQwOaMT/IoX0GM6E=; b=J3AKIj8rfNUPwYC0wL2uniOeVPOnWuZKfrfIM1GjmbG5/6wU5HNBFaQj6GRuzLaa88 5pzOFcUtliJmkx2xl2r4urdJwQRRTP4mAUfS3zqMtsEsmok4Bn3WgZtZUTR6yTtpvPtI 5u3vyF2L/KFEUltnLDiF061ou5Oibb0PBbMnZ0SPDE6PK9TcAVBc6VIRdWvQWTWoiQFu 4aRxNC47flr/qS4MIoKoJ5GlCcQ9opNemAYftCTO7Mzl7zRCHxwFdO3ra/XARTOIHiWH /QhvyhKpv016k0B2NnLsEKdQCt27j5rGr/cnMs6HA9e4BmaRKkbpqEA53O7qa2in5cfu 2eyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328755; x=1761933555; 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=APc54Tj3AQGNHWIUCnd6bMLg8AtBQwOaMT/IoX0GM6E=; b=CuzK45cDVLh/hgsH07OGHImlU0ijOCt7Dur3fBPLEOhC8UnistGL5PmHE3MrHusTyh zqihXPTOLpRaX7x1+RVDdbRtoEpWhEwzPyY8lW/iKoIxO7ktOGnniv/N6riF5R7kZKH9 r/SOEFA0yUJeNkOv8G+SIdsfI6Id3KphGZsnwWsktajXeb60oibDnMnTWF68rnM8i6xc v6PFpfbzEQ8RkgB+CSAmD9AKF4uNwB75ipZxkEZgKDnvkhU1nq5IRxi3cnMfa8K9BemY Vyg2bQRvSUYG34XazBUDrZ5eS8tfMSPth52k4w8qhXebb1k+huIT2M1YUI6eeBSJE02S W7HA== X-Forwarded-Encrypted: i=1; AJvYcCUePRuWETewFmLKrbdudl3EFLvwjvWlP13mP284aDBShSHwr2G4UTCxLnq9YUX8ELFFk7y2mNtOOZAx+1M=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0i5pk6vNTcjP3k0SktyurcfJxX4dM6bMR0+tHIgUcKhqoS+UY 1UDDChCfgHJQArrNKGMFQXSoUap+/m1JGZiYEVh+8VNvR+/3ovFLDtDj7qWJHd9tEzftqbcRo1K ki4qxxrcd+A== X-Google-Smtp-Source: AGHT+IEN1iYOPYV7RXFzzvFzF07chEYfhJgksicY9whr0oTjDXk5EpLLJoQwOutmfEvwxm3VlnvXeCyC0ic8 X-Received: from pjbjz8.prod.google.com ([2002:a17:90b:14c8:b0:33b:dbe2:7682]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2b4b:b0:33b:c20a:35e0 with SMTP id 98e67ed59e1d1-33bcf90c1d3mr34702592a91.30.1761328755526; Fri, 24 Oct 2025 10:59:15 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:42 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-8-irogers@google.com> Subject: [PATCH v1 07/22] perf expr: Add #target_cpu literal From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For CPU nanoseconds a lot of the stat-shadow metrics use either task-clock or cpu-clock, the latter being used when target__has_cpu. Add a #target_cpu literal so that json metrics can perform the same test. Signed-off-by: Ian Rogers --- tools/perf/util/expr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c index 7fda0ff89c16..4df56f2b283d 100644 --- a/tools/perf/util/expr.c +++ b/tools/perf/util/expr.c @@ -409,6 +409,9 @@ double expr__get_literal(const char *literal, const str= uct expr_scanner_ctx *ctx } else if (!strcmp("#core_wide", literal)) { result =3D core_wide(ctx->system_wide, ctx->user_requested_cpu_list) ? 1.0 : 0.0; + } else if (!strcmp("#target_cpu", literal)) { + result =3D (ctx->system_wide || ctx->user_requested_cpu_list) + ? 1.0 : 0.0; } else { pr_err("Unrecognized literal '%s'", literal); } --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 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 66D3934888A for ; Fri, 24 Oct 2025 17:59:18 +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=1761328761; cv=none; b=sJG9iYmOT1N515hm7LVo+lbULEJ7APMEv96ljYdNXkPL6j9K3y/DJVGZ/flbu86d41MaCaEwCBs3omPoO53yog5vvQGLC9CTed1MwY3j3beHOYG1Hwvx5N7Bk6qb3CDcwa/DpUKUgZoS8gG2qZPU2Z0MjMouNNJmUR7UbS4fOnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328761; c=relaxed/simple; bh=uOiV3ZBbNv9fUisQMgBgl952gbLH6RckrVM3bhpV5kc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=oFGmOLvQoE7ZfsEPtISDf97vbVTTMtxpGoey/BqoF3s/GXEC8eNd7+7fXHBaPBonre2S7aKD7U94rB9bU8L5jlxFDWVleXl6in6Qd2aX9EWqa+vhU17/dfKe8sL8RzNYQPdnI+YF07ByvP0UIUJcsIIUqfi9w3NIiJ5ZYNW9cv4= 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=KJlxcWtA; 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="KJlxcWtA" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b5533921eb2so1346690a12.0 for ; Fri, 24 Oct 2025 10:59:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328758; x=1761933558; darn=vger.kernel.org; h=content-transfer-encoding:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=v8OKG1TWs1PFsL88A5PBuCZjZcsooF2yFVO9LCklgR0=; b=KJlxcWtAbBKt5elyEkZsMeOzoIXobyD/eQTcH1cKRqS/RRBxG6wQFZ2CFDDYqur07h jCcZpAqSTgMdg2VbNlhbObauG2V6i5ccI7P0ehXjRQ+sYjJeGFRdLQXZPpt1bBylVQkS 5Y4mQ4Os/1IDorvrTpE3fW5tu3NeiZHvXPeoq3Gwv2oT1nGyVbunNHtHddhNbhXqxfdL zW9ctg6/92ZeDd4PJ2rZg9AY3b2azDw8ju1er1HM1Xjitsg0xF81Lw0iQSuoQiJyXLrg bxHrAVLa3VQgKi9e66MbcGJZ91CBs+Km+hXi6+xezf+gqCa4IZYFXBZJtphTtbI+o60C TahA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328758; x=1761933558; h=content-transfer-encoding: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=v8OKG1TWs1PFsL88A5PBuCZjZcsooF2yFVO9LCklgR0=; b=A5M0espRZa7Ct1VbD/GSOMZrES/iY3LKPoahoXBPEPO9dYWX8kgOai+WXjkN2jlCIg kW+kmJ5zxcxz9V35DrCXHCWU/OgZfDDr1/M9c8BHeXLg6qKumM9ENJJJTHTjNfyF4sDg Zs/H3uJ/ssT/uN7abEOw1MGK8rAWAHkc48hqaZQR9RW75E9+rXFKX7fdwD83iaYbcrUc Mb7PjR7TWXOt7osTzmaRpVzpY4uuGLvaLmAC69jhZV3GDWqTepxcjbE31uec+/RfwVCt 2BNIun4VoaRPiIbSflwxVHBji05GlNnouVSyUF9aRVLJLugYJMjAm1VJpNuyDUYJ0Ijf w78w== X-Forwarded-Encrypted: i=1; AJvYcCV3EGISrzPcLJl2XgREpMYUA9uEH90IXp2pbZxjVxFJQu2XDPy/SPr2mEt8B3IgKSmV19D/EohPTnOakx4=@vger.kernel.org X-Gm-Message-State: AOJu0YxCxTRywG2kA9Hy6/gT0jJAgzrdR5UWCh44/EVzkMxsQXmIiBZT wq2kNPjxgmXuDuHF/pPsPgzv8b4374TMajgWB5cb7yNlUn4Z5L/A4xmt6P5Zc7ihGlHQKYYU17U WxoyBIHnLOQ== X-Google-Smtp-Source: AGHT+IFJ49mqxE+2EwCzO+r3U4WlUe8igeVps6hoEfj21csHmCgwhWEcyGVFLhpGPteFRGZW3kfIq0DB8XIN X-Received: from plge5.prod.google.com ([2002:a17:902:cf45:b0:294:8824:6fb0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e809:b0:250:1c22:e78 with SMTP id d9443c01a7336-2948b9576cemr40522555ad.1.1761328757730; Fri, 24 Oct 2025 10:59:17 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:43 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-9-irogers@google.com> Subject: [PATCH v1 08/22] perf jevents: Add set of common metrics based on default ones From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add support to getting a common set of metrics from a default table. It simplifies the generation to add json metrics at the same time. The metrics added are CPUs_utilized, cs_per_second, migrations_per_second, page_faults_per_second, insn_per_cycle, stalled_cycles_per_instruction, frontend_cycles_idle, backend_cycles_idle, cycles_frequency, branch_frequency and branch_miss_rate based on the shadow metric definitions. Following this change the default perf stat output on an alderlake looks li= ke: ``` $ perf stat -a -- sleep 1 Performance counter stats for 'system wide': 28,165,735,434 cpu-clock # 27.973 CPUs ut= ilized 23,220 context-switches # 824.406 /sec 833 cpu-migrations # 29.575 /sec 35,293 page-faults # 1.253 K/sec 997,341,554 cpu_atom/instructions/ # 0.84 insn pe= r cycle (35.63%) 11,197,053,736 cpu_core/instructions/ # 1.97 insn pe= r cycle (58.21%) 1,184,871,493 cpu_atom/cycles/ # 0.042 GHz = (35.64%) 5,676,692,769 cpu_core/cycles/ # 0.202 GHz = (58.22%) 150,525,309 cpu_atom/branches/ # 5.344 M/sec = (42.80%) 2,277,232,030 cpu_core/branches/ # 80.851 M/sec = (58.21%) 5,248,575 cpu_atom/branch-misses/ # 3.49% of all = branches (42.82%) 28,829,930 cpu_core/branch-misses/ # 1.27% of all = branches (58.22%) (software) # 824.4 cs/sec cs_per= _second TopdownL1 (cpu_core) # 12.6 % tma_bad_spe= culation # 28.8 % tma_fronten= d_bound (66.57%) TopdownL1 (cpu_core) # 25.8 % tma_backend= _bound # 32.8 % tma_retirin= g (66.57%) (software) # 1253.1 faults/sec pa= ge_faults_per_second # 0.0 GHz cycles_fr= equency (42.80%) # 0.2 GHz cycles_fr= equency (74.92%) TopdownL1 (cpu_atom) # 22.3 % tma_bad_spe= culation # 17.2 % tma_retirin= g (49.95%) TopdownL1 (cpu_atom) # 30.6 % tma_backend= _bound # 29.8 % tma_fronten= d_bound (49.94%) (cpu_atom) # 6.9 K/sec branch_= frequency (42.89%) # 80.5 K/sec branch_= frequency (74.93%) # 29.6 migrations/sec= migrations_per_second # 28.0 CPUs CPUs_uti= lized (cpu_atom) # 0.8 instructions = insn_per_cycle (42.91%) # 2.0 instructions = insn_per_cycle (75.14%) (cpu_atom) # 3.8 % branch_miss= _rate (35.75%) # 1.2 % branch_miss= _rate (66.86%) 1.007063529 seconds time elapsed ``` Signed-off-by: Ian Rogers --- .../arch/common/common/metrics.json | 86 +++++++++++++ tools/perf/pmu-events/empty-pmu-events.c | 115 +++++++++++++----- tools/perf/pmu-events/jevents.py | 21 +++- tools/perf/pmu-events/pmu-events.h | 1 + tools/perf/util/metricgroup.c | 31 +++-- 5 files changed, 212 insertions(+), 42 deletions(-) create mode 100644 tools/perf/pmu-events/arch/common/common/metrics.json diff --git a/tools/perf/pmu-events/arch/common/common/metrics.json b/tools/= perf/pmu-events/arch/common/common/metrics.json new file mode 100644 index 000000000000..d1e37db18dc6 --- /dev/null +++ b/tools/perf/pmu-events/arch/common/common/metrics.json @@ -0,0 +1,86 @@ +[ + { + "BriefDescription": "Average CPU utilization", + "MetricExpr": "(software@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #t= arget_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@) / (duration_= time * 1e9)", + "MetricGroup": "Default", + "MetricName": "CPUs_utilized", + "ScaleUnit": "1CPUs", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Context switches per CPU second", + "MetricExpr": "(software@context\\-switches\\,name\\=3Dcontext\\-s= witches@ * 1e9) / (software@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_= cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)", + "MetricGroup": "Default", + "MetricName": "cs_per_second", + "ScaleUnit": "1cs/sec", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Process migrations to a new CPU per CPU secon= d", + "MetricExpr": "(software@cpu\\-migrations\\,name\\=3Dcpu\\-migrati= ons@ * 1e9) / (software@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu = else software@task\\-clock\\,name\\=3Dtask\\-clock@)", + "MetricGroup": "Default", + "MetricName": "migrations_per_second", + "ScaleUnit": "1migrations/sec", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Page faults per CPU second", + "MetricExpr": "(software@page\\-faults\\,name\\=3Dpage\\-faults@ *= 1e9) / (software@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else s= oftware@task\\-clock\\,name\\=3Dtask\\-clock@)", + "MetricGroup": "Default", + "MetricName": "page_faults_per_second", + "ScaleUnit": "1faults/sec", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Instructions Per Cycle", + "MetricExpr": "instructions / cpu\\-cycles", + "MetricGroup": "Default", + "MetricName": "insn_per_cycle", + "MetricThreshold": "insn_per_cycle < 1", + "ScaleUnit": "1instructions" + }, + { + "BriefDescription": "Max front or backend stalls per instruction", + "MetricExpr": "max(stalled\\-cycles\\-frontend, stalled\\-cycles\\= -backend) / instructions", + "MetricGroup": "Default", + "MetricName": "stalled_cycles_per_instruction" + }, + { + "BriefDescription": "Frontend stalls per cycle", + "MetricExpr": "stalled\\-cycles\\-frontend / cpu\\-cycles", + "MetricGroup": "Default", + "MetricName": "frontend_cycles_idle", + "MetricThreshold": "frontend_cycles_idle > 0.1" + }, + { + "BriefDescription": "Backend stalls per cycle", + "MetricExpr": "stalled\\-cycles\\-backend / cpu\\-cycles", + "MetricGroup": "Default", + "MetricName": "backend_cycles_idle", + "MetricThreshold": "backend_cycles_idle > 0.2" + }, + { + "BriefDescription": "Cycles per CPU second", + "MetricExpr": "cpu\\-cycles / (software@cpu\\-clock\\,name\\=3Dcpu= \\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock= @)", + "MetricGroup": "Default", + "MetricName": "cycles_frequency", + "ScaleUnit": "1GHz", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Branches per CPU second", + "MetricExpr": "branches / (software@cpu\\-clock\\,name\\=3Dcpu\\-c= lock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)", + "MetricGroup": "Default", + "MetricName": "branch_frequency", + "ScaleUnit": "1000K/sec", + "MetricConstraint": "NO_GROUP_EVENTS" + }, + { + "BriefDescription": "Branch miss rate", + "MetricExpr": "branch\\-misses / branches", + "MetricGroup": "Default", + "MetricName": "branch_miss_rate", + "MetricThreshold": "branch_miss_rate > 0.05", + "ScaleUnit": "100%" + } +] diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-even= ts/empty-pmu-events.c index 5120fb93690e..83a01ecc625e 100644 --- a/tools/perf/pmu-events/empty-pmu-events.c +++ b/tools/perf/pmu-events/empty-pmu-events.c @@ -1303,21 +1303,32 @@ static const char *const big_c_string =3D /* offset=3D127503 */ "sys_ccn_pmu.read_cycles\000uncore\000ccn read-cycle= s event\000config=3D0x2c\0000x01\00000\000\000\000\000\000" /* offset=3D127580 */ "uncore_sys_cmn_pmu\000" /* offset=3D127599 */ "sys_cmn_pmu.hnf_cache_miss\000uncore\000Counts tota= l cache misses in first lookup result (high priority)\000eventid=3D1,type= =3D5\000(434|436|43c|43a).*\00000\000\000\000\000\000" -/* offset=3D127742 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 0" -/* offset=3D127764 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\00000" -/* offset=3D127827 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000" -/* offset=3D127993 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\00000" -/* offset=3D128057 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\00000" -/* offset=3D128124 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\00000" -/* offset=3D128195 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000" -/* offset=3D128289 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\00000" -/* offset=3D128423 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\00000" -/* offset=3D128487 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\00000" -/* offset=3D128555 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\00000" -/* offset=3D128625 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 0" -/* offset=3D128647 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 0" -/* offset=3D128669 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\00000" -/* offset=3D128689 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\00000" +/* offset=3D127742 */ "CPUs_utilized\000Default\000(software@cpu\\-clock\\= ,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\= =3Dtask\\-clock@) / (duration_time * 1e9)\000\000Average CPU utilization\00= 0\0001CPUs\000\000\000\00001" +/* offset=3D127927 */ "cs_per_second\000Default\000software@context\\-swit= ches\\,name\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Context switches per CPU second\000\0001cs/sec\000\000\000\= 00001" +/* offset=3D128159 */ "migrations_per_second\000Default\000software@cpu\\-= migrations\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,nam= e\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtas= k\\-clock@)\000\000Process migrations to a new CPU per CPU second\000\0001m= igrations/sec\000\000\000\00001" +/* offset=3D128418 */ "page_faults_per_second\000Default\000software@page\= \-faults\\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Page faults per CPU second\000\0001faults/sec\000\000\000\0= 0001" +/* offset=3D128648 */ "insn_per_cycle\000Default\000instructions / cpu\\-c= ycles\000insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\= 000\000\000\00000" +/* offset=3D128760 */ "stalled_cycles_per_instruction\000Default\000max(st= alled\\-cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\0= 00Max front or backend stalls per instruction\000\000\000\000\000\00000" +/* offset=3D128923 */ "frontend_cycles_idle\000Default\000stalled\\-cycles= \\-frontend / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls= per cycle\000\000\000\000\000\00000" +/* offset=3D129052 */ "backend_cycles_idle\000Default\000stalled\\-cycles\= \-backend / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per= cycle\000\000\000\000\000\00000" +/* offset=3D129177 */ "cycles_frequency\000Default\000cpu\\-cycles / (soft= ware@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\= \-clock\\,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\= 000\000\000\00001" +/* offset=3D129352 */ "branch_frequency\000Default\000branches / (software= @cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-cl= ock\\,name\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/s= ec\000\000\000\00001" +/* offset=3D129531 */ "branch_miss_rate\000Default\000branch\\-misses / br= anches\000branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\0= 00\00000" +/* offset=3D129634 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 0" +/* offset=3D129656 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\00000" +/* offset=3D129719 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000" +/* offset=3D129885 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\00000" +/* offset=3D129949 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\00000" +/* offset=3D130016 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\00000" +/* offset=3D130087 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000" +/* offset=3D130181 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\00000" +/* offset=3D130315 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\00000" +/* offset=3D130379 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\00000" +/* offset=3D130447 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\00000" +/* offset=3D130517 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 0" +/* offset=3D130539 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 0" +/* offset=3D130561 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\00000" +/* offset=3D130581 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\00000" ; =20 static const struct compact_pmu_event pmu_events__common_default_core[] = =3D { @@ -2603,6 +2614,29 @@ static const struct pmu_table_entry pmu_events__comm= on[] =3D { }, }; =20 +static const struct compact_pmu_event pmu_metrics__common_default_core[] = =3D { +{ 127742 }, /* CPUs_utilized\000Default\000(software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@) / (duration_time * 1e9)\000\000Average CPU utilization\000\0001CPU= s\000\000\000\00001 */ +{ 129052 }, /* backend_cycles_idle\000Default\000stalled\\-cycles\\-backen= d / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per cycle\0= 00\000\000\000\000\00000 */ +{ 129352 }, /* branch_frequency\000Default\000branches / (software@cpu\\-c= lock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,na= me\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/sec\000\0= 00\000\00001 */ +{ 129531 }, /* branch_miss_rate\000Default\000branch\\-misses / branches\0= 00branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\000\00000= */ +{ 127927 }, /* cs_per_second\000Default\000software@context\\-switches\\,n= ame\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-= clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\= 000\000Context switches per CPU second\000\0001cs/sec\000\000\000\00001 */ +{ 129177 }, /* cycles_frequency\000Default\000cpu\\-cycles / (software@cpu= \\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\= \,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\000\000\= 000\00001 */ +{ 128923 }, /* frontend_cycles_idle\000Default\000stalled\\-cycles\\-front= end / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls per cyc= le\000\000\000\000\000\00000 */ +{ 128648 }, /* insn_per_cycle\000Default\000instructions / cpu\\-cycles\00= 0insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\000\000\= 000\00000 */ +{ 128159 }, /* migrations_per_second\000Default\000software@cpu\\-migratio= ns\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcp= u\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-cloc= k@)\000\000Process migrations to a new CPU per CPU second\000\0001migration= s/sec\000\000\000\00001 */ +{ 128418 }, /* page_faults_per_second\000Default\000software@page\\-faults= \\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-c= lock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\0= 00\000Page faults per CPU second\000\0001faults/sec\000\000\000\00001 */ +{ 128760 }, /* stalled_cycles_per_instruction\000Default\000max(stalled\\-= cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\000Max fr= ont or backend stalls per instruction\000\000\000\000\000\00000 */ + +}; + +static const struct pmu_table_entry pmu_metrics__common[] =3D { +{ + .entries =3D pmu_metrics__common_default_core, + .num_entries =3D ARRAY_SIZE(pmu_metrics__common_default_core), + .pmu_name =3D { 0 /* default_core\000 */ }, +}, +}; + static const struct compact_pmu_event pmu_events__test_soc_cpu_default_cor= e[] =3D { { 126189 }, /* bp_l1_btb_correct\000branch\000L1 BTB Correction\000event= =3D0x8a\000\00000\000\000\000\000\000 */ { 126251 }, /* bp_l2_btb_correct\000branch\000L2 BTB Correction\000event= =3D0x8b\000\00000\000\000\000\000\000 */ @@ -2664,21 +2698,21 @@ static const struct pmu_table_entry pmu_events__tes= t_soc_cpu[] =3D { }; =20 static const struct compact_pmu_event pmu_metrics__test_soc_cpu_default_co= re[] =3D { -{ 127742 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\00000 */ -{ 128423 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\00000 */ -{ 128195 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000 */ -{ 128289 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\00000 */ -{ 128487 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\00000 */ -{ 128555 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\00000 */ -{ 127827 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000 */ -{ 127764 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\00000 */ -{ 128689 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\00000 */ -{ 128625 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\00000 */ -{ 128647 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\00000 */ -{ 128669 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\00000 */ -{ 128124 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\00000 */ -{ 127993 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\00000 */ -{ 128057 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\00000 */ +{ 129634 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\00000 */ +{ 130315 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\00000 */ +{ 130087 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000 */ +{ 130181 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\00000 */ +{ 130379 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\00000 */ +{ 130447 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\00000 */ +{ 129719 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000 */ +{ 129656 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\00000 */ +{ 130581 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\00000 */ +{ 130517 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\00000 */ +{ 130539 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\00000 */ +{ 130561 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\00000 */ +{ 130016 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\00000 */ +{ 129885 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\00000 */ +{ 129949 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\00000 */ =20 }; =20 @@ -2759,7 +2793,10 @@ static const struct pmu_events_map pmu_events_map[] = =3D { .pmus =3D pmu_events__common, .num_pmus =3D ARRAY_SIZE(pmu_events__common), }, - .metric_table =3D {}, + .metric_table =3D { + .pmus =3D pmu_metrics__common, + .num_pmus =3D ARRAY_SIZE(pmu_metrics__common), + }, }, { .arch =3D "testarch", @@ -3208,6 +3245,22 @@ const struct pmu_metrics_table *pmu_metrics_table__f= ind(void) return map ? &map->metric_table : NULL; } =20 +const struct pmu_metrics_table *pmu_metrics_table__default(void) +{ + int i =3D 0; + + for (;;) { + const struct pmu_events_map *map =3D &pmu_events_map[i++]; + + if (!map->arch) + break; + + if (!strcmp(map->cpuid, "common")) + return &map->metric_table; + } + return NULL; +} + const struct pmu_events_table *find_core_events_table(const char *arch, co= nst char *cpuid) { for (const struct pmu_events_map *tables =3D &pmu_events_map[0]; diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 786a7049363f..5d3f4b44cfb7 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -755,7 +755,10 @@ static const struct pmu_events_map pmu_events_map[] = =3D { \t\t.pmus =3D pmu_events__common, \t\t.num_pmus =3D ARRAY_SIZE(pmu_events__common), \t}, -\t.metric_table =3D {}, +\t.metric_table =3D { +\t\t.pmus =3D pmu_metrics__common, +\t\t.num_pmus =3D ARRAY_SIZE(pmu_metrics__common), +\t}, }, """) else: @@ -1237,6 +1240,22 @@ const struct pmu_metrics_table *pmu_metrics_table__f= ind(void) return map ? &map->metric_table : NULL; } =20 +const struct pmu_metrics_table *pmu_metrics_table__default(void) +{ + int i =3D 0; + + for (;;) { + const struct pmu_events_map *map =3D &pmu_events_map[i++]; + + if (!map->arch) + break; + + if (!strcmp(map->cpuid, "common")) + return &map->metric_table; + } + return NULL; +} + const struct pmu_events_table *find_core_events_table(const char *arch, co= nst char *cpuid) { for (const struct pmu_events_map *tables =3D &pmu_events_map[0]; diff --git a/tools/perf/pmu-events/pmu-events.h b/tools/perf/pmu-events/pmu= -events.h index e0535380c0b2..559265a903c8 100644 --- a/tools/perf/pmu-events/pmu-events.h +++ b/tools/perf/pmu-events/pmu-events.h @@ -127,6 +127,7 @@ int pmu_metrics_table__find_metric(const struct pmu_met= rics_table *table, const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu= *pmu); const struct pmu_events_table *perf_pmu__default_core_events_table(void); const struct pmu_metrics_table *pmu_metrics_table__find(void); +const struct pmu_metrics_table *pmu_metrics_table__default(void); const struct pmu_events_table *find_core_events_table(const char *arch, co= nst char *cpuid); const struct pmu_metrics_table *find_core_metrics_table(const char *arch, = const char *cpuid); int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data); diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 76092ee26761..e67e04ce01c9 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -424,10 +424,18 @@ int metricgroup__for_each_metric(const struct pmu_met= rics_table *table, pmu_metr .fn =3D fn, .data =3D data, }; + const struct pmu_metrics_table *tables[2] =3D { + table, + pmu_metrics_table__default(), + }; + + for (size_t i =3D 0; i < ARRAY_SIZE(tables); i++) { + int ret; =20 - if (table) { - int ret =3D pmu_metrics_table__for_each_metric(table, fn, data); + if (!tables[i]) + continue; =20 + ret =3D pmu_metrics_table__for_each_metric(tables[i], fn, data); if (ret) return ret; } @@ -1581,19 +1589,22 @@ static int metricgroup__has_metric_or_groups_callba= ck(const struct pmu_metric *p =20 bool metricgroup__has_metric_or_groups(const char *pmu, const char *metric= _or_groups) { - const struct pmu_metrics_table *table =3D pmu_metrics_table__find(); + const struct pmu_metrics_table *tables[2] =3D { + pmu_metrics_table__find(), + pmu_metrics_table__default(), + }; struct metricgroup__has_metric_data data =3D { .pmu =3D pmu, .metric_or_groups =3D metric_or_groups, }; =20 - if (!table) - return false; - - return pmu_metrics_table__for_each_metric(table, - metricgroup__has_metric_or_groups_callback, - &data) - ? true : false; + for (size_t i =3D 0; i < ARRAY_SIZE(tables); i++) { + if (pmu_metrics_table__for_each_metric(tables[i], + metricgroup__has_metric_or_groups_callback, + &data)) + return true; + } + return false; } =20 static int metricgroup__topdown_max_level_callback(const struct pmu_metric= *pm, --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 B5F883491DF for ; Fri, 24 Oct 2025 17:59:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328763; cv=none; b=XBDIRbUdgmXSdZ9fhlKzBhT/tac7b67S3LHCGwM3NLMeOSXm9XYdaWMafnaTZSojE7RnxdQQsxCi3CusfTwjxFy5o64od3DW07AaPml9jyuZNQpdtKPLp/WVxXQcXDx4onZ1WglAAvJWno0WQ7CNxlux99/qOy+Yo4RwmFf4iQM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328763; c=relaxed/simple; bh=r/jHsAaC5UE+sGy+jk3EvuTBXiW4wqUjs3xLoLTqLMM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=luU4x5ohb7f0R+2tv1OT9E8RpzYcvkQLrSXmOqEJiK48qC/mSBBPPOI4TS8hK6bOkky/iSSqwG9k1qNpHVaa0KS2VvU7fEAkbkalvn8bn7n9p65+Y7uGdJtWq2EDQuuIbQjMmXKtHYVFLjBddxHbgTDRAcmEHYwGTCgwyERmtGM= 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=Dr9kx+Gb; arc=none smtp.client-ip=209.85.216.73 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="Dr9kx+Gb" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32eb18b5659so1859265a91.2 for ; Fri, 24 Oct 2025 10:59:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328760; x=1761933560; darn=vger.kernel.org; h=content-transfer-encoding:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=vnvrT+AWmZETswd//azIJ9a9kv3HAD8wcWT84bIVDf4=; b=Dr9kx+GbFHTPCoD7dfkKf9uZQc/shT6n/1Wd/QaDKHjE2b9c5vQekutwlULvXOwe6k byDiag7fVALEgU/t7BL7eQPKN4PMzBYe+GquffT/4ZAogBasQv7GPwSrJfJ+XrXXTRqX 6RlpdiADykoYfAd94x6K4RUrOhMKMn7w3aZkHCIWDkNmtL1SoZTKug+yvRAnJsIko54a hNU20EHV2NRlFEatohdWkFRpyM/IeksstuxdZTBJJo1pUiCU1cbCL4vX4KivXjWARub7 drmxVWsfhrfRCDOFUnlwR3vfCG9uON2ye3pbrCsDhDdDGWw+CajXBzpzt9kJzRjYfu4S OutQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328760; x=1761933560; h=content-transfer-encoding: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=vnvrT+AWmZETswd//azIJ9a9kv3HAD8wcWT84bIVDf4=; b=ZBDyyU8uOp4Pe+Yey0UfpdY+m5hEYx0Mjt/b07VzMq/bv6ZWc7Z+No4ufGrPf/F3Lf rrvcOls+BJpUfyjZG24WHOSQzPyvcRRTQv+6G3LbM4p6rwjCvy56ix/F/2FG+oL/zL9v C2YvbIcK/OwQ3eScfR6Dcoxhl/R5CD8AHPOykHVCP9JLQyGbk1Jhpb2AxZdLf3bPQDu8 cKYkKvytucAbwK7elI0NQfZ9DGPp1v4/EAUx9eqyhsUajmEV+mq8GQQvkFdayh12OqPV 6zny2aVzow+C77wkac0rn+jqf4kxKHd5i5CT+Rt5+Kj95l9jhjnRbHmri2CqBTNrrRwH 6LuQ== X-Forwarded-Encrypted: i=1; AJvYcCWl1AfnZHIajpiePsQUcuO5Ne7GbaKEmyDHK6MV5pIWVggbwxvY8h6ivZiIHajpcqSwb8vNQgj5bvxyDiI=@vger.kernel.org X-Gm-Message-State: AOJu0YxLsormmLzLRufH0lFkzlj6kSXhx3+TNaPQRH8gN5BPUBK5YkJX OkI2ZebWvgBJqulcARx2/kXCCF7NCx+2AJsHFlKEYTMxnQ8p3X0/UkVhsGPOgMuG11SBEf/J3SC /L3hhQgopAg== X-Google-Smtp-Source: AGHT+IH+qJeW3u/TRX9CiHpxJ3HHx0IcJ+LScdQDtg4C2ARG7loHWGNOq+d+OlXTjBEq1CMySYh8OFDYPd7s X-Received: from pjso22.prod.google.com ([2002:a17:90a:c096:b0:33b:b387:9850]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:38c7:b0:335:2747:a9b3 with SMTP id 98e67ed59e1d1-33bcf90e717mr33478679a91.32.1761328760042; Fri, 24 Oct 2025 10:59:20 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:44 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-10-irogers@google.com> Subject: [PATCH v1 09/22] perf jevents: Add metric DefaultShowEvents From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some Default group metrics require their events showing for consistency with perf's previous behavior. Add a flag to indicate when this is the case and use it in stat-display. As events are coming from Default metrics remove that default hardware and software events from perf stat. Following this change the default perf stat output on an alderlake looks li= ke: ``` $ perf stat -a -- sleep 1 Performance counter stats for 'system wide': 20,759 context-switches # 735.7 cs/sec = cs_per_second TopdownL1 (cpu_core) # 7.8 % tma_bad_spe= culation # 34.8 % tma_fronten= d_bound TopdownL1 (cpu_core) # 39.0 % tma_backend= _bound # 18.4 % tma_retiring 769 page-faults # 27.3 faults/= sec page_faults_per_second 531,102,439 cpu_atom/cpu-cycles/ # 0.0 GHz cy= cles_frequency (49.80%) 785,144,850 cpu_core/cpu-cycles/ # 0.0 GHz cy= cles_frequency # 17.6 % tma_bad_spe= culation # 14.4 % tma_retirin= g (50.20%) # 37.0 % tma_backend= _bound # 31.0 % tma_fronten= d_bound (50.37%) 47,631,924 cpu_atom/branches/ # 1.7 K/sec = branch_frequency (60.31%) 138,036,825 cpu_core/branches/ # 4.9 K/sec = branch_frequency 779 cpu-migrations # 27.6 migrati= ons/sec migrations_per_second 28,218,162,085 cpu-clock # 28.0 CPUs C= PUs_utilized 522,230,152 cpu_atom/cpu-cycles/ # 0.5 instruc= tions insn_per_cycle (60.12%) 785,133,103 cpu_core/cpu-cycles/ # 1.0 instruc= tions insn_per_cycle 2,541,997 cpu_atom/branch-misses/ # 5.5 % bran= ch_miss_rate (49.63%) 3,106,064 cpu_core/branch-misses/ # 2.3 % bran= ch_miss_rate 1.007489028 seconds time elapsed ``` Signed-off-by: Ian Rogers --- tools/perf/builtin-stat.c | 42 +------ .../arch/common/common/metrics.json | 33 ++++-- tools/perf/pmu-events/empty-pmu-events.c | 106 +++++++++--------- tools/perf/pmu-events/jevents.py | 7 +- tools/perf/pmu-events/pmu-events.h | 1 + tools/perf/util/evsel.h | 1 + tools/perf/util/metricgroup.c | 13 +++ tools/perf/util/stat-display.c | 4 +- tools/perf/util/stat-shadow.c | 2 +- 9 files changed, 102 insertions(+), 107 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 3c3188a57016..9c7d63614cab 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1853,16 +1853,6 @@ static int perf_stat_init_aggr_mode_file(struct perf= _stat *st) return 0; } =20 -/* Add given software event to evlist without wildcarding. */ -static int parse_software_event(struct evlist *evlist, const char *event, - struct parse_events_error *err) -{ - char buf[256]; - - snprintf(buf, sizeof(buf), "software/%s,name=3D%s/", event, event); - return parse_events(evlist, buf, err); -} - /* Add legacy hardware/hardware-cache event to evlist for all core PMUs wi= thout wildcarding. */ static int parse_hardware_event(struct evlist *evlist, const char *event, struct parse_events_error *err) @@ -2007,36 +1997,10 @@ static int add_default_events(void) stat_config.topdown_level =3D 1; =20 if (!evlist->core.nr_entries && !evsel_list->core.nr_entries) { - /* No events so add defaults. */ - const char *sw_events[] =3D { - target__has_cpu(&target) ? "cpu-clock" : "task-clock", - "context-switches", - "cpu-migrations", - "page-faults", - }; - const char *hw_events[] =3D { - "instructions", - "cycles", - "stalled-cycles-frontend", - "stalled-cycles-backend", - "branches", - "branch-misses", - }; - - for (size_t i =3D 0; i < ARRAY_SIZE(sw_events); i++) { - ret =3D parse_software_event(evlist, sw_events[i], &err); - if (ret) - goto out; - } - for (size_t i =3D 0; i < ARRAY_SIZE(hw_events); i++) { - ret =3D parse_hardware_event(evlist, hw_events[i], &err); - if (ret) - goto out; - } - /* - * Add TopdownL1 metrics if they exist. To minimize - * multiplexing, don't request threshold computation. + * Add Default metrics. To minimize multiplexing, don't request + * threshold computation, but it will be computed if the events + * are present. */ if (metricgroup__has_metric_or_groups(pmu, "Default")) { struct evlist *metric_evlist =3D evlist__new(); diff --git a/tools/perf/pmu-events/arch/common/common/metrics.json b/tools/= perf/pmu-events/arch/common/common/metrics.json index d1e37db18dc6..017bbdede3d7 100644 --- a/tools/perf/pmu-events/arch/common/common/metrics.json +++ b/tools/perf/pmu-events/arch/common/common/metrics.json @@ -5,7 +5,8 @@ "MetricGroup": "Default", "MetricName": "CPUs_utilized", "ScaleUnit": "1CPUs", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Context switches per CPU second", @@ -13,7 +14,8 @@ "MetricGroup": "Default", "MetricName": "cs_per_second", "ScaleUnit": "1cs/sec", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Process migrations to a new CPU per CPU secon= d", @@ -21,7 +23,8 @@ "MetricGroup": "Default", "MetricName": "migrations_per_second", "ScaleUnit": "1migrations/sec", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Page faults per CPU second", @@ -29,7 +32,8 @@ "MetricGroup": "Default", "MetricName": "page_faults_per_second", "ScaleUnit": "1faults/sec", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Instructions Per Cycle", @@ -37,27 +41,31 @@ "MetricGroup": "Default", "MetricName": "insn_per_cycle", "MetricThreshold": "insn_per_cycle < 1", - "ScaleUnit": "1instructions" + "ScaleUnit": "1instructions", + "DefaultShowEvents": "1" }, { "BriefDescription": "Max front or backend stalls per instruction", "MetricExpr": "max(stalled\\-cycles\\-frontend, stalled\\-cycles\\= -backend) / instructions", "MetricGroup": "Default", - "MetricName": "stalled_cycles_per_instruction" + "MetricName": "stalled_cycles_per_instruction", + "DefaultShowEvents": "1" }, { "BriefDescription": "Frontend stalls per cycle", "MetricExpr": "stalled\\-cycles\\-frontend / cpu\\-cycles", "MetricGroup": "Default", "MetricName": "frontend_cycles_idle", - "MetricThreshold": "frontend_cycles_idle > 0.1" + "MetricThreshold": "frontend_cycles_idle > 0.1", + "DefaultShowEvents": "1" }, { "BriefDescription": "Backend stalls per cycle", "MetricExpr": "stalled\\-cycles\\-backend / cpu\\-cycles", "MetricGroup": "Default", "MetricName": "backend_cycles_idle", - "MetricThreshold": "backend_cycles_idle > 0.2" + "MetricThreshold": "backend_cycles_idle > 0.2", + "DefaultShowEvents": "1" }, { "BriefDescription": "Cycles per CPU second", @@ -65,7 +73,8 @@ "MetricGroup": "Default", "MetricName": "cycles_frequency", "ScaleUnit": "1GHz", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Branches per CPU second", @@ -73,7 +82,8 @@ "MetricGroup": "Default", "MetricName": "branch_frequency", "ScaleUnit": "1000K/sec", - "MetricConstraint": "NO_GROUP_EVENTS" + "MetricConstraint": "NO_GROUP_EVENTS", + "DefaultShowEvents": "1" }, { "BriefDescription": "Branch miss rate", @@ -81,6 +91,7 @@ "MetricGroup": "Default", "MetricName": "branch_miss_rate", "MetricThreshold": "branch_miss_rate > 0.05", - "ScaleUnit": "100%" + "ScaleUnit": "100%", + "DefaultShowEvents": "1" } ] diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-even= ts/empty-pmu-events.c index 83a01ecc625e..71464b1d8afe 100644 --- a/tools/perf/pmu-events/empty-pmu-events.c +++ b/tools/perf/pmu-events/empty-pmu-events.c @@ -1303,32 +1303,32 @@ static const char *const big_c_string =3D /* offset=3D127503 */ "sys_ccn_pmu.read_cycles\000uncore\000ccn read-cycle= s event\000config=3D0x2c\0000x01\00000\000\000\000\000\000" /* offset=3D127580 */ "uncore_sys_cmn_pmu\000" /* offset=3D127599 */ "sys_cmn_pmu.hnf_cache_miss\000uncore\000Counts tota= l cache misses in first lookup result (high priority)\000eventid=3D1,type= =3D5\000(434|436|43c|43a).*\00000\000\000\000\000\000" -/* offset=3D127742 */ "CPUs_utilized\000Default\000(software@cpu\\-clock\\= ,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\= =3Dtask\\-clock@) / (duration_time * 1e9)\000\000Average CPU utilization\00= 0\0001CPUs\000\000\000\00001" -/* offset=3D127927 */ "cs_per_second\000Default\000software@context\\-swit= ches\\,name\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Context switches per CPU second\000\0001cs/sec\000\000\000\= 00001" -/* offset=3D128159 */ "migrations_per_second\000Default\000software@cpu\\-= migrations\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,nam= e\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtas= k\\-clock@)\000\000Process migrations to a new CPU per CPU second\000\0001m= igrations/sec\000\000\000\00001" -/* offset=3D128418 */ "page_faults_per_second\000Default\000software@page\= \-faults\\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Page faults per CPU second\000\0001faults/sec\000\000\000\0= 0001" -/* offset=3D128648 */ "insn_per_cycle\000Default\000instructions / cpu\\-c= ycles\000insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\= 000\000\000\00000" -/* offset=3D128760 */ "stalled_cycles_per_instruction\000Default\000max(st= alled\\-cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\0= 00Max front or backend stalls per instruction\000\000\000\000\000\00000" -/* offset=3D128923 */ "frontend_cycles_idle\000Default\000stalled\\-cycles= \\-frontend / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls= per cycle\000\000\000\000\000\00000" -/* offset=3D129052 */ "backend_cycles_idle\000Default\000stalled\\-cycles\= \-backend / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per= cycle\000\000\000\000\000\00000" -/* offset=3D129177 */ "cycles_frequency\000Default\000cpu\\-cycles / (soft= ware@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\= \-clock\\,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\= 000\000\000\00001" -/* offset=3D129352 */ "branch_frequency\000Default\000branches / (software= @cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-cl= ock\\,name\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/s= ec\000\000\000\00001" -/* offset=3D129531 */ "branch_miss_rate\000Default\000branch\\-misses / br= anches\000branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\0= 00\00000" -/* offset=3D129634 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 0" -/* offset=3D129656 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\00000" -/* offset=3D129719 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000" -/* offset=3D129885 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\00000" -/* offset=3D129949 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\00000" -/* offset=3D130016 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\00000" -/* offset=3D130087 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000" -/* offset=3D130181 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\00000" -/* offset=3D130315 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\00000" -/* offset=3D130379 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\00000" -/* offset=3D130447 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\00000" -/* offset=3D130517 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 0" -/* offset=3D130539 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 0" -/* offset=3D130561 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\00000" -/* offset=3D130581 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\00000" +/* offset=3D127742 */ "CPUs_utilized\000Default\000(software@cpu\\-clock\\= ,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\= =3Dtask\\-clock@) / (duration_time * 1e9)\000\000Average CPU utilization\00= 0\0001CPUs\000\000\000\000011" +/* offset=3D127928 */ "cs_per_second\000Default\000software@context\\-swit= ches\\,name\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Context switches per CPU second\000\0001cs/sec\000\000\000\= 000011" +/* offset=3D128161 */ "migrations_per_second\000Default\000software@cpu\\-= migrations\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,nam= e\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtas= k\\-clock@)\000\000Process migrations to a new CPU per CPU second\000\0001m= igrations/sec\000\000\000\000011" +/* offset=3D128421 */ "page_faults_per_second\000Default\000software@page\= \-faults\\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@)\000\000Page faults per CPU second\000\0001faults/sec\000\000\000\0= 00011" +/* offset=3D128652 */ "insn_per_cycle\000Default\000instructions / cpu\\-c= ycles\000insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\= 000\000\000\000001" +/* offset=3D128765 */ "stalled_cycles_per_instruction\000Default\000max(st= alled\\-cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\0= 00Max front or backend stalls per instruction\000\000\000\000\000\000001" +/* offset=3D128929 */ "frontend_cycles_idle\000Default\000stalled\\-cycles= \\-frontend / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls= per cycle\000\000\000\000\000\000001" +/* offset=3D129059 */ "backend_cycles_idle\000Default\000stalled\\-cycles\= \-backend / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per= cycle\000\000\000\000\000\000001" +/* offset=3D129185 */ "cycles_frequency\000Default\000cpu\\-cycles / (soft= ware@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\= \-clock\\,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\= 000\000\000\000011" +/* offset=3D129361 */ "branch_frequency\000Default\000branches / (software= @cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-cl= ock\\,name\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/s= ec\000\000\000\000011" +/* offset=3D129541 */ "branch_miss_rate\000Default\000branch\\-misses / br= anches\000branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\0= 00\000001" +/* offset=3D129645 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 00" +/* offset=3D129668 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\000000" +/* offset=3D129732 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000" +/* offset=3D129899 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\000000" +/* offset=3D129964 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\000000" +/* offset=3D130032 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\000000" +/* offset=3D130104 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000" +/* offset=3D130199 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\000000" +/* offset=3D130334 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\000000" +/* offset=3D130399 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\000000" +/* offset=3D130468 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\000000" +/* offset=3D130539 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 00" +/* offset=3D130562 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 00" +/* offset=3D130585 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\000000" +/* offset=3D130606 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\000000" ; =20 static const struct compact_pmu_event pmu_events__common_default_core[] = =3D { @@ -2615,17 +2615,17 @@ static const struct pmu_table_entry pmu_events__com= mon[] =3D { }; =20 static const struct compact_pmu_event pmu_metrics__common_default_core[] = =3D { -{ 127742 }, /* CPUs_utilized\000Default\000(software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@) / (duration_time * 1e9)\000\000Average CPU utilization\000\0001CPU= s\000\000\000\00001 */ -{ 129052 }, /* backend_cycles_idle\000Default\000stalled\\-cycles\\-backen= d / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per cycle\0= 00\000\000\000\000\00000 */ -{ 129352 }, /* branch_frequency\000Default\000branches / (software@cpu\\-c= lock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,na= me\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/sec\000\0= 00\000\00001 */ -{ 129531 }, /* branch_miss_rate\000Default\000branch\\-misses / branches\0= 00branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\000\00000= */ -{ 127927 }, /* cs_per_second\000Default\000software@context\\-switches\\,n= ame\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-= clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\= 000\000Context switches per CPU second\000\0001cs/sec\000\000\000\00001 */ -{ 129177 }, /* cycles_frequency\000Default\000cpu\\-cycles / (software@cpu= \\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\= \,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\000\000\= 000\00001 */ -{ 128923 }, /* frontend_cycles_idle\000Default\000stalled\\-cycles\\-front= end / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls per cyc= le\000\000\000\000\000\00000 */ -{ 128648 }, /* insn_per_cycle\000Default\000instructions / cpu\\-cycles\00= 0insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\000\000\= 000\00000 */ -{ 128159 }, /* migrations_per_second\000Default\000software@cpu\\-migratio= ns\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcp= u\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-cloc= k@)\000\000Process migrations to a new CPU per CPU second\000\0001migration= s/sec\000\000\000\00001 */ -{ 128418 }, /* page_faults_per_second\000Default\000software@page\\-faults= \\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-c= lock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\0= 00\000Page faults per CPU second\000\0001faults/sec\000\000\000\00001 */ -{ 128760 }, /* stalled_cycles_per_instruction\000Default\000max(stalled\\-= cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\000Max fr= ont or backend stalls per instruction\000\000\000\000\000\00000 */ +{ 127742 }, /* CPUs_utilized\000Default\000(software@cpu\\-clock\\,name\\= =3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\= -clock@) / (duration_time * 1e9)\000\000Average CPU utilization\000\0001CPU= s\000\000\000\000011 */ +{ 129059 }, /* backend_cycles_idle\000Default\000stalled\\-cycles\\-backen= d / cpu\\-cycles\000backend_cycles_idle > 0.2\000Backend stalls per cycle\0= 00\000\000\000\000\000001 */ +{ 129361 }, /* branch_frequency\000Default\000branches / (software@cpu\\-c= lock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\\,na= me\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/sec\000\0= 00\000\000011 */ +{ 129541 }, /* branch_miss_rate\000Default\000branch\\-misses / branches\0= 00branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\000\00000= 1 */ +{ 127928 }, /* cs_per_second\000Default\000software@context\\-switches\\,n= ame\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-= clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\= 000\000Context switches per CPU second\000\0001cs/sec\000\000\000\000011 */ +{ 129185 }, /* cycles_frequency\000Default\000cpu\\-cycles / (software@cpu= \\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\= \,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\000\000\= 000\000011 */ +{ 128929 }, /* frontend_cycles_idle\000Default\000stalled\\-cycles\\-front= end / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls per cyc= le\000\000\000\000\000\000001 */ +{ 128652 }, /* insn_per_cycle\000Default\000instructions / cpu\\-cycles\00= 0insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\000\000\= 000\000001 */ +{ 128161 }, /* migrations_per_second\000Default\000software@cpu\\-migratio= ns\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcp= u\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-cloc= k@)\000\000Process migrations to a new CPU per CPU second\000\0001migration= s/sec\000\000\000\000011 */ +{ 128421 }, /* page_faults_per_second\000Default\000software@page\\-faults= \\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-c= lock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\0= 00\000Page faults per CPU second\000\0001faults/sec\000\000\000\000011 */ +{ 128765 }, /* stalled_cycles_per_instruction\000Default\000max(stalled\\-= cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\000Max fr= ont or backend stalls per instruction\000\000\000\000\000\000001 */ =20 }; =20 @@ -2698,21 +2698,21 @@ static const struct pmu_table_entry pmu_events__tes= t_soc_cpu[] =3D { }; =20 static const struct compact_pmu_event pmu_metrics__test_soc_cpu_default_co= re[] =3D { -{ 129634 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\00000 */ -{ 130315 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\00000 */ -{ 130087 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\00000 */ -{ 130181 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\00000 */ -{ 130379 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\00000 */ -{ 130447 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\00000 */ -{ 129719 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\00000 */ -{ 129656 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\00000 */ -{ 130581 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\00000 */ -{ 130517 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\00000 */ -{ 130539 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\00000 */ -{ 130561 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\00000 */ -{ 130016 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\00000 */ -{ 129885 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\00000 */ -{ 129949 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\00000 */ +{ 129645 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\000000 */ +{ 130334 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\000000 */ +{ 130104 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000 */ +{ 130199 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\000000 */ +{ 130399 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\000000 */ +{ 130468 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\000000 */ +{ 129732 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000 */ +{ 129668 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\000000 */ +{ 130606 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\000000 */ +{ 130539 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\000000 */ +{ 130562 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\000000 */ +{ 130585 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\000000 */ +{ 130032 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\000000 */ +{ 129899 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\000000 */ +{ 129964 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\000000 */ =20 }; =20 @@ -2894,6 +2894,8 @@ static void decompress_metric(int offset, struct pmu_= metric *pm) pm->aggr_mode =3D *p - '0'; p++; pm->event_grouping =3D *p - '0'; + p++; + pm->default_show_events =3D *p - '0'; } =20 static int pmu_events_table__for_each_event_pmu(const struct pmu_events_ta= ble *table, diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 5d3f4b44cfb7..3413ee5d0227 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -58,10 +58,12 @@ _json_event_attributes =3D [ _json_metric_attributes =3D [ 'metric_name', 'metric_group', 'metric_expr', 'metric_threshold', 'desc', 'long_desc', 'unit', 'compat', 'metricgroup_no_group', - 'default_metricgroup_name', 'aggr_mode', 'event_grouping' + 'default_metricgroup_name', 'aggr_mode', 'event_grouping', + 'default_show_events' ] # Attributes that are bools or enum int values, encoded as '0', '1',... -_json_enum_attributes =3D ['aggr_mode', 'deprecated', 'event_grouping', 'p= erpkg'] +_json_enum_attributes =3D ['aggr_mode', 'deprecated', 'event_grouping', 'p= erpkg', + 'default_show_events'] =20 def removesuffix(s: str, suffix: str) -> str: """Remove the suffix from a string @@ -356,6 +358,7 @@ class JsonEvent: self.metricgroup_no_group =3D jd.get('MetricgroupNoGroup') self.default_metricgroup_name =3D jd.get('DefaultMetricgroupName') self.event_grouping =3D convert_metric_constraint(jd.get('MetricConstr= aint')) + self.default_show_events =3D jd.get('DefaultShowEvents') self.metric_expr =3D None if 'MetricExpr' in jd: self.metric_expr =3D metric.ParsePerfJson(jd['MetricExpr']).Simplify= () diff --git a/tools/perf/pmu-events/pmu-events.h b/tools/perf/pmu-events/pmu= -events.h index 559265a903c8..d3b24014c6ff 100644 --- a/tools/perf/pmu-events/pmu-events.h +++ b/tools/perf/pmu-events/pmu-events.h @@ -74,6 +74,7 @@ struct pmu_metric { const char *default_metricgroup_name; enum aggr_mode_class aggr_mode; enum metric_event_groups event_grouping; + bool default_show_events; }; =20 struct pmu_events_table; diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 71f74c7036ef..3ae4ac8f9a37 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -122,6 +122,7 @@ struct evsel { bool reset_group; bool needs_auxtrace_mmap; bool default_metricgroup; /* A member of the Default metricgroup */ + bool default_show_events; /* If a default group member, show the event = */ bool needs_uniquify; struct hashmap *per_pkg_mask; int err; diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index e67e04ce01c9..25c75fdbfc52 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -152,6 +152,8 @@ struct metric { * Should events of the metric be grouped? */ bool group_events; + /** Show events even if in the Default metric group. */ + bool default_show_events; /** * Parsed events for the metric. Optional as events may be taken from a * different metric whose group contains all the IDs necessary for this @@ -255,6 +257,7 @@ static struct metric *metric__new(const struct pmu_metr= ic *pm, m->pctx->sctx.runtime =3D runtime; m->pctx->sctx.system_wide =3D system_wide; m->group_events =3D !metric_no_group && metric__group_events(pm, metric_n= o_threshold); + m->default_show_events =3D pm->default_show_events; m->metric_refs =3D NULL; m->evlist =3D NULL; =20 @@ -1513,6 +1516,16 @@ static int parse_groups(struct evlist *perf_evlist, free(metric_events); goto out; } + if (m->default_show_events) { + struct evsel *pos; + + for (int i =3D 0; metric_events[i]; i++) + metric_events[i]->default_show_events =3D true; + evlist__for_each_entry(metric_evlist, pos) { + if (pos->metric_leader && pos->metric_leader->default_show_events) + pos->default_show_events =3D true; + } + } expr->metric_threshold =3D m->metric_threshold; expr->metric_unit =3D m->metric_unit; expr->metric_events =3D metric_events; diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c index a67b991f4e81..4d0e353846ea 100644 --- a/tools/perf/util/stat-display.c +++ b/tools/perf/util/stat-display.c @@ -872,7 +872,7 @@ static void printout(struct perf_stat_config *config, s= truct outstate *os, out.ctx =3D os; out.force_header =3D false; =20 - if (!config->metric_only && !counter->default_metricgroup) { + if (!config->metric_only && (!counter->default_metricgroup || counter->de= fault_show_events)) { abs_printout(config, os, os->id, os->aggr_nr, counter, uval, ok); =20 print_noise(config, os, counter, noise, /*before_metric=3D*/true); @@ -880,7 +880,7 @@ static void printout(struct perf_stat_config *config, s= truct outstate *os, } =20 if (ok) { - if (!config->metric_only && counter->default_metricgroup) { + if (!config->metric_only && counter->default_metricgroup && !counter->de= fault_show_events) { void *from =3D NULL; =20 aggr_printout(config, os, os->evsel, os->id, os->aggr_nr); diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index abaf6b579bfc..4df614f8e200 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -665,7 +665,7 @@ void *perf_stat__print_shadow_stats_metricgroup(struct = perf_stat_config *config, if (strcmp(name, mexp->default_metricgroup_name)) return (void *)mexp; /* Only print the name of the metricgroup once */ - if (!header_printed) { + if (!header_printed && !evsel->default_show_events) { header_printed =3D true; perf_stat__print_metricgroup_header(config, evsel, ctxp, name, out); --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 D3ED5346E57 for ; Fri, 24 Oct 2025 17:59:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328765; cv=none; b=UyVZTaSEQ2fbIrx89w6t+PAQvKwoLIMf2p3FAE7CY2Sh2hRVNHEUtlIceQC91hgiKAD/5XVySOKRDq/B5FPRtllVRPn3mrTeToO3F0uQ3LDaYIWohXHEMtCLXEF41n0FbotEZT73ZB+AAVYEG+t1FA2MmDiM1snen1D9FH9CP+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328765; c=relaxed/simple; bh=klg/sRiJXV3nP1YcezZLBCvFa7NJ8KpQwmE2LhKa4Ow=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=PL8g6K5pWwz3G/bTS4IKB33PyfFeua3mvAS5Pvsz4+cWlo8QdGYrcW3vf3lfneapFqib2yj+19y1OUTCD5ZRlSLJJvX2Ukq7liULgNH5/BA+pFwTJdhtQ6RCGerZl647syrWFmABjo78MwJzR3MbSxaziZGlgJ2SRow0/ghjlGs= 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=mZRDdCTQ; arc=none smtp.client-ip=209.85.216.74 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="mZRDdCTQ" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-33baef12edaso2237934a91.0 for ; Fri, 24 Oct 2025 10:59:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328762; x=1761933562; darn=vger.kernel.org; h=content-transfer-encoding:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=kEHLtfcIzQqGzO6BnUeWhjU92+1YZCxiTV0vpMQpKNo=; b=mZRDdCTQejntkYDcMDUXfGFWlmvQwKobLOofWloWyo0ysMhEug0EJx3dtOoHkiZm6J OYZp1hHr14c6/JlakDIz3OILMFOEhhvtconSpEIQyvb2it6mczk3bCUHrvC3lVCS0Qj4 8Ue874KIfCjdPvi8TeKIP7PQTPp+J9oBFgd8lj2n3U/Boq4ZiJfTfo/q6CfMQmeamcSM FbrZMI93eOCporBJZRKCdutsapmy6C29AtBCF0P6IqnPBGk5wApqUfTGJz+cwb+1Ljk5 V/PUhNdhBcWXJ00jny6TX5mL6/EWSnFhG1QmC9m26yL/t5+o10mhRNUa6LUqgH27Bn08 gOuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328762; x=1761933562; h=content-transfer-encoding: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=kEHLtfcIzQqGzO6BnUeWhjU92+1YZCxiTV0vpMQpKNo=; b=EjhzzFi+KokX+jNgoQeISHkFZEEEzz3wo77oZhxQWpZrTksP7qKPgohJwo2fEAnlOk 89uL9/VwGQUpAHHVTaheLSvA4op3/tHJmeYInS6klhPgcPp/YuauZVWt5VQ8zZ6h+Src +JqRRB8cyZKJVSbLiJRz5nBLIqE/1uBC+l2R3dqh9R0LlfANT3uk9XjKg3OyV/mPcTi9 /m9fhm3pHmMf7i3Q/KEuagBEIdGN+xfkCxgUvdHno8SyjMAod5eMHmvj0YyRdrZ3Jzu1 kdx5C3UZKBz9NVW9B7QiLTcyMVSXfzDqVFAtLKWXguoheZCBe7n93E+i26aj6gvucuCi 7mlA== X-Forwarded-Encrypted: i=1; AJvYcCWf+909PKuSfjgLx5sb060+YBiThgHn6iYFLwHkKb7Dt1BEY3j3MKA253wRLgfaDId9iOVSolendl1raR4=@vger.kernel.org X-Gm-Message-State: AOJu0YxOmZalfj2WEMuIK0bcpNC4/6w3olKzzuOAaE0XpktXFtzjWq6i b5z8LsFSePV5u8VouyvNykQf0wFmMTEmOc62VkcMYeqojkCwXlRQJBbyL8PoS/u0bdxXEyn5nWW nybJAOrgViQ== X-Google-Smtp-Source: AGHT+IFdMkRDc8U42R3PJdVmtSsrswXLi2j1en0OfkYtpY5CjwAQCy31p4Fh4bFj7ZlxLryLfONY4mwUuu5F X-Received: from pjbee13.prod.google.com ([2002:a17:90a:fc4d:b0:33b:caf7:2442]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:d646:b0:32e:749d:fcb7 with SMTP id 98e67ed59e1d1-33fd65fcd1bmr3837587a91.13.1761328762071; Fri, 24 Oct 2025 10:59:22 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:45 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-11-irogers@google.com> Subject: [PATCH v1 10/22] perf stat: Add detail -d,-dd,-ddd metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics for the stat-shadow -d, -dd and -ddd events and hard coded metrics. Remove the events as these now come from the metrics. Following this change a detailed perf stat output looks like: ``` $ perf stat -a -ddd -- sleep 1 Performance counter stats for 'system wide': 18,446 context-switches # 653.0 cs/sec = cs_per_second TopdownL1 (cpu_core) # 6.8 % tma_bad_spe= culation # 37.0 % tma_fronten= d_bound (30.32%) TopdownL1 (cpu_core) # 40.1 % tma_backend= _bound # 16.1 % tma_retirin= g (30.32%) 177 page-faults # 6.3 faults/= sec page_faults_per_second 472,170,922 cpu_atom/cpu-cycles/ # 0.0 GHz cy= cles_frequency (28.57%) 656,868,742 cpu_core/cpu-cycles/ # 0.0 GHz cy= cles_frequency (38.24%) # 22.2 % tma_bad_spe= culation # 12.2 % tma_retirin= g (28.55%) # 32.4 % tma_backend= _bound # 33.1 % tma_fronten= d_bound (35.71%) 43,583,604 cpu_atom/branches/ # 1.5 K/sec = branch_frequency (42.85%) 87,140,541 cpu_core/branches/ # 3.1 K/sec = branch_frequency (54.09%) 493 cpu-migrations # 17.5 migrati= ons/sec migrations_per_second 28,247,893,219 cpu-clock # 28.0 CPUs C= PUs_utilized 445,297,600 cpu_atom/cpu-cycles/ # 0.4 instruc= tions insn_per_cycle (42.87%) 642,323,993 cpu_core/cpu-cycles/ # 0.8 instruc= tions insn_per_cycle (62.01%) 2,126,311 cpu_atom/branch-misses/ # 6.8 % bran= ch_miss_rate (35.73%) 2,172,775 cpu_core/branch-misses/ # 2.5 % bran= ch_miss_rate (62.36%) 1,855,042 cpu_atom/LLC-loads/ # 0.0 % llc_= miss_rate (28.56%) 2,671,549 cpu_core/LLC-loads/ # 32.5 % llc_= miss_rate (46.31%) 8,440,231 cpu_core/L1-dcache-load-misses/ # nan % l1d_= miss_rate (37.99%) 10,823,925 cpu_atom/L1-icache-load-misses/ # 19.0 % l1i_= miss_rate (21.43%) 22,602,344 cpu_atom/dTLB-loads/ # 2.0 % dtlb= _miss_rate (21.44%) 136,524,528 cpu_core/dTLB-loads/ # 0.3 % dtlb= _miss_rate (15.06%) 1.007665494 seconds time elapsed ``` Signed-off-by: Ian Rogers --- tools/perf/builtin-stat.c | 100 +++--------------- .../arch/common/common/metrics.json | 54 ++++++++++ tools/perf/pmu-events/empty-pmu-events.c | 72 +++++++------ 3 files changed, 113 insertions(+), 113 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 9c7d63614cab..c00d84a04593 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1853,28 +1853,6 @@ static int perf_stat_init_aggr_mode_file(struct perf= _stat *st) return 0; } =20 -/* Add legacy hardware/hardware-cache event to evlist for all core PMUs wi= thout wildcarding. */ -static int parse_hardware_event(struct evlist *evlist, const char *event, - struct parse_events_error *err) -{ - char buf[256]; - struct perf_pmu *pmu =3D NULL; - - while ((pmu =3D perf_pmus__scan_core(pmu)) !=3D NULL) { - int ret; - - if (perf_pmus__num_core_pmus() =3D=3D 1) - snprintf(buf, sizeof(buf), "%s/%s,name=3D%s/", pmu->name, event, event); - else - snprintf(buf, sizeof(buf), "%s/%s/", pmu->name, event); - - ret =3D parse_events(evlist, buf, err); - if (ret) - return ret; - } - return 0; -} - /* * Add default events, if there were no attributes specified or * if -d/--detailed, -d -d or -d -d -d is used: @@ -2002,22 +1980,34 @@ static int add_default_events(void) * threshold computation, but it will be computed if the events * are present. */ - if (metricgroup__has_metric_or_groups(pmu, "Default")) { - struct evlist *metric_evlist =3D evlist__new(); + const char *default_metricgroup_names[] =3D { + "Default", "Default2", "Default3", "Default4", + }; + + for (size_t i =3D 0; i < ARRAY_SIZE(default_metricgroup_names); i++) { + struct evlist *metric_evlist; + + if (!metricgroup__has_metric_or_groups(pmu, default_metricgroup_names[i= ])) + continue; + + if ((int)i > detailed_run) + break; =20 + metric_evlist =3D evlist__new(); if (!metric_evlist) { ret =3D -ENOMEM; - goto out; + break; } - if (metricgroup__parse_groups(metric_evlist, pmu, "Default", + if (metricgroup__parse_groups(metric_evlist, pmu, default_metricgroup_n= ames[i], /*metric_no_group=3D*/false, /*metric_no_merge=3D*/false, /*metric_no_threshold=3D*/true, stat_config.user_requested_cpu_list, stat_config.system_wide, stat_config.hardware_aware_grouping) < 0) { + evlist__delete(metric_evlist); ret =3D -1; - goto out; + break; } =20 evlist__for_each_entry(metric_evlist, evsel) @@ -2030,62 +2020,6 @@ static int add_default_events(void) evlist__delete(metric_evlist); } } - - /* Detailed events get appended to the event list: */ - - if (!ret && detailed_run >=3D 1) { - /* - * Detailed stats (-d), covering the L1 and last level data - * caches: - */ - const char *hw_events[] =3D { - "L1-dcache-loads", - "L1-dcache-load-misses", - "LLC-loads", - "LLC-load-misses", - }; - - for (size_t i =3D 0; i < ARRAY_SIZE(hw_events); i++) { - ret =3D parse_hardware_event(evlist, hw_events[i], &err); - if (ret) - goto out; - } - } - if (!ret && detailed_run >=3D 2) { - /* - * Very detailed stats (-d -d), covering the instruction cache - * and the TLB caches: - */ - const char *hw_events[] =3D { - "L1-icache-loads", - "L1-icache-load-misses", - "dTLB-loads", - "dTLB-load-misses", - "iTLB-loads", - "iTLB-load-misses", - }; - - for (size_t i =3D 0; i < ARRAY_SIZE(hw_events); i++) { - ret =3D parse_hardware_event(evlist, hw_events[i], &err); - if (ret) - goto out; - } - } - if (!ret && detailed_run >=3D 3) { - /* - * Very, very detailed stats (-d -d -d), adding prefetch events: - */ - const char *hw_events[] =3D { - "L1-dcache-prefetches", - "L1-dcache-prefetch-misses", - }; - - for (size_t i =3D 0; i < ARRAY_SIZE(hw_events); i++) { - ret =3D parse_hardware_event(evlist, hw_events[i], &err); - if (ret) - goto out; - } - } out: if (!ret) { evlist__for_each_entry(evlist, evsel) { diff --git a/tools/perf/pmu-events/arch/common/common/metrics.json b/tools/= perf/pmu-events/arch/common/common/metrics.json index 017bbdede3d7..89d1d9f61014 100644 --- a/tools/perf/pmu-events/arch/common/common/metrics.json +++ b/tools/perf/pmu-events/arch/common/common/metrics.json @@ -93,5 +93,59 @@ "MetricThreshold": "branch_miss_rate > 0.05", "ScaleUnit": "100%", "DefaultShowEvents": "1" + }, + { + "BriefDescription": "L1D miss rate", + "MetricExpr": "L1\\-dcache\\-load\\-misses / L1\\-dcache\\-loads", + "MetricGroup": "Default2", + "MetricName": "l1d_miss_rate", + "MetricThreshold": "l1d_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" + }, + { + "BriefDescription": "LLC miss rate", + "MetricExpr": "LLC\\-load\\-misses / LLC\\-loads", + "MetricGroup": "Default2", + "MetricName": "llc_miss_rate", + "MetricThreshold": "llc_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" + }, + { + "BriefDescription": "L1I miss rate", + "MetricExpr": "L1\\-icache\\-load\\-misses / L1\\-icache\\-loads", + "MetricGroup": "Default3", + "MetricName": "l1i_miss_rate", + "MetricThreshold": "l1i_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" + }, + { + "BriefDescription": "dTLB miss rate", + "MetricExpr": "dTLB\\-load\\-misses / dTLB\\-loads", + "MetricGroup": "Default3", + "MetricName": "dtlb_miss_rate", + "MetricThreshold": "dtlb_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" + }, + { + "BriefDescription": "iTLB miss rate", + "MetricExpr": "iTLB\\-load\\-misses / iTLB\\-loads", + "MetricGroup": "Default3", + "MetricName": "itlb_miss_rate", + "MetricThreshold": "itlb_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" + }, + { + "BriefDescription": "L1 prefetch miss rate", + "MetricExpr": "L1\\-dcache\\-prefetch\\-misses / L1\\-dcache\\-pre= fetches", + "MetricGroup": "Default4", + "MetricName": "l1_prefetch_miss_rate", + "MetricThreshold": "l1_prefetch_miss_rate > 0.05", + "ScaleUnit": "100%", + "DefaultShowEvents": "1" } ] diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-even= ts/empty-pmu-events.c index 71464b1d8afe..e882c645fbbe 100644 --- a/tools/perf/pmu-events/empty-pmu-events.c +++ b/tools/perf/pmu-events/empty-pmu-events.c @@ -1314,21 +1314,27 @@ static const char *const big_c_string =3D /* offset=3D129185 */ "cycles_frequency\000Default\000cpu\\-cycles / (soft= ware@cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\= \-clock\\,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\= 000\000\000\000011" /* offset=3D129361 */ "branch_frequency\000Default\000branches / (software= @cpu\\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-cl= ock\\,name\\=3Dtask\\-clock@)\000\000Branches per CPU second\000\0001000K/s= ec\000\000\000\000011" /* offset=3D129541 */ "branch_miss_rate\000Default\000branch\\-misses / br= anches\000branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\0= 00\000001" -/* offset=3D129645 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 00" -/* offset=3D129668 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\000000" -/* offset=3D129732 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000" -/* offset=3D129899 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\000000" -/* offset=3D129964 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\000000" -/* offset=3D130032 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\000000" -/* offset=3D130104 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000" -/* offset=3D130199 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\000000" -/* offset=3D130334 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\000000" -/* offset=3D130399 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\000000" -/* offset=3D130468 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\000000" -/* offset=3D130539 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 00" -/* offset=3D130562 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 00" -/* offset=3D130585 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\000000" -/* offset=3D130606 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\000000" +/* offset=3D129645 */ "l1d_miss_rate\000Default2\000L1\\-dcache\\-load\\-m= isses / L1\\-dcache\\-loads\000l1d_miss_rate > 0.05\000L1D miss rate\000\0= 00100%\000\000\000\000001" +/* offset=3D129761 */ "llc_miss_rate\000Default2\000LLC\\-load\\-misses / = LLC\\-loads\000llc_miss_rate > 0.05\000LLC miss rate\000\000100%\000\000\00= 0\000001" +/* offset=3D129862 */ "l1i_miss_rate\000Default3\000L1\\-icache\\-load\\-m= isses / L1\\-icache\\-loads\000l1i_miss_rate > 0.05\000L1I miss rate\000\00= 0100%\000\000\000\000001" +/* offset=3D129977 */ "dtlb_miss_rate\000Default3\000dTLB\\-load\\-misses = / dTLB\\-loads\000dtlb_miss_rate > 0.05\000dTLB miss rate\000\000100%\000\0= 00\000\000001" +/* offset=3D130083 */ "itlb_miss_rate\000Default3\000iTLB\\-load\\-misses = / iTLB\\-loads\000itlb_miss_rate > 0.05\000iTLB miss rate\000\000100%\000\0= 00\000\000001" +/* offset=3D130189 */ "l1_prefetch_miss_rate\000Default4\000L1\\-dcache\\-= prefetch\\-misses / L1\\-dcache\\-prefetches\000l1_prefetch_miss_rate > 0.0= 5\000L1 prefetch miss rate\000\000100%\000\000\000\000001" +/* offset=3D130337 */ "CPI\000\0001 / IPC\000\000\000\000\000\000\000\0000= 00" +/* offset=3D130360 */ "IPC\000group1\000inst_retired.any / cpu_clk_unhalte= d.thread\000\000\000\000\000\000\000\000000" +/* offset=3D130424 */ "Frontend_Bound_SMT\000\000idq_uops_not_delivered.co= re / (4 * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_a= ctive / cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000" +/* offset=3D130591 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_= retired.any\000\000\000\000\000\000\000\000000" +/* offset=3D130656 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / in= st_retired.any\000\000\000\000\000\000\000\000000" +/* offset=3D130724 */ "cache_miss_cycles\000group1\000dcache_miss_cpi + ic= ache_miss_cycles\000\000\000\000\000\000\000\000000" +/* offset=3D130796 */ "DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_h= it + l2_rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000" +/* offset=3D130891 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_d= ata_rd - l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_= miss\000\000\000\000\000\000\000\000000" +/* offset=3D131026 */ "DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2= _All_Miss\000\000\000\000\000\000\000\000000" +/* offset=3D131091 */ "DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, D= Cache_L2_All)\000\000\000\000\000\000\000\000000" +/* offset=3D131160 */ "DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss,= DCache_L2_All)\000\000\000\000\000\000\000\000000" +/* offset=3D131231 */ "M1\000\000ipc + M2\000\000\000\000\000\000\000\0000= 00" +/* offset=3D131254 */ "M2\000\000ipc + M1\000\000\000\000\000\000\000\0000= 00" +/* offset=3D131277 */ "M3\000\0001 / M3\000\000\000\000\000\000\000\000000" +/* offset=3D131298 */ "L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9= / duration_time\000\000\000\000\000\000\000\000000" ; =20 static const struct compact_pmu_event pmu_events__common_default_core[] = =3D { @@ -2621,8 +2627,14 @@ static const struct compact_pmu_event pmu_metrics__c= ommon_default_core[] =3D { { 129541 }, /* branch_miss_rate\000Default\000branch\\-misses / branches\0= 00branch_miss_rate > 0.05\000Branch miss rate\000\000100%\000\000\000\00000= 1 */ { 127928 }, /* cs_per_second\000Default\000software@context\\-switches\\,n= ame\\=3Dcontext\\-switches@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-= clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\= 000\000Context switches per CPU second\000\0001cs/sec\000\000\000\000011 */ { 129185 }, /* cycles_frequency\000Default\000cpu\\-cycles / (software@cpu= \\-clock\\,name\\=3Dcpu\\-clock@ if #target_cpu else software@task\\-clock\= \,name\\=3Dtask\\-clock@)\000\000Cycles per CPU second\000\0001GHz\000\000\= 000\000011 */ +{ 129977 }, /* dtlb_miss_rate\000Default3\000dTLB\\-load\\-misses / dTLB\\= -loads\000dtlb_miss_rate > 0.05\000dTLB miss rate\000\000100%\000\000\000\0= 00001 */ { 128929 }, /* frontend_cycles_idle\000Default\000stalled\\-cycles\\-front= end / cpu\\-cycles\000frontend_cycles_idle > 0.1\000Frontend stalls per cyc= le\000\000\000\000\000\000001 */ { 128652 }, /* insn_per_cycle\000Default\000instructions / cpu\\-cycles\00= 0insn_per_cycle < 1\000Instructions Per Cycle\000\0001instructions\000\000\= 000\000001 */ +{ 130083 }, /* itlb_miss_rate\000Default3\000iTLB\\-load\\-misses / iTLB\\= -loads\000itlb_miss_rate > 0.05\000iTLB miss rate\000\000100%\000\000\000\0= 00001 */ +{ 130189 }, /* l1_prefetch_miss_rate\000Default4\000L1\\-dcache\\-prefetch= \\-misses / L1\\-dcache\\-prefetches\000l1_prefetch_miss_rate > 0.05\000L1 = prefetch miss rate\000\000100%\000\000\000\000001 */ +{ 129645 }, /* l1d_miss_rate\000Default2\000L1\\-dcache\\-load\\-misses / = L1\\-dcache\\-loads\000l1d_miss_rate > 0.05\000L1D miss rate\000\000100%\0= 00\000\000\000001 */ +{ 129862 }, /* l1i_miss_rate\000Default3\000L1\\-icache\\-load\\-misses / = L1\\-icache\\-loads\000l1i_miss_rate > 0.05\000L1I miss rate\000\000100%\00= 0\000\000\000001 */ +{ 129761 }, /* llc_miss_rate\000Default2\000LLC\\-load\\-misses / LLC\\-lo= ads\000llc_miss_rate > 0.05\000LLC miss rate\000\000100%\000\000\000\000001= */ { 128161 }, /* migrations_per_second\000Default\000software@cpu\\-migratio= ns\\,name\\=3Dcpu\\-migrations@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcp= u\\-clock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-cloc= k@)\000\000Process migrations to a new CPU per CPU second\000\0001migration= s/sec\000\000\000\000011 */ { 128421 }, /* page_faults_per_second\000Default\000software@page\\-faults= \\,name\\=3Dpage\\-faults@ * 1e9 / (software@cpu\\-clock\\,name\\=3Dcpu\\-c= lock@ if #target_cpu else software@task\\-clock\\,name\\=3Dtask\\-clock@)\0= 00\000Page faults per CPU second\000\0001faults/sec\000\000\000\000011 */ { 128765 }, /* stalled_cycles_per_instruction\000Default\000max(stalled\\-= cycles\\-frontend, stalled\\-cycles\\-backend) / instructions\000\000Max fr= ont or backend stalls per instruction\000\000\000\000\000\000001 */ @@ -2698,21 +2710,21 @@ static const struct pmu_table_entry pmu_events__tes= t_soc_cpu[] =3D { }; =20 static const struct compact_pmu_event pmu_metrics__test_soc_cpu_default_co= re[] =3D { -{ 129645 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\000000 */ -{ 130334 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\000000 */ -{ 130104 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000 */ -{ 130199 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\000000 */ -{ 130399 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\000000 */ -{ 130468 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\000000 */ -{ 129732 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000 */ -{ 129668 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\000000 */ -{ 130606 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\000000 */ -{ 130539 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\000000 */ -{ 130562 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\000000 */ -{ 130585 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\000000 */ -{ 130032 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\000000 */ -{ 129899 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\000000 */ -{ 129964 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\000000 */ +{ 130337 }, /* CPI\000\0001 / IPC\000\000\000\000\000\000\000\000000 */ +{ 131026 }, /* DCache_L2_All\000\000DCache_L2_All_Hits + DCache_L2_All_Mis= s\000\000\000\000\000\000\000\000000 */ +{ 130796 }, /* DCache_L2_All_Hits\000\000l2_rqsts.demand_data_rd_hit + l2_= rqsts.pf_hit + l2_rqsts.rfo_hit\000\000\000\000\000\000\000\000000 */ +{ 130891 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd -= l2_rqsts.demand_data_rd_hit, 0) + l2_rqsts.pf_miss + l2_rqsts.rfo_miss\000= \000\000\000\000\000\000\000000 */ +{ 131091 }, /* DCache_L2_Hits\000\000d_ratio(DCache_L2_All_Hits, DCache_L2= _All)\000\000\000\000\000\000\000\000000 */ +{ 131160 }, /* DCache_L2_Misses\000\000d_ratio(DCache_L2_All_Miss, DCache_= L2_All)\000\000\000\000\000\000\000\000000 */ +{ 130424 }, /* Frontend_Bound_SMT\000\000idq_uops_not_delivered.core / (4 = * (cpu_clk_unhalted.thread / 2 * (1 + cpu_clk_unhalted.one_thread_active / = cpu_clk_unhalted.ref_xclk)))\000\000\000\000\000\000\000\000000 */ +{ 130360 }, /* IPC\000group1\000inst_retired.any / cpu_clk_unhalted.thread= \000\000\000\000\000\000\000\000000 */ +{ 131298 }, /* L1D_Cache_Fill_BW\000\00064 * l1d.replacement / 1e9 / durat= ion_time\000\000\000\000\000\000\000\000000 */ +{ 131231 }, /* M1\000\000ipc + M2\000\000\000\000\000\000\000\000000 */ +{ 131254 }, /* M2\000\000ipc + M1\000\000\000\000\000\000\000\000000 */ +{ 131277 }, /* M3\000\0001 / M3\000\000\000\000\000\000\000\000000 */ +{ 130724 }, /* cache_miss_cycles\000group1\000dcache_miss_cpi + icache_mis= s_cycles\000\000\000\000\000\000\000\000000 */ +{ 130591 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.= any\000\000\000\000\000\000\000\000000 */ +{ 130656 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retir= ed.any\000\000\000\000\000\000\000\000000 */ =20 }; =20 --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 2087934A3BA for ; Fri, 24 Oct 2025 17:59:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328767; cv=none; b=J9ZVOJuV4xBZRBto2V4wJZkTWHiCoh1gt2pV5h65+frjrwZQbCR4Q2OiF9BRLF7QxWOdd64sUscATEySQydXXjzBBbixofIoZ0rwo6Tkkb9PN4AQ87/T8EXrHRrnrMzODqHGQhymPX1czB8NVzjVenNr/+U8urqOoqpa/bruN4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328767; c=relaxed/simple; bh=mEOeZdRB5TKzNcc+fI3rW3H+SBVWCA3FDy6gOrPFDS8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SGodUz3kVcnomOd4XLz+17bgTxRqxX01ZQApwW1SCFslPQ9A/tPRQbPl3eDzaBCwN8CjeSA+Ap1OAx2Cj+lLVTZDQBizcl69t3F0mwwjRdkd3LBDniSfyeGvuCJkwG1eCOf1zZ7aZwU2M6fks61mMITjuhC9TPbQtxdp+nGFp5U= 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=UFv7Goff; arc=none smtp.client-ip=209.85.215.202 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="UFv7Goff" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6ce25bea3eso1680089a12.2 for ; Fri, 24 Oct 2025 10:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328764; x=1761933564; 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=KrDMZvJFcr7/lo49tH87BdhyUBn/6YXkb3DwbU+Za4Y=; b=UFv7Goff3IhJpe2Mr/79LSeee2aFJhcVs9wJzk1n5as2TTF/dB9DCyzd63DzekM+9k /OoSG4J9wEiUcJ1y7k3iKy413xrS6q/bdmK9re5eTUbWtGmYxft39XDelcV2FYMZ7Nhc poJ1bLTTpT3/t1ERPRIGskQMOxzQi3YPIAJtpmED6xk/M5yB4KuMC5FbgyHYs6kf5e9O 3/3NGgWUzBwA5rpmKLrnveOn/BMg5y48B+qCNixi+5lJflRDvDkCBvgMtpCuhrvRD5M1 EuZOqujC2ySXxvTe9YRm9rjmt86LQaPXhNcPUso0MLk87DPXttYkwwuvGdNco1i904lA 7xSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328764; x=1761933564; 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=KrDMZvJFcr7/lo49tH87BdhyUBn/6YXkb3DwbU+Za4Y=; b=eBzQmf79G7UuAm2r4/qRL7d2GuEmY9Fyt5AhaF1+xZKnzK6nBlk6IkoJj9wAYkSMAH kCxbf2jN/7OK8rRncU39EZZ8WTvxpIAAlWnoRSByd6xmykJc7vVn+3EQVCLjYji+k0g0 9JRy+BLh42CWMCD8V4GpmOjsBTlO/motNIMkegnfeY9gKk9ecpWEpUrT5yV32q5rgGVq lFckcWy4YXOvqnG4cZkIx232uMIUxag05sCg2ZcZt5qdoNorvrxJ6y3PH0ocovIC7Q6i RQEoMBGGTBBcLE46JaGVqFYtsNTBO/KPF+/7J5NRzlcDAdmgeuD+GBWsMrZWQ9H26zP/ qUtQ== X-Forwarded-Encrypted: i=1; AJvYcCWfon6vKOcw2Rpj2Q+MBEDncTvlG2yU5/vLx68P1S8rWVfXezynlnXS9Bf/jWBch5QmrGghxPLMSiStM3o=@vger.kernel.org X-Gm-Message-State: AOJu0YyG8oyT+SojZ5DIi1RgO5SKwouE8cXLL4B1CYiV56+oM9ttR4Uo S5tNSGaWoaEN0NjssUlCgGuyIAipQ+5dJ4IZuywC0TPhxfj/JRUmknVFYN7z/5maOKlDhOXJZ30 ku+uhTxP2gg== X-Google-Smtp-Source: AGHT+IE9VBUQe4Btyjv6sTOUjOt2qEBy3WdrMTIrYSWLBGhPPd16gB4FVVQdSbcO3uOOsBgOIl1U5bqtikM/ X-Received: from plbms14.prod.google.com ([2002:a17:903:ace:b0:269:740f:8ae8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:230d:b0:273:c463:7b2c with SMTP id d9443c01a7336-2948b9579ecmr39543765ad.3.1761328764248; Fri, 24 Oct 2025 10:59:24 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:46 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-12-irogers@google.com> Subject: [PATCH v1 11/22] perf script: Change metric format to use json metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The metric format option isn't properly supported. This change improves that by making the sample events update the counts of an evsel, where the shadow metric code expects to read the values. To support printing metrics, metrics need to be found. This is done on the first attempt to print a metric. Every metric is parsed and then the evsels in the metric's evlist compared to those in perf script using the perf_event_attr type and config. If the metric matches then it is added for printing. As an event in the perf script's evlist may have >1 metric id, or different leader for aggregation, the first metric matched will be displayed in those cases. An example use is: ``` $ perf record -a -e '{instructions,cpu-cycles}:S' -a -- sleep 1 $ perf script -F period,metric ... 867817 metric: 0.30 insn per cycle 125394 metric: 0.04 insn per cycle 313516 metric: 0.11 insn per cycle metric: 1.00 insn per cycle ``` Signed-off-by: Ian Rogers --- tools/perf/builtin-script.c | 239 ++++++++++++++++++++++++++++++++---- 1 file changed, 217 insertions(+), 22 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 8124fcb51da9..e24c3d9e01a8 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -33,6 +33,7 @@ #include "util/path.h" #include "util/event.h" #include "util/mem-info.h" +#include "util/metricgroup.h" #include "ui/ui.h" #include "print_binary.h" #include "print_insn.h" @@ -341,9 +342,6 @@ struct evsel_script { char *filename; FILE *fp; u64 samples; - /* For metric output */ - u64 val; - int gnum; }; =20 static inline struct evsel_script *evsel_script(struct evsel *evsel) @@ -2132,13 +2130,161 @@ static void script_new_line(struct perf_stat_confi= g *config __maybe_unused, fputs("\tmetric: ", mctx->fp); } =20 -static void perf_sample__fprint_metric(struct perf_script *script, - struct thread *thread, +struct script_find_metrics_args { + struct evlist *evlist; + bool system_wide; +}; + +static struct evsel *map_metric_evsel_to_script_evsel(struct evlist *scrip= t_evlist, + struct evsel *metric_evsel) +{ + struct evsel *script_evsel; + + evlist__for_each_entry(script_evlist, script_evsel) { + /* Skip if perf_event_attr differ. */ + if (metric_evsel->core.attr.type !=3D script_evsel->core.attr.type) + continue; + if (metric_evsel->core.attr.config !=3D script_evsel->core.attr.config) + continue; + /* Skip if the script event has a metric_id that doesn't match. */ + if (script_evsel->metric_id && + strcmp(evsel__metric_id(metric_evsel), evsel__metric_id(script_evsel= ))) { + pr_debug("Skipping matching evsel due to differing metric ids '%s' vs '= %s'\n", + evsel__metric_id(metric_evsel), evsel__metric_id(script_evsel)); + continue; + } + return script_evsel; + } + return NULL; +} + +static int script_find_metrics(const struct pmu_metric *pm, + const struct pmu_metrics_table *table __maybe_unused, + void *data) +{ + struct script_find_metrics_args *args =3D data; + struct evlist *script_evlist =3D args->evlist; + struct evlist *metric_evlist =3D evlist__new(); + struct evsel *metric_evsel; + int ret =3D metricgroup__parse_groups(metric_evlist, + /*pmu=3D*/"all", + pm->metric_name, + /*metric_no_group=3D*/false, + /*metric_no_merge=3D*/false, + /*metric_no_threshold=3D*/true, + /*user_requested_cpu_list=3D*/NULL, + args->system_wide, + /*hardware_aware_grouping=3D*/false); + + if (ret) { + /* Metric parsing failed but continue the search. */ + goto out; + } + + /* + * Check the script_evlist has an entry for each metric_evlist entry. If + * the script evsel was already set up avoid changing data that may + * break it. + */ + evlist__for_each_entry(metric_evlist, metric_evsel) { + struct evsel *script_evsel =3D + map_metric_evsel_to_script_evsel(script_evlist, metric_evsel); + struct evsel *new_metric_leader; + + if (!script_evsel) { + pr_debug("Skipping metric '%s' as evsel '%s' / '%s' is missing\n", + pm->metric_name, evsel__name(metric_evsel), + evsel__metric_id(metric_evsel)); + goto out; + } + + if (script_evsel->metric_leader =3D=3D NULL) + continue; + + if (metric_evsel->metric_leader =3D=3D metric_evsel) { + new_metric_leader =3D script_evsel; + } else { + new_metric_leader =3D + map_metric_evsel_to_script_evsel(script_evlist, + metric_evsel->metric_leader); + } + /* Mismatching evsel leaders. */ + if (script_evsel->metric_leader !=3D new_metric_leader) { + pr_debug("Skipping metric '%s' due to mismatching evsel metric leaders = '%s' vs '%s'\n", + pm->metric_name, evsel__metric_id(metric_evsel), + evsel__metric_id(script_evsel)); + goto out; + } + } + /* + * Metric events match those in the script evlist, copy metric evsel + * data into the script evlist. + */ + evlist__for_each_entry(metric_evlist, metric_evsel) { + struct evsel *script_evsel =3D + map_metric_evsel_to_script_evsel(script_evlist, metric_evsel); + struct metric_event *metric_me =3D metricgroup__lookup(&metric_evlist->m= etric_events, + metric_evsel, + /*create=3D*/false); + + if (script_evsel->metric_id =3D=3D NULL) { + script_evsel->metric_id =3D metric_evsel->metric_id; + metric_evsel->metric_id =3D NULL; + } + + if (script_evsel->metric_leader =3D=3D NULL) { + if (metric_evsel->metric_leader =3D=3D metric_evsel) { + script_evsel->metric_leader =3D script_evsel; + } else { + script_evsel->metric_leader =3D + map_metric_evsel_to_script_evsel(script_evlist, + metric_evsel->metric_leader); + } + } + + if (metric_me) { + struct metric_expr *expr; + struct metric_event *script_me =3D + metricgroup__lookup(&script_evlist->metric_events, + script_evsel, + /*create=3D*/true); + + if (!script_me) { + /* + * As the metric_expr is created, the only + * failure is a lack of memory. + */ + goto out; + } + list_splice_init(&metric_me->head, &script_me->head); + list_for_each_entry(expr, &script_me->head, nd) { + for (int i =3D 0; expr->metric_events[i]; i++) { + expr->metric_events[i] =3D + map_metric_evsel_to_script_evsel(script_evlist, + expr->metric_events[i]); + } + } + } + } + pr_debug("Found metric '%s' whose evsels match those of in the perf data\= n", + pm->metric_name); + evlist__delete(metric_evlist); +out: + return 0; +} + +static struct aggr_cpu_id script_aggr_cpu_id_get(struct perf_stat_config *= config __maybe_unused, + struct perf_cpu cpu) +{ + return aggr_cpu_id__global(cpu, /*data=3D*/NULL); +} + +static void perf_sample__fprint_metric(struct thread *thread, struct evsel *evsel, struct perf_sample *sample, FILE *fp) { - struct evsel *leader =3D evsel__leader(evsel); + static bool init_metrics; struct perf_stat_output_ctx ctx =3D { .print_metric =3D script_print_metric, .new_line =3D script_new_line, @@ -2150,23 +2296,72 @@ static void perf_sample__fprint_metric(struct perf_= script *script, }, .force_header =3D false, }; - struct evsel *ev2; - u64 val; + struct perf_counts_values *count, *old_count; + int cpu_map_idx, thread_map_idx, aggr_idx; + struct evsel *pos; + + if (!init_metrics) { + /* One time initialization of stat_config and metric data. */ + struct script_find_metrics_args args =3D { + .evlist =3D evsel->evlist, + /* TODO: Determine system-wide based on evlist.. */ + .system_wide =3D true, + }; + if (!stat_config.output) + stat_config.output =3D stdout; + + if (!stat_config.aggr_map) { + /* TODO: currently only global aggregation is supported. */ + assert(stat_config.aggr_mode =3D=3D AGGR_GLOBAL); + stat_config.aggr_get_id =3D script_aggr_cpu_id_get; + stat_config.aggr_map =3D + cpu_aggr_map__new(evsel->evlist->core.user_requested_cpus, + aggr_cpu_id__global, /*data=3D*/NULL, + /*needs_sort=3D*/false); + } =20 - if (!evsel->stats) - evlist__alloc_stats(&stat_config, script->session->evlist, /*alloc_raw= =3D*/false); - if (evsel_script(leader)->gnum++ =3D=3D 0) - perf_stat__reset_shadow_stats(); - val =3D sample->period * evsel->scale; - evsel_script(evsel)->val =3D val; - if (evsel_script(leader)->gnum =3D=3D leader->core.nr_members) { - for_each_group_member (ev2, leader) { - perf_stat__print_shadow_stats(&stat_config, ev2, - evsel_script(ev2)->val, - sample->cpu, - &ctx); + metricgroup__for_each_metric(pmu_metrics_table__find(), script_find_metr= ics, &args); + init_metrics =3D true; + } + + if (!evsel->stats) { + if (evlist__alloc_stats(&stat_config, evsel->evlist, /*alloc_raw=3D*/tru= e) < 0) + return; + } + if (!evsel->stats->aggr) { + if (evlist__alloc_aggr_stats(evsel->evlist, stat_config.aggr_map->nr) < = 0) + return; + } + + /* Update the evsel's count using the sample's data. */ + cpu_map_idx =3D perf_cpu_map__idx(evsel->core.cpus, (struct perf_cpu){sam= ple->cpu}); + thread_map_idx =3D perf_thread_map__idx(evsel->core.threads, sample->tid); + if (thread_map_idx < 0) { + /* Missing thread, check for any thread. */ + if (perf_thread_map__pid(evsel->core.threads, /*idx=3D*/0) =3D=3D -1) { + thread_map_idx =3D 0; + } else { + pr_info("Missing thread map entry for thread %d\n", sample->tid); + return; + } + } + count =3D perf_counts(evsel->counts, cpu_map_idx, thread_map_idx); + old_count =3D perf_counts(evsel->prev_raw_counts, cpu_map_idx, thread_map= _idx); + count->val =3D old_count->val + sample->period; + count->run =3D old_count->run + 1; + count->ena =3D old_count->ena + 1; + + /* Update the aggregated stats. */ + perf_stat_process_counter(&stat_config, evsel); + + /* Display all metrics. */ + evlist__for_each_entry(evsel->evlist, pos) { + cpu_aggr_map__for_each_idx(aggr_idx, stat_config.aggr_map) { + perf_stat__print_shadow_stats(&stat_config, pos, + count->val, + aggr_idx, + &ctx); } - evsel_script(leader)->gnum =3D 0; } } =20 @@ -2348,7 +2543,7 @@ static void process_event(struct perf_script *script, } =20 if (PRINT_FIELD(METRIC)) - perf_sample__fprint_metric(script, thread, evsel, sample, fp); + perf_sample__fprint_metric(thread, evsel, sample, fp); =20 if (verbose > 0) fflush(fp); --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 5E3E034A79C for ; Fri, 24 Oct 2025 17:59:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328769; cv=none; b=rdA7+6ZAhk+7VrCrFr2UOmU0++xfY83i9z0FgtzgBCrkqMFrTIBdEpT2rMJXGfl8Q5pYLUy7Z2t2inzz8jXjul4zlDJvapT9SHpYKQE3/zNJcB10Vw2JN5NyPR8Z3HEtPz23dxWGod4SYSQnRXO8F+CRYLIQm16/n0+gnumIBOY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328769; c=relaxed/simple; bh=7FNXAPwA3dqYeWcQmGWPd28vCm95IMfbNZyzamrH6gQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=DWLX2DVRDS9cS02rbTcPzaQnnu/KodbjmxPosW7BNNk0hd6XT4khC7xk83jICub+Kr+QCrxqNJraakyklU9oXmzrAEoH/KG3OWop9ZG8cXJRIEk0Kv5eibiaoFqqm17JGgqholTDhk/j/G19IYn1AlvQCf3ENBjejFIRw2OoRuo= 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=UfbPZf2J; arc=none smtp.client-ip=209.85.214.202 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="UfbPZf2J" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-290cd61855eso21421135ad.1 for ; Fri, 24 Oct 2025 10:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328767; x=1761933567; 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=Bprm0/Pkp+oZtEwTbHea/r1VjaKksxDrDpC4IA8MvtM=; b=UfbPZf2JI1OioEeAV1JroDGTzIWTSdPLXo/ftEhYCGZtJ0dXOzgqlCtWMaiKf76HIw Tfz/y8qDGtdySTSmoL1F2O5UMGLhhaAJRlw5oCCnchA+L/37RD7fhduIzM4mS854/KEI m6a5kwhgKgPw70Kn80fUoBXbntZqwp3dF53n8LIvdIin/IzRJRggSB0MN30Bu235PsvT ZXWzZHWK/0Giaf4Asm1NmIuPTRswoqiOlUc+RRSmHsxyo7Uce0B0saoRRf9BEHN2qRE6 zyXvp6fPmQ+3V95LZxtvlLdtehuShIEbijIO3LJufPqdMCj9cGUILbOvwy0odhD5Uo8N tI9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328767; x=1761933567; 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=Bprm0/Pkp+oZtEwTbHea/r1VjaKksxDrDpC4IA8MvtM=; b=s+5SMkuAhrdVXXT/l93/2pEVgGo7zyoUsZoc/QW95JJ8QafP7h3RA1LhPL6kyXlabc D7KLKGY2cwvC5M05LYz117hSk6Iy+uVyrV4YSqo+bUGniZv0KSKWu60Ys99pmUtu1Brx loV1F4dKB8iMGKBJfuZRnjdSR13Yt2GG5MDsDOKhbeVuPLXcY7IP6x+k22h9sfIQT2eb gUujTPmxrZlrl42RsBzuLkJKOpSVgGjaVSRnmsczN7HpASfT8UPT/7V9iMbpiHEiVJYl f6cC+jOcxQWVE2+B3lbs5UHta1NX7CvNbfFl3hC9Vqg0nKHBvx50yJcHm6HKwOY/JS2I KXHA== X-Forwarded-Encrypted: i=1; AJvYcCWrNFW+0jq10viQAz7/c+YNQrNap7zFusx3lNJXd6E0FJOctmbsU5ua3TZJY3a0+gp8bVoOGy79dpw6gtk=@vger.kernel.org X-Gm-Message-State: AOJu0YyTwrdtolaKUy7K2Hf6gOOGAB8UBPtqsPwL6dkjtRZsxWVKz/ED CjOrVbh5OsDXv2Efl/JC1n3eHQaB4o2wc3cjd+OHRLf3yRygKvQ/s6SpLm2em3RCly10uynb5Va sPFIKD0PjiQ== X-Google-Smtp-Source: AGHT+IFl3L0mMM1B+PknYNt9doyiNb92fc2sL+uzcxLPuRIwudvVspDRe8pIRX1VXcQOw6vuKfuZMQrQtKLY X-Received: from plgy17.prod.google.com ([2002:a17:903:22d1:b0:269:7867:579f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c942:b0:290:c5c8:9419 with SMTP id d9443c01a7336-290cb65b8e4mr379450435ad.48.1761328766564; Fri, 24 Oct 2025 10:59:26 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:47 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-13-irogers@google.com> Subject: [PATCH v1 12/22] perf stat: Remove hard coded shadow metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that the metrics are encoded in common json the hard coded printing means the metrics are shown twice. Remove the hard coded version. This means that when specifying events, and those events correspond to a hard coded metric, the metric will no longer be displayed. The metric will be displayed if the metric is requested. Due to the adhoc printing in the previous approach it was often found frustrating, the new approach avoids this. The default perf stat output on an alderlake now looks like: ``` $ perf stat -a -- sleep 1 Performance counter stats for 'system wide': 7,932 context-switches # 281.7 cs/sec = cs_per_second TopdownL1 (cpu_core) # 10.3 % tma_bad_spe= culation # 17.3 % tma_fronten= d_bound TopdownL1 (cpu_core) # 37.3 % tma_backend= _bound # 35.2 % tma_retiring 5,901 page-faults # 209.5 faults/= sec page_faults_per_second 418,955,116 cpu_atom/cpu-cycles/ # 0.0 GHz cy= cles_frequency (49.77%) 1,113,933,476 cpu_core/cpu-cycles/ # 0.0 GHz cy= cles_frequency # 14.6 % tma_bad_spe= culation # 8.5 % tma_retirin= g (50.17%) # 41.8 % tma_backend= _bound # 35.1 % tma_fronten= d_bound (50.31%) 32,196,918 cpu_atom/branches/ # 1.1 K/sec = branch_frequency (60.24%) 445,404,717 cpu_core/branches/ # 15.8 K/sec = branch_frequency 235 cpu-migrations # 8.3 migrati= ons/sec migrations_per_second 28,160,951,165 cpu-clock # 28.0 CPUs C= PUs_utilized 382,285,763 cpu_atom/cpu-cycles/ # 0.4 instruc= tions insn_per_cycle (60.18%) 1,114,029,255 cpu_core/cpu-cycles/ # 2.3 instruc= tions insn_per_cycle 1,768,727 cpu_atom/branches-misses/ # 6.5 % bran= ch_miss_rate (49.68%) 4,505,904 cpu_core/branches-misses/ # 1.0 % bran= ch_miss_rate 1.007137632 seconds time elapsed ``` Signed-off-by: Ian Rogers --- tools/perf/builtin-script.c | 1 - tools/perf/util/stat-display.c | 4 +- tools/perf/util/stat-shadow.c | 392 +-------------------------------- tools/perf/util/stat.h | 2 +- 4 files changed, 6 insertions(+), 393 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index e24c3d9e01a8..6da8bfe1e7aa 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -2358,7 +2358,6 @@ static void perf_sample__fprint_metric(struct thread = *thread, evlist__for_each_entry(evsel->evlist, pos) { cpu_aggr_map__for_each_idx(aggr_idx, stat_config.aggr_map) { perf_stat__print_shadow_stats(&stat_config, pos, - count->val, aggr_idx, &ctx); } diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c index 4d0e353846ea..eabeab5e6614 100644 --- a/tools/perf/util/stat-display.c +++ b/tools/perf/util/stat-display.c @@ -902,7 +902,7 @@ static void printout(struct perf_stat_config *config, s= truct outstate *os, &num, from, &out); } while (from !=3D NULL); } else { - perf_stat__print_shadow_stats(config, counter, uval, aggr_idx, &out); + perf_stat__print_shadow_stats(config, counter, aggr_idx, &out); } } else { pm(config, os, METRIC_THRESHOLD_UNKNOWN, /*format=3D*/NULL, /*unit=3D*/N= ULL, /*val=3D*/0); @@ -1274,7 +1274,7 @@ static void print_metric_headers(struct perf_stat_con= fig *config, =20 os.evsel =3D counter; =20 - perf_stat__print_shadow_stats(config, counter, 0, 0, &out); + perf_stat__print_shadow_stats(config, counter, /*aggr_idx=3D*/0, &out); } =20 if (!config->json_output) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index 4df614f8e200..afbc49e8cb31 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -20,357 +20,12 @@ struct stats walltime_nsecs_stats; struct rusage_stats ru_stats; =20 -enum { - CTX_BIT_USER =3D 1 << 0, - CTX_BIT_KERNEL =3D 1 << 1, - CTX_BIT_HV =3D 1 << 2, - CTX_BIT_HOST =3D 1 << 3, - CTX_BIT_IDLE =3D 1 << 4, - CTX_BIT_MAX =3D 1 << 5, -}; - -enum stat_type { - STAT_NONE =3D 0, - STAT_NSECS, - STAT_CYCLES, - STAT_INSTRUCTIONS, - STAT_STALLED_CYCLES_FRONT, - STAT_STALLED_CYCLES_BACK, - STAT_BRANCHES, - STAT_BRANCH_MISS, - STAT_CACHE_REFS, - STAT_CACHE_MISSES, - STAT_L1_DCACHE, - STAT_L1_ICACHE, - STAT_LL_CACHE, - STAT_ITLB_CACHE, - STAT_DTLB_CACHE, - STAT_L1D_MISS, - STAT_L1I_MISS, - STAT_LL_MISS, - STAT_DTLB_MISS, - STAT_ITLB_MISS, - STAT_MAX -}; - -static int evsel_context(const struct evsel *evsel) -{ - int ctx =3D 0; - - if (evsel->core.attr.exclude_kernel) - ctx |=3D CTX_BIT_KERNEL; - if (evsel->core.attr.exclude_user) - ctx |=3D CTX_BIT_USER; - if (evsel->core.attr.exclude_hv) - ctx |=3D CTX_BIT_HV; - if (evsel->core.attr.exclude_host) - ctx |=3D CTX_BIT_HOST; - if (evsel->core.attr.exclude_idle) - ctx |=3D CTX_BIT_IDLE; - - return ctx; -} - void perf_stat__reset_shadow_stats(void) { memset(&walltime_nsecs_stats, 0, sizeof(walltime_nsecs_stats)); memset(&ru_stats, 0, sizeof(ru_stats)); } =20 -static enum stat_type evsel__stat_type(struct evsel *evsel) -{ - /* Fake perf_hw_cache_op_id values for use with evsel__match. */ - u64 PERF_COUNT_hw_cache_l1d_miss =3D PERF_COUNT_HW_CACHE_L1D | - ((PERF_COUNT_HW_CACHE_OP_READ) << 8) | - ((PERF_COUNT_HW_CACHE_RESULT_MISS) << 16); - u64 PERF_COUNT_hw_cache_l1i_miss =3D PERF_COUNT_HW_CACHE_L1I | - ((PERF_COUNT_HW_CACHE_OP_READ) << 8) | - ((PERF_COUNT_HW_CACHE_RESULT_MISS) << 16); - u64 PERF_COUNT_hw_cache_ll_miss =3D PERF_COUNT_HW_CACHE_LL | - ((PERF_COUNT_HW_CACHE_OP_READ) << 8) | - ((PERF_COUNT_HW_CACHE_RESULT_MISS) << 16); - u64 PERF_COUNT_hw_cache_dtlb_miss =3D PERF_COUNT_HW_CACHE_DTLB | - ((PERF_COUNT_HW_CACHE_OP_READ) << 8) | - ((PERF_COUNT_HW_CACHE_RESULT_MISS) << 16); - u64 PERF_COUNT_hw_cache_itlb_miss =3D PERF_COUNT_HW_CACHE_ITLB | - ((PERF_COUNT_HW_CACHE_OP_READ) << 8) | - ((PERF_COUNT_HW_CACHE_RESULT_MISS) << 16); - - if (evsel__is_clock(evsel)) - return STAT_NSECS; - else if (evsel__match(evsel, HARDWARE, HW_CPU_CYCLES)) - return STAT_CYCLES; - else if (evsel__match(evsel, HARDWARE, HW_INSTRUCTIONS)) - return STAT_INSTRUCTIONS; - else if (evsel__match(evsel, HARDWARE, HW_STALLED_CYCLES_FRONTEND)) - return STAT_STALLED_CYCLES_FRONT; - else if (evsel__match(evsel, HARDWARE, HW_STALLED_CYCLES_BACKEND)) - return STAT_STALLED_CYCLES_BACK; - else if (evsel__match(evsel, HARDWARE, HW_BRANCH_INSTRUCTIONS)) - return STAT_BRANCHES; - else if (evsel__match(evsel, HARDWARE, HW_BRANCH_MISSES)) - return STAT_BRANCH_MISS; - else if (evsel__match(evsel, HARDWARE, HW_CACHE_REFERENCES)) - return STAT_CACHE_REFS; - else if (evsel__match(evsel, HARDWARE, HW_CACHE_MISSES)) - return STAT_CACHE_MISSES; - else if (evsel__match(evsel, HW_CACHE, HW_CACHE_L1D)) - return STAT_L1_DCACHE; - else if (evsel__match(evsel, HW_CACHE, HW_CACHE_L1I)) - return STAT_L1_ICACHE; - else if (evsel__match(evsel, HW_CACHE, HW_CACHE_LL)) - return STAT_LL_CACHE; - else if (evsel__match(evsel, HW_CACHE, HW_CACHE_DTLB)) - return STAT_DTLB_CACHE; - else if (evsel__match(evsel, HW_CACHE, HW_CACHE_ITLB)) - return STAT_ITLB_CACHE; - else if (evsel__match(evsel, HW_CACHE, hw_cache_l1d_miss)) - return STAT_L1D_MISS; - else if (evsel__match(evsel, HW_CACHE, hw_cache_l1i_miss)) - return STAT_L1I_MISS; - else if (evsel__match(evsel, HW_CACHE, hw_cache_ll_miss)) - return STAT_LL_MISS; - else if (evsel__match(evsel, HW_CACHE, hw_cache_dtlb_miss)) - return STAT_DTLB_MISS; - else if (evsel__match(evsel, HW_CACHE, hw_cache_itlb_miss)) - return STAT_ITLB_MISS; - return STAT_NONE; -} - -static enum metric_threshold_classify get_ratio_thresh(const double ratios= [3], double val) -{ - assert(ratios[0] > ratios[1]); - assert(ratios[1] > ratios[2]); - - return val > ratios[1] - ? (val > ratios[0] ? METRIC_THRESHOLD_BAD : METRIC_THRESHOLD_NEARLY_BAD) - : (val > ratios[2] ? METRIC_THRESHOLD_LESS_GOOD : METRIC_THRESHOLD_GOOD); -} - -static double find_stat(const struct evsel *evsel, int aggr_idx, enum stat= _type type) -{ - struct evsel *cur; - int evsel_ctx =3D evsel_context(evsel); - struct perf_pmu *evsel_pmu =3D evsel__find_pmu(evsel); - - evlist__for_each_entry(evsel->evlist, cur) { - struct perf_stat_aggr *aggr; - - /* Ignore the evsel that is being searched from. */ - if (evsel =3D=3D cur) - continue; - - /* Ignore evsels that are part of different groups. */ - if (evsel->core.leader->nr_members > 1 && - evsel->core.leader !=3D cur->core.leader) - continue; - /* Ignore evsels with mismatched modifiers. */ - if (evsel_ctx !=3D evsel_context(cur)) - continue; - /* Ignore if not the cgroup we're looking for. */ - if (evsel->cgrp !=3D cur->cgrp) - continue; - /* Ignore if not the stat we're looking for. */ - if (type !=3D evsel__stat_type(cur)) - continue; - - /* - * Except the SW CLOCK events, - * ignore if not the PMU we're looking for. - */ - if ((type !=3D STAT_NSECS) && (evsel_pmu !=3D evsel__find_pmu(cur))) - continue; - - aggr =3D &cur->stats->aggr[aggr_idx]; - if (type =3D=3D STAT_NSECS) - return aggr->counts.val; - return aggr->counts.val * cur->scale; - } - return 0.0; -} - -static void print_ratio(struct perf_stat_config *config, - const struct evsel *evsel, int aggr_idx, - double numerator, struct perf_stat_output_ctx *out, - enum stat_type denominator_type, - const double thresh_ratios[3], const char *_unit) -{ - double denominator =3D find_stat(evsel, aggr_idx, denominator_type); - double ratio =3D 0; - enum metric_threshold_classify thresh =3D METRIC_THRESHOLD_UNKNOWN; - const char *fmt =3D NULL; - const char *unit =3D NULL; - - if (numerator && denominator) { - ratio =3D numerator / denominator * 100.0; - thresh =3D get_ratio_thresh(thresh_ratios, ratio); - fmt =3D "%7.2f%%"; - unit =3D _unit; - } - out->print_metric(config, out->ctx, thresh, fmt, unit, ratio); -} - -static void print_stalled_cycles_front(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double stalled, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {50.0, 30.0, 10.0}; - - print_ratio(config, evsel, aggr_idx, stalled, out, STAT_CYCLES, thresh_ra= tios, - "frontend cycles idle"); -} - -static void print_stalled_cycles_back(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double stalled, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {75.0, 50.0, 20.0}; - - print_ratio(config, evsel, aggr_idx, stalled, out, STAT_CYCLES, thresh_ra= tios, - "backend cycles idle"); -} - -static void print_branch_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_BRANCHES, thresh_r= atios, - "of all branches"); -} - -static void print_l1d_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_L1_DCACHE, thresh_= ratios, - "of all L1-dcache accesses"); -} - -static void print_l1i_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_L1_ICACHE, thresh_= ratios, - "of all L1-icache accesses"); -} - -static void print_ll_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_LL_CACHE, thresh_r= atios, - "of all LL-cache accesses"); -} - -static void print_dtlb_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_DTLB_CACHE, thresh= _ratios, - "of all dTLB cache accesses"); -} - -static void print_itlb_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_ITLB_CACHE, thresh= _ratios, - "of all iTLB cache accesses"); -} - -static void print_cache_miss(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out) -{ - const double thresh_ratios[3] =3D {20.0, 10.0, 5.0}; - - print_ratio(config, evsel, aggr_idx, misses, out, STAT_CACHE_REFS, thresh= _ratios, - "of all cache refs"); -} - -static void print_instructions(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double instructions, - struct perf_stat_output_ctx *out) -{ - print_metric_t print_metric =3D out->print_metric; - void *ctxp =3D out->ctx; - double cycles =3D find_stat(evsel, aggr_idx, STAT_CYCLES); - double max_stalled =3D max(find_stat(evsel, aggr_idx, STAT_STALLED_CYCLES= _FRONT), - find_stat(evsel, aggr_idx, STAT_STALLED_CYCLES_BACK)); - - if (cycles) { - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, "%7.2f ", - "insn per cycle", instructions / cycles); - } else { - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, /*fmt=3D*/NULL, - "insn per cycle", 0); - } - if (max_stalled && instructions) { - if (out->new_line) - out->new_line(config, ctxp); - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, "%7.2f ", - "stalled cycles per insn", max_stalled / instructions); - } -} - -static void print_cycles(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double cycles, - struct perf_stat_output_ctx *out) -{ - double nsecs =3D find_stat(evsel, aggr_idx, STAT_NSECS); - - if (cycles && nsecs) { - double ratio =3D cycles / nsecs; - - out->print_metric(config, out->ctx, METRIC_THRESHOLD_UNKNOWN, "%8.3f", - "GHz", ratio); - } else { - out->print_metric(config, out->ctx, METRIC_THRESHOLD_UNKNOWN, /*fmt=3D*/= NULL, - "GHz", 0); - } -} - -static void print_nsecs(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx __maybe_unused, double nsecs, - struct perf_stat_output_ctx *out) -{ - print_metric_t print_metric =3D out->print_metric; - void *ctxp =3D out->ctx; - double wall_time =3D avg_stats(&walltime_nsecs_stats); - - if (wall_time) { - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, "%8.3f", "CPUs util= ized", - nsecs / (wall_time * evsel->scale)); - } else { - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, /*fmt=3D*/NULL, - "CPUs utilized", 0); - } -} - static int prepare_metric(const struct metric_expr *mexp, const struct evsel *evsel, struct expr_parse_ctx *pctx, @@ -682,56 +337,15 @@ void *perf_stat__print_shadow_stats_metricgroup(struc= t perf_stat_config *config, =20 void perf_stat__print_shadow_stats(struct perf_stat_config *config, struct evsel *evsel, - double avg, int aggr_idx, + int aggr_idx, struct perf_stat_output_ctx *out) { - typedef void (*stat_print_function_t)(struct perf_stat_config *config, - const struct evsel *evsel, - int aggr_idx, double misses, - struct perf_stat_output_ctx *out); - static const stat_print_function_t stat_print_function[STAT_MAX] =3D { - [STAT_INSTRUCTIONS] =3D print_instructions, - [STAT_BRANCH_MISS] =3D print_branch_miss, - [STAT_L1D_MISS] =3D print_l1d_miss, - [STAT_L1I_MISS] =3D print_l1i_miss, - [STAT_DTLB_MISS] =3D print_dtlb_miss, - [STAT_ITLB_MISS] =3D print_itlb_miss, - [STAT_LL_MISS] =3D print_ll_miss, - [STAT_CACHE_MISSES] =3D print_cache_miss, - [STAT_STALLED_CYCLES_FRONT] =3D print_stalled_cycles_front, - [STAT_STALLED_CYCLES_BACK] =3D print_stalled_cycles_back, - [STAT_CYCLES] =3D print_cycles, - [STAT_NSECS] =3D print_nsecs, - }; print_metric_t print_metric =3D out->print_metric; void *ctxp =3D out->ctx; - int num =3D 1; + int num =3D 0; =20 - if (config->iostat_run) { + if (config->iostat_run) iostat_print_metric(config, evsel, out); - } else { - stat_print_function_t fn =3D stat_print_function[evsel__stat_type(evsel)= ]; - - if (fn) - fn(config, evsel, aggr_idx, avg, out); - else { - double nsecs =3D find_stat(evsel, aggr_idx, STAT_NSECS); - - if (nsecs) { - char unit =3D ' '; - char unit_buf[10] =3D "/sec"; - double ratio =3D convert_unit_double(1000000000.0 * avg / nsecs, - &unit); - - if (unit !=3D ' ') - snprintf(unit_buf, sizeof(unit_buf), "%c/sec", unit); - print_metric(config, ctxp, METRIC_THRESHOLD_UNKNOWN, "%8.3f", - unit_buf, ratio); - } else { - num =3D 0; - } - } - } =20 perf_stat__print_shadow_stats_metricgroup(config, evsel, aggr_idx, &num, NULL, out); diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h index 34f30a295f89..53e4aa411e5f 100644 --- a/tools/perf/util/stat.h +++ b/tools/perf/util/stat.h @@ -184,7 +184,7 @@ struct perf_stat_output_ctx { =20 void perf_stat__print_shadow_stats(struct perf_stat_config *config, struct evsel *evsel, - double avg, int aggr_idx, + int aggr_idx, struct perf_stat_output_ctx *out); bool perf_stat__skip_metric_event(struct evsel *evsel, u64 ena, u64 run); void *perf_stat__print_shadow_stats_metricgroup(struct perf_stat_config *c= onfig, --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 EF96934AB12 for ; Fri, 24 Oct 2025 17:59:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328772; cv=none; b=qnUsH4/tVobuddV4i+8mZ+Ckncgp/0EkHFzkbafvg/0IrO+LVlr+B/hlNfdhsu0U+cezUOKSVKootn3TLL56jkgjC8GkRw/b0sYOvjJSPw8R3aHLTeVYm3q+wcWu+i+6P/lj65kDAOdiRhYJzYTLHUCaXvpeRiCH/zOjC0fynCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328772; c=relaxed/simple; bh=0dW3EhwozZJdK9GyY7uSSqkQ3MrxnQx4/U/UjD7W3x0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=HibfsCwcEcd/6dwMXxPWijFVyfa9SaRAzHWyh3o+aVUjJiY+UGNDeJrl6Pom6xE61ClzH0CgrACtoreOph6TyFZV20WHDMl/LEEtb7rxrEbHJCoQiA+DTCv4wEZ6w97tx47NTraeW6k95YpAYuTPTyK1/GBegIkUrIUDBqCMLus= 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=T4uaIg2w; arc=none smtp.client-ip=209.85.216.73 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="T4uaIg2w" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-33d75897745so4822629a91.0 for ; Fri, 24 Oct 2025 10:59:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328769; x=1761933569; 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=Bmup4BIbkScoJHl2u6fwJbLlsa89q7qgBXlzEQqW1es=; b=T4uaIg2wrLxeRGdGaZp6X07cXDZHdzSqP/0sxkL3VBRIwD6gmgjQ7NTEis+KHeijI4 OaJebFqgQh1ln6IBRUrJwlm7TBtDk11sjPx11ohjL73aOFLnjHcQak9RzFdy1LUSY7rG 42r4jg50rFBODbx8zdgcfP2W2z5rnEOYs6whfT3XmRoJynQw+X3DDEMP9dHaZOCVRIyd Gv/lOErMOcczeyA1zG51j+s+tEYlc4aBrf65MX84bnE8i2mpG1+cDOtAVYI5BVmEnUWS I3PuCWiScx9gzNne+fxRCbfhpT5AHAqJjTPI7C51OAa8mM4kgQ1iDCBn6yRnvRYxbFNO nPzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328769; x=1761933569; 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=Bmup4BIbkScoJHl2u6fwJbLlsa89q7qgBXlzEQqW1es=; b=WgfbBrq9KSPY2baXZiGu7oaPFjO3zYc/oYc/aViKQjPkkZjMy5d2EH+aJsAP1qBzCa vxAqyDvdX9rcKr2xF/XY/ckk5kbIoEjJmVRM8cShn0P2/TU8MSmZJCrvPjULo/a5xsxa Io1lPSycAlyIojyEXAiSDTLWceboqxmvzG5F2A+Vijfz5qiNh0dr+SlpfGVKrFrwF4yN gcUe7PkajEYc7E5KOCORPLEXWGpP1T4Ju0539z7pYmHP30Hv7/rIYSrDrJOes1s5ThXv CTpQgtUTNGZhm2Jh3Sek81YD3QZw5Qi5DiJ6hyD2sh6fKq7DKoi8R8PRT0jqMaVp1sxW 523A== X-Forwarded-Encrypted: i=1; AJvYcCX54NSRMKA6yhO+3WUso7qXEKMK3L+qq/KK1bnCnhbPtA5xjuVTgygb6I0SBDsxTzxR+QqDJSU58QqTi50=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2fXpImQZWbZvQmreN+09e99B+i/SbAsT3cW9yY0lv1qdm1LRM yw0aAoH7DI1Ma9fxun2L3pAHi7rzwxrL6B3/GhFcFT4/aVKIYQ7R+QqpxbLlIqGLIUMDHITuvGg BuZYomdFi+A== X-Google-Smtp-Source: AGHT+IF8VrmJgUHc+N22FHVZeIKm9/dVMTRLTdCjZgNklBkTzpwDuzOlB+B1PvJ5QqZTPRwuwT2BrDja295a X-Received: from pjob9.prod.google.com ([2002:a17:90a:8c89:b0:33b:8aa1:75ed]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3852:b0:33b:8ac4:1ac4 with SMTP id 98e67ed59e1d1-33bcf91c61dmr41786364a91.35.1761328769046; Fri, 24 Oct 2025 10:59:29 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:48 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-14-irogers@google.com> Subject: [PATCH v1 13/22] perf stat: Fix default metricgroup display on hybrid From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The logic to skip output of a default metric line was firing on Alderlake and not displaying 'TopdownL1 (cpu_atom)'. Remove the need_full_name check as it is equivalent to the different PMU test in the cases we care about, merge the 'if's and flip the evsel of the PMU test. The 'if' is now basically saying, if the output matches the last printed output then skip the output. Before: ``` TopdownL1 (cpu_core) # 11.3 % tma_bad_spe= culation # 24.3 % tma_fronten= d_bound TopdownL1 (cpu_core) # 33.9 % tma_backend= _bound # 30.6 % tma_retiring # 42.2 % tma_backend= _bound # 25.0 % tma_fronten= d_bound (49.81%) # 12.8 % tma_bad_spe= culation # 20.0 % tma_retirin= g (59.46%) ``` After: ``` TopdownL1 (cpu_core) # 8.3 % tma_bad_spe= culation # 43.7 % tma_fronten= d_bound # 30.7 % tma_backend= _bound # 17.2 % tma_retiring TopdownL1 (cpu_atom) # 31.9 % tma_backend= _bound # 37.6 % tma_fronten= d_bound (49.66%) # 18.0 % tma_bad_spe= culation # 12.6 % tma_retirin= g (59.58%) ``` Signed-off-by: Ian Rogers --- tools/perf/util/stat-shadow.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index afbc49e8cb31..c1547128c396 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -256,11 +256,9 @@ static void perf_stat__print_metricgroup_header(struct= perf_stat_config *config, * event. Only align with other metics from * different metric events. */ - if (last_name && !strcmp(last_name, name)) { - if (!need_full_name || last_pmu !=3D evsel->pmu) { - out->print_metricgroup_header(config, ctxp, NULL); - return; - } + if (last_name && !strcmp(last_name, name) && last_pmu =3D=3D evsel->pmu) { + out->print_metricgroup_header(config, ctxp, NULL); + return; } =20 if (need_full_name && evsel->pmu) --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-yx1-f74.google.com (mail-yx1-f74.google.com [74.125.224.74]) (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 44B0934B433 for ; Fri, 24 Oct 2025 17:59:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328774; cv=none; b=GjzmNpDc+beamLD7BqboshNTI+xzPtCwgGbAzshe+QRAczbeCxrYQ5HjQPnMDiUg4yqg3I/STHBAb0QYoDIHlNYQPNPDy5DjBV4xRg9+tBaTLpVpWOmr0xN7zIorG2wHw1+g//zndFrQwm3+3xiSZGS9CRgeNKzjNOpATsyl9dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328774; c=relaxed/simple; bh=yMntZKYkgRZQFYoN31aa8lH7OuKk/lLDOw5E1rcZWpY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=YqwGrMAyj/2iilC+1idPeJIMOzkHLoLUI/vK72ZfNV/JBD50SUnGG7L/FyyCVsPyuvZp2l8UWUY6LVM7mH0RuBXcoHzZVQS+Pc//PK1fKPF6OmkcC/ep+FSFI7qhz26TQmplTUSjMZOn6kblaz6hmcjZmzLrBJkoQrdBmn0bXaU= 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=hNq/FyEw; arc=none smtp.client-ip=74.125.224.74 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="hNq/FyEw" Received: by mail-yx1-f74.google.com with SMTP id 956f58d0204a3-63e2d3351abso2917850d50.3 for ; Fri, 24 Oct 2025 10:59:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328771; x=1761933571; 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=8+CZCPcXOtmhhwkMtz+KUve4ZRtL0G+pNivZyKPtADM=; b=hNq/FyEwvpjWaIF2vvHoqMJR0BUH8T+OjKhH7Jn8IotoGXLQe4v3gnqVMR1fA3wXfe /zJvdvVeMgLnDkBEn7gIN0NYH5hSd9fwxnypQ6tizVmU1FG0p8EoXQypyoexK7xyN18H CXdkkgBu8d18GDh5DLCfEurJdL+f146jDZUAFztpqXcBhLKrXMIN4TzVbCAb+D8h6EJi YYmC6uCGUWj7VwgX9FkORB24KptzUNmkkPJ1aQfn4EQTD6CfTdlZXw+gzpQ1Mvk3ZJVF 7RbAEWCz616kAwGw+yxZcWoH5aESdP1dDRE2KfOYheEgYdgN4mdPcQgjyucsnv96+SPX V3sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328771; x=1761933571; 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=8+CZCPcXOtmhhwkMtz+KUve4ZRtL0G+pNivZyKPtADM=; b=BVPuRgd7Z+y5JHKa9cepQMKJsOaKMDM3pOJ8YO3pLPaXjkkpwogQBhZSzUWHYKZHWI SauB0Tpz8EGWzef7Grd0nd00+8L/wQKuEz7FW+LzzexIWKNERAkmihIJla2Vrkf4VokV qRu3gAX86J6Ro1ra/mTZaKpwcWlPRNsIhl9TvWL+6TQaceDyzE2G6PP6OLcIu1HIkRg0 LO061hKTH6wSOoH9Z3uUVZtQrSX2CIjb3h+rirQmNuFv1xB6QE18CgCw81bzqLhWFNeL 5JYLGb8Gqcezjzo2uuSy8CjdIsHNsNH7SBtLCX/VjJGWzvSlvTmTG6dTv2LQPtxspo5O L1cA== X-Forwarded-Encrypted: i=1; AJvYcCXrnngWiAxnaZJgztKFbCpJUaEt6so+7t8j36U4BzmHq+fmd3zNkJZEKHJrVQ5uFwLe9QBrwW+MYvtTHE4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzu6SBrnjfN+NCbeJ8+pRlQc8TuVEIK92i7Mk3Z6vWRWzxEzRCk vVXCfPCyq4fRdCTjA26l4x7r/ob+Sbt/t/gtE7P7+CkIf9qWSsI9k7VJeUL5Ucw91eHd6lKjtV0 8dBwI4EJp8g== X-Google-Smtp-Source: AGHT+IHTm++YylY4VKtwtku/JVus+ogofV6k6Peu1O0a4DwUOXQqcMH5mJjDiBqTnYOU99Fh+YBBtPdWauuB X-Received: from ybbhb8.prod.google.com ([2002:a05:6902:4588:b0:eb9:54fc:2b4b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:690c:610e:b0:785:aedf:4ac6 with SMTP id 00721157ae682-785aedf6aa2mr227642207b3.6.1761328771185; Fri, 24 Oct 2025 10:59:31 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:49 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-15-irogers@google.com> Subject: [PATCH v1 14/22] perf stat: Sort default events/metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" To improve the readability of default events/metrics, sort the evsels after the Default metric groups have be parsed. Before: ``` $ perf stat -a sleep 1 Performance counter stats for 'system wide': 21,194 context-switches # 752.1 cs/sec = cs_per_second TopdownL1 (cpu_core) # 9.4 % tma_bad_spe= culation # 25.0 % tma_fronten= d_bound # 37.0 % tma_backend= _bound # 28.7 % tma_retiring 6,371 page-faults # 226.1 faults/= sec page_faults_per_second 734,456,525 cpu_atom/cpu-cycles/ # 0.0 GHz cy= cles_frequency (49.77%) 1,679,085,181 cpu_core/cpu-cycles/ # 0.1 GHz cy= cles_frequency TopdownL1 (cpu_atom) # 19.2 % tma_bad_spe= culation # 15.1 % tma_retirin= g (50.15%) # 32.9 % tma_backend= _bound # 32.9 % tma_fronten= d_bound (50.34%) 86,758,824 cpu_atom/branches/ # 3.1 K/sec = branch_frequency (60.26%) 524,281,539 cpu_core/branches/ # 18.6 K/sec = branch_frequency 1,458 cpu-migrations # 51.7 migrati= ons/sec migrations_per_second 28,178,124,975 cpu-clock # 28.0 CPUs C= PUs_utilized 776,037,182 cpu_atom/cpu-cycles/ # 0.6 instruc= tions insn_per_cycle (60.18%) 1,679,168,140 cpu_core/cpu-cycles/ # 1.8 instruc= tions insn_per_cycle 4,045,615 cpu_atom/branches-misses/ # 5.3 % bran= ch_miss_rate (49.65%) 6,656,795 cpu_core/branches-misses/ # 1.3 % bran= ch_miss_rate 1.007340329 seconds time elapsed ``` After: ``` $ perf stat -a sleep 1 Performance counter stats for 'system wide': 25,701 context-switches # 911.8 cs/sec = cs_per_second 28,187,404,943 cpu-clock # 28.0 CPUs C= PUs_utilized 2,053 cpu-migrations # 72.8 migrati= ons/sec migrations_per_second 12,390 page-faults # 439.6 faults/= sec page_faults_per_second 592,082,798 cpu_core/branches/ # 21.0 K/sec = branch_frequency 7,762,204 cpu_core/branches-misses/ # 1.3 % bran= ch_miss_rate 1,925,833,804 cpu_core/cpu-cycles/ # 0.1 GHz cy= cles_frequency 1,925,848,650 cpu_core/cpu-cycles/ # 1.7 instruc= tions insn_per_cycle 95,449,119 cpu_atom/branches/ # 3.4 K/sec = branch_frequency (59.78%) 4,278,932 cpu_atom/branches-misses/ # 4.3 % bran= ch_miss_rate (50.26%) 980,441,753 cpu_atom/cpu-cycles/ # 0.0 GHz cy= cles_frequency (50.34%) 1,091,626,599 cpu_atom/cpu-cycles/ # 0.6 instruc= tions insn_per_cycle (50.37%) TopdownL1 (cpu_core) # 9.1 % tma_bad_spe= culation # 27.3 % tma_fronten= d_bound # 35.7 % tma_backend= _bound # 27.9 % tma_retiring TopdownL1 (cpu_atom) # 31.1 % tma_backend= _bound # 34.3 % tma_fronten= d_bound (49.74%) # 24.1 % tma_bad_spe= culation # 10.5 % tma_retirin= g (59.57%) ``` Signed-off-by: Ian Rogers --- tools/perf/builtin-stat.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index c00d84a04593..4d15eabb4927 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -74,6 +74,7 @@ #include "util/intel-tpebs.h" #include "asm/bug.h" =20 +#include #include #include #include @@ -1853,6 +1854,35 @@ static int perf_stat_init_aggr_mode_file(struct perf= _stat *st) return 0; } =20 +static int default_evlist_evsel_cmp(void *priv __maybe_unused, + const struct list_head *l, + const struct list_head *r) +{ + const struct perf_evsel *lhs_core =3D container_of(l, struct perf_evsel, = node); + const struct evsel *lhs =3D container_of(lhs_core, struct evsel, core); + const struct perf_evsel *rhs_core =3D container_of(r, struct perf_evsel, = node); + const struct evsel *rhs =3D container_of(rhs_core, struct evsel, core); + + if (evsel__leader(lhs) =3D=3D evsel__leader(rhs)) { + /* Within the same group, respect the original order. */ + return lhs_core->idx - rhs_core->idx; + } + + /* Sort default metrics evsels first, and default show events before thos= e. */ + if (lhs->default_metricgroup !=3D rhs->default_metricgroup) + return lhs->default_metricgroup ? -1 : 1; + + if (lhs->default_show_events !=3D rhs->default_show_events) + return lhs->default_show_events ? -1 : 1; + + /* Sort by PMU type (prefers legacy types first). */ + if (lhs->pmu !=3D rhs->pmu) + return lhs->pmu->type - rhs->pmu->type; + + /* Sort by name. */ + return strcmp(evsel__name((struct evsel *)lhs), evsel__name((struct evsel= *)rhs)); +} + /* * Add default events, if there were no attributes specified or * if -d/--detailed, -d -d or -d -d -d is used: @@ -2019,6 +2049,8 @@ static int add_default_events(void) &metric_evlist->metric_events); evlist__delete(metric_evlist); } + list_sort(/*priv=3D*/NULL, &evlist->core.entries, default_evlist_evsel_c= mp); + } out: if (!ret) { --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 18C4834A764 for ; Fri, 24 Oct 2025 17:59:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328777; cv=none; b=ptgMqAdqSqXEXhSnQ8YnbfpxNpGfW+tqagO/hZr62uzATmc9H/qOE9ueIMpRFemjudbq4hUuj59HpXetvCPtVGveK5+l4jSNmWEkt+RCbWv2MWzGD7NfZA+wNGWpwXibMl6CGcZidfYxUGhiPZKNDjY30JiWnIStu3YTbkShMnQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328777; c=relaxed/simple; bh=BqNKmhYdLVVOMxSxOJ05Qh+AKv/HTqCJorm5Grxp6zY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Q/7gzW8vFTPD+LwL+p5B0Kdyez8Qqm2n7V6diEdYuIj4IfYgLcYhR9pHyX03+BWhzB4VQjHi9B8dS59Pw5qZ0n1jz/pWiygC6zOgGG7qqzmEytQDoKf92fMU62JZfyK7E8lScK9Gh2C2UU88j1SQazTld+DZtW3/a70S6nQtK/c= 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=4euEVdb/; arc=none smtp.client-ip=209.85.216.73 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="4euEVdb/" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-33be4db19cfso4219453a91.0 for ; Fri, 24 Oct 2025 10:59:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328773; x=1761933573; 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=uCPacSqb5S79ptlAfnfLDbabLvPXVS08f3+jSVTqtcg=; b=4euEVdb/LrdS6ac9gwLpNgna+PPsM+HpYe0et4sw8KpGXCnIgzgCNvzV5uY5kKHt+G w7P0PKjo+tAeo5ksRBekFIrielR4MXteHeDHVdcZe1mdjBfbhEDPDP9vESw8RmQUtdyc HXlk9TLs+CiNiqKoGQdAnHrDz5Y2fES8bQp2ydViqUi2lKdVaj143l+ME911BnXKwjv5 YYeJ0YWYXYoMUqKj5orq/8pFTU9ijXvEXySGz4CbAJOC18BDHkYmLHoLLzN6SbpLsuW0 fL59EH8BjQw3FU2pHAxw0QOyaB73jEifbClYPHj+UodfcWfL3KzokyLjtj8aQjSXzbXE hN0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328773; x=1761933573; 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=uCPacSqb5S79ptlAfnfLDbabLvPXVS08f3+jSVTqtcg=; b=KOCNZcH+ZFMJKu9bUbn7IuIXjLTp73Ah3XFswQqTMRM6b+pQq20y3VhLneYTDB4F5D 4D438Y5JaMPCHZXSYVwu+IDp94VN5Gcx4YfGQEjFNAnddAXP/68ZfOOnywF1pFl3aK4M J767qKkOzFnDLFyKC6Zduw45+793+D49lSEqraV0ce4oDwcb4pd4ovBIC45YZAYhLg8X bw0/apkLhJGy8TrLaQTP52F66/gfKQFLn2nJUuoOpLOMrvBOVksyQuoisoTxRVw1QbEF xjGDombVJ0R6u01Ny1fY0z1ClTJ/9lJaAZlU4rJu+uXbybr1nmnnbGawJ4YDoS+AuksE IxfQ== X-Forwarded-Encrypted: i=1; AJvYcCUponzA8XwI9ARzxZHRvo3nY23qTcQ4ViVO4VxgFgZ39+bfVDM8/gR8iv1EDmjLH14fPuEge1eRAUtW5wE=@vger.kernel.org X-Gm-Message-State: AOJu0YyIGhdwNVd6sql8DdJwO73zGhUo6ES8HFlZmO3VBn8+FBlanvyY I0kJe8G4Mtfi4akv+ZefTv0GlQv9CirOf5j7MQ4nLBnQgGlrz4xCe/NkCSZnPWcYmXoN43VVQtk 36BIYCLP3zQ== X-Google-Smtp-Source: AGHT+IFK0u6JY2sQK+J+PSCyGOXlBWsHHnuv48u/sSFbbHB8oDEd4cACgo0M8Xw0uOhqqHeHuKQoxiCdKIXH X-Received: from pjyj8.prod.google.com ([2002:a17:90a:e608:b0:33b:51fe:1a8b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1dc4:b0:330:6f13:53fc with SMTP id 98e67ed59e1d1-33bcf8f870bmr35826864a91.27.1761328773449; Fri, 24 Oct 2025 10:59:33 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:50 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-16-irogers@google.com> Subject: [PATCH v1 15/22] perf stat: Remove "unit" workarounds for metric-only From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove code that tested the "unit" as in KB/sec for certain hard coded metric values and did workarounds. Signed-off-by: Ian Rogers --- tools/perf/util/stat-display.c | 47 ++++++---------------------------- 1 file changed, 8 insertions(+), 39 deletions(-) diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c index eabeab5e6614..b3596f9f5cdd 100644 --- a/tools/perf/util/stat-display.c +++ b/tools/perf/util/stat-display.c @@ -592,42 +592,18 @@ static void print_metricgroup_header_std(struct perf_= stat_config *config, fprintf(config->output, "%*s", MGROUP_LEN - n - 1, ""); } =20 -/* Filter out some columns that don't work well in metrics only mode */ - -static bool valid_only_metric(const char *unit) -{ - if (!unit) - return false; - if (strstr(unit, "/sec") || - strstr(unit, "CPUs utilized")) - return false; - return true; -} - -static const char *fixunit(char *buf, struct evsel *evsel, - const char *unit) -{ - if (!strncmp(unit, "of all", 6)) { - snprintf(buf, 1024, "%s %s", evsel__name(evsel), - unit); - return buf; - } - return unit; -} - static void print_metric_only(struct perf_stat_config *config, void *ctx, enum metric_threshold_classify thresh, const char *fmt, const char *unit, double val) { struct outstate *os =3D ctx; FILE *out =3D os->fh; - char buf[1024], str[1024]; + char str[1024]; unsigned mlen =3D config->metric_only_len; const char *color =3D metric_threshold_classify__color(thresh); =20 - if (!valid_only_metric(unit)) - return; - unit =3D fixunit(buf, os->evsel, unit); + if (!unit) + unit =3D ""; if (mlen < strlen(unit)) mlen =3D strlen(unit) + 1; =20 @@ -643,16 +619,15 @@ static void print_metric_only_csv(struct perf_stat_co= nfig *config __maybe_unused void *ctx, enum metric_threshold_classify thresh __maybe_unused, const char *fmt, - const char *unit, double val) + const char *unit __maybe_unused, double val) { struct outstate *os =3D ctx; FILE *out =3D os->fh; char buf[64], *vals, *ends; - char tbuf[1024]; =20 - if (!valid_only_metric(unit)) + if (!unit) return; - unit =3D fixunit(tbuf, os->evsel, unit); + snprintf(buf, sizeof(buf), fmt ?: "", val); ends =3D vals =3D skip_spaces(buf); while (isdigit(*ends) || *ends =3D=3D '.') @@ -670,13 +645,9 @@ static void print_metric_only_json(struct perf_stat_co= nfig *config __maybe_unuse { struct outstate *os =3D ctx; char buf[64], *ends; - char tbuf[1024]; const char *vals; =20 - if (!valid_only_metric(unit)) - return; - unit =3D fixunit(tbuf, os->evsel, unit); - if (!unit[0]) + if (!unit || !unit[0]) return; snprintf(buf, sizeof(buf), fmt ?: "", val); vals =3D ends =3D skip_spaces(buf); @@ -695,7 +666,6 @@ static void print_metric_header(struct perf_stat_config= *config, const char *unit, double val __maybe_unused) { struct outstate *os =3D ctx; - char tbuf[1024]; =20 /* In case of iostat, print metric header for first root port only */ if (config->iostat_run && @@ -705,9 +675,8 @@ static void print_metric_header(struct perf_stat_config= *config, if (os->evsel->cgrp !=3D os->cgrp) return; =20 - if (!valid_only_metric(unit)) + if (!unit) return; - unit =3D fixunit(tbuf, os->evsel, unit); =20 if (config->json_output) return; --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 2C4A534C99D for ; Fri, 24 Oct 2025 17:59:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328777; cv=none; b=qZ9US80KQBX8klfQB8j8seBe9ljWAq1iiaDNJ06A7iIMJ1ezvZxbk9N75cB0ucOotlSJMQQK4fjzuVA/K/g0ZmuVb09NcYC3CLCrMFYj/P6tjqGk7y+p8q/iAsDA4hj9HlXwvKNaF160eCSt3pNOY0L1pPP/gb8pUJh3eV31ARI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328777; c=relaxed/simple; bh=oyhHdo1LBjj0VodlYK8qf6Zt9QK2SSQps2VhISTUJHY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GGMWDaawVVnOANscu+7vmnd0kusXIBQoKcTGzmc7axD4xcEf9ykOBq64Z0SvOBk0yV0YyUWp9F/Qie/wrOAlCETyrjfdQCdRpujh3jIFqkRPZvMmt+VyO+1Ac/bjPczkz24f8pH0oqff10gFpalxDpH8xlokCjLA3NNqtUHwvCI= 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=cAJSdZA2; arc=none smtp.client-ip=209.85.216.73 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="cAJSdZA2" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-332560b7171so2611778a91.0 for ; Fri, 24 Oct 2025 10:59:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328775; x=1761933575; 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=doWCJlIodi2evuV1XPBQp6vnTKO7fG8Tf8DSVry8FPk=; b=cAJSdZA24nx+56SEGKBJ3XUptbYA1H3ScGHmJTOkQpScxbrTmpxjaQ8cMu8bRe0lee rsC1umRRF4JchjpOkJGeeQPNU6GQQHJdHEcNd7Uqy/Drb09sTxvzsih44QPjcpFMkw/p i7wtGcpyDp8chhxJlv4ucO2xBh4bRn8nsdAPpSwi/vYqf/i5/D22rgLm3+F8XKWVbCsE zNplzWQtYTNUClhEIEPMZnQEuKbb/UX1uUlwVsdttdrM5UNc0siTquMVp2iNo/4xoHiR k63K+Re8d7mcc1grHU5HeIakdln7eeVneTlkeatEdpxIMYQhHWjsY0jj8lM7oZLiNG0r 5S+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328775; x=1761933575; 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=doWCJlIodi2evuV1XPBQp6vnTKO7fG8Tf8DSVry8FPk=; b=mxkXIJqt5i1/6/1s6jqN9HJ9OhD62fG/hUwWnllr8+8I1UMSGk/w0PuJz8psGs2Ifb jTWRmOHmUMYWGRWSTmox+AFfR+8N0S38Y9SIjFFsaxmzf1qnxq5yN7EE43fUESktZ+4a oS4g29lnoPR4syxYBWDaktbowiDP+0rFqNFzTKTSwW2CLmO5ADU2E0bJ5NniNKsC8TYX S6KUV2Vn3rk3AjsyEEWJ7QGd+LfGeodwv0Yv//5m4LYr8KT2J6UQOsoMLUoXBzykz+10 6QdBp22MJdC99sTpf1og5RpVxDcTOGtYgd3LiJAJhVcAkAafHQJGrLxcztfmiFsSSKWA nD9w== X-Forwarded-Encrypted: i=1; AJvYcCXRIkWVFSZ+f7C4UlTrBOtEFYJjCygpekgUNXoJTkH4E4AquJN8nlJwcJjt4lw69z6SRLGuQWigJfZcMY8=@vger.kernel.org X-Gm-Message-State: AOJu0Yzw5HxnMBdsr2prqMmGb+/reEUF8vJaYoZTFbRdZ8qN6B6Geq8+ U0DQYu+kf9AWTDszuTigjbP1V5w6eEkF4FzEIDj3/k2a9jnD4HkTKeSyAQrqIemmQs6JU30h13o verVjwciFtw== X-Google-Smtp-Source: AGHT+IFly8CqIb+NCd0ZCTDC/mipInJiYu7MMuTrzCPyxtjDDRcyMm2QdKhaWwsD4uTg7mLm18tnoe1cQHH6 X-Received: from pjbgx22.prod.google.com ([2002:a17:90b:1256:b0:332:4129:51b2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1b50:b0:33b:dff1:5f44 with SMTP id 98e67ed59e1d1-33fd3a566ffmr4234320a91.6.1761328775447; Fri, 24 Oct 2025 10:59:35 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:51 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-17-irogers@google.com> Subject: [PATCH v1 16/22] perf test stat+json: Improve metric-only testing From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When testing metric-only, pass a metric to perf rather than expecting a hard coded metric value to be generated. Remove keys that were really metric-only units and instead don't expect metric only to have a matching json key as it encodes metrics as {"metric_name", "metric_value"}. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/lib/perf_json_output_lint.py | 4 ++-- tools/perf/tests/shell/stat+json_output.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/shell/lib/perf_json_output_lint.py b/tools/pe= rf/tests/shell/lib/perf_json_output_lint.py index c6750ef06c0f..1369baaa0361 100644 --- a/tools/perf/tests/shell/lib/perf_json_output_lint.py +++ b/tools/perf/tests/shell/lib/perf_json_output_lint.py @@ -65,8 +65,6 @@ def check_json_output(expected_items): 'socket': lambda x: True, 'thread': lambda x: True, 'unit': lambda x: True, - 'insn per cycle': lambda x: isfloat(x), - 'GHz': lambda x: True, # FIXME: it seems unintended for --metric-on= ly } input =3D '[\n' + ','.join(Lines) + '\n]' for item in json.loads(input): @@ -88,6 +86,8 @@ def check_json_output(expected_items): f' in \'{item}\'') for key, value in item.items(): if key not in checks: + if args.metric_only: + continue raise RuntimeError(f'Unexpected key: key=3D{key} value=3D{value}') if not checks[key](value): raise RuntimeError(f'Check failed for: key=3D{key} value=3D{value}= ') diff --git a/tools/perf/tests/shell/stat+json_output.sh b/tools/perf/tests/= shell/stat+json_output.sh index 98fb65274ac4..85d1ad7186c6 100755 --- a/tools/perf/tests/shell/stat+json_output.sh +++ b/tools/perf/tests/shell/stat+json_output.sh @@ -181,7 +181,7 @@ check_metric_only() echo "[Skip] CPU-measurement counter facility not installed" return fi - perf stat -j --metric-only -e instructions,cycles -o "${stat_output}" true + perf stat -j --metric-only -M page_faults_per_second -o "${stat_output}" = true $PYTHON $pythonchecker --metric-only --file "${stat_output}" echo "[Success]" } --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 3D1B034CFD9 for ; Fri, 24 Oct 2025 17:59:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328779; cv=none; b=ItlhVtBh9E1QyUKOtAb4P6+l5HxgzP+cnEoGmaLnnU/zPrhXG5ALOJFEuSkRfT78tciJ5WqCAxmnq87mnn21XAXwtBFvRoMzxvzg0qCO3h5eZw53hMpoGnQMXwEmi94wCommO5ORPYxTHs08JkBGhSlTLURBl4XoHI+BMM9mNyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328779; c=relaxed/simple; bh=EMIWmYJk4oxcW+eMiucvxkG58MQPnGfjcYpNvnxtnSE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SkL4eWvIwYKSfBkOq97uL7O4V7rFtrh05OmLPMI8JKmTaGV6yhPeKQQbYNJA3d5X+yg7ktoyNPK9k3shaIDAsQs5kNbj2aKs2BlH/ik8Lbw9phyiPZLFW/YUIAMlPf8nsWIUaqeRpJMByCK1dUO83+d39F5ajE1uh31aftg4tGo= 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=o/mN+PzK; arc=none smtp.client-ip=209.85.216.73 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="o/mN+PzK" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-33c6140336eso4646872a91.3 for ; Fri, 24 Oct 2025 10:59:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328778; x=1761933578; 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=525kLDCVrY5SIxBE3vSN6xCvavPC8e8IS2zf2hpQNrs=; b=o/mN+PzKPGvM8722WDK191XTJSxNdNxMt8lnEZzNjCaPB64/ATLo8uBvha0Ia8CCqg 0/Z09t8J53U0NUotaXvDeD0XUrElwolyeTzsyNbDBWxIQOdeNcoy8x99bk1jShuI6ZRS FscfaoH6YZYtsRK0sf2barSmu5mVMM3V6nTWg11a59Y5twH2jTNoad10vYJnB3q/uOE+ uPHqQhYxOdLiWtP+k4KCamdVggtVWNLjipAncVZ+VHJflKy5MuzWW6YtklDPt+YO7YfC 4qZETNpSDVvu1kKMEUbd+CDD10q3BU+9I9PkzdH37IAjr1M51jCqkJZj6N0bx+qD+ih6 wMqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328778; x=1761933578; 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=525kLDCVrY5SIxBE3vSN6xCvavPC8e8IS2zf2hpQNrs=; b=OXWdUzy2e8IdzY/FrpDclpDB35qiEzjldC5EdQDbkFaBkylUG/zcAMJmu2wK4o1T3/ vWYQf0EsmLQfV+0Vq2uEUqtTOeAtZdyK3q6nS1LEdzqeV987RA+xWqE7idHHca5xEIJn eaw0EfASe9CCyWrsLQabbxcF0hISVRxLYfGLZbG1FmDt8d6A9QAefRHBbn/NTt/d63kL 41+FCo770Q5kwCXFV8O9F96YX8eoQZkE2I582g6aQ9z4QZr6hpYTyCK/FliojbU8YRKR LVZekfqHqivirTEG1uG7Y0LLCb1ZUq6X4w/Vhcgf4GSQcSgyLT3qgyJ4q4vq5Ks02c2L Wxqg== X-Forwarded-Encrypted: i=1; AJvYcCUkxnumxXbDl8Y0+1CiK9G2JxsKp4+dI8KppXFpKe9lVVNaf8dah7/MxRe3h1sF+uIe7Suv/6fjZfFqSLQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxhTTu8Fu82yLad7t9SxBEc5Ls26EYlMY3YPIc47sKOQIT8pOOH xzNnLQho2cVY8yC4OHua7pRrwabF7RTzg9/s081MWQlneFBCTl7ENKkFcYASeRaZP5UrSzXGnsl gABKMCBcWmQ== X-Google-Smtp-Source: AGHT+IHVz7Q7RAEZzhshyfJcovdGc3s06xzAx0puc4rSHrN8CtieQtGcdRPJE/r2iwPYmz/WJ6vmtqApfEDm X-Received: from pjot4.prod.google.com ([2002:a17:90a:9504:b0:33b:c327:1273]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3a46:b0:335:28e3:81cd with SMTP id 98e67ed59e1d1-33fd65ed34emr3787766a91.18.1761328777584; Fri, 24 Oct 2025 10:59:37 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:52 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-18-irogers@google.com> Subject: [PATCH v1 17/22] perf test stat: Ignore failures in Default[234] metricgroups From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The Default[234] metric groups may contain unsupported legacy events. Allow those metric groups to fail. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/stat_all_metricgroups.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/perf/tests/shell/stat_all_metricgroups.sh b/tools/perf/t= ests/shell/stat_all_metricgroups.sh index c6d61a4ac3e7..1400880ec01f 100755 --- a/tools/perf/tests/shell/stat_all_metricgroups.sh +++ b/tools/perf/tests/shell/stat_all_metricgroups.sh @@ -37,6 +37,9 @@ do then err=3D2 # Skip fi + elif [[ "$m" =3D=3D @(Default2|Default3|Default4) ]] + then + echo "Ignoring failures in $m that may contain unsupported legacy ev= ents" else echo "Metric group $m failed" echo $result --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 2681634D4E6 for ; Fri, 24 Oct 2025 17:59:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328782; cv=none; b=ZFVTi1UcwgG6c9bYLbZ5sYDYfxk0saZzuFslveHUrXFa+4zRhWdmUbhqW1q2YyFsPSCkL2Ekp80ke+HtftesBK4kke13usDz1QJwsbmQz/0s6F+0AZsSU9m/5pmUXnGlktXTGP6SFMDgUrN6q0OiAnR6wbP2Uhg2ZN5HxNch8o4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328782; c=relaxed/simple; bh=QELkFwUGTrOe0PQw9hkeWCvVtxDO/AoGHdfdb3+Umqc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KGdeyvyAng4C2H5usFV16Q7VeIuMR8/Dec3TokN3GMmIvd/9+9qSBtYcT46KPHUHmKu9lgDHpqkFEIu++iOVPP4U5tXbVCK86zc5iAqmL9c2lh7+PegDvSsAM7ZTgnH7kqtk2F1zDp8W8q413FTH1TfCfYg5Puio6iL2PZ8zkR8= 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=U23tK7Go; arc=none smtp.client-ip=209.85.128.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="U23tK7Go" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-785ebbc739bso914647b3.0 for ; Fri, 24 Oct 2025 10:59:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328780; x=1761933580; 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=DvP50ZzYw5FWwn1UAQP69vx00l96i82LZhtWn6tukw0=; b=U23tK7GoUqMqBQbCORgqs06JHjNCHyc602oXvaetOcUfz7BFqA3kr/A0oUgdHMQpfL Z0L9dI1sZn1Ro+WfRt5tPzP76GLLuQLnjbPBt8UpEJEhr8Uf/Y7DHE4pB0baV4EglVL+ CllJa7DiYkoY5LOg63HMimEIg8JQ3pPn0FSmwN0XikfgdqJZokliWeBiu/ZH1yB4zK97 srZUSIEjJJNvhNcAm9bSyLtYWNL4zVMliVCWr4CT/51gzWgSoZjP0ub6wBuXgkdLKGEK QfO3yiRooymhAQhxAT26/bZoh8lrZtg5urS6BMCXWHd3hBN1Ug9D3Cy8sJjdPMqqwSNG tL1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328780; x=1761933580; 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=DvP50ZzYw5FWwn1UAQP69vx00l96i82LZhtWn6tukw0=; b=IzKgYOWdpyxGCjo2RLFeRmJARcdIEaxtj393n2hH82XgRqJtd7EJL29q1A+rzw4hdN 5ytPMfOWagA64gLE4Tjcq7yo5jVxJ+VC8uHiBUPomiODfir+Cef6Ndr4sStVUurs1E++ FAmPG6XwcNAk1j+IKA985LonEnO6pwaloE3NCsO5gKa6/3scaYSIovbjYG3QUOfTmhMd w/p3G3xKVsBwF0SdB6lIZQDcypq1kmGEYVOGR5MSnOv2hhomO5bA9dHSEDurIXebXfPt bIkojZQPh1+bZ5d/B168Om5EHGnGt0Lo+g9cUDBipFmXVa5H7wtXq36bgvAyLCF8NIRQ Lxeg== X-Forwarded-Encrypted: i=1; AJvYcCVMG8i+gHj5o+s/xG0S/F8TGnaX7lH4tuXUnjYwmsvrgwPrbVi95apT12YWCJF7H4kKedQJFEh7atj1C6k=@vger.kernel.org X-Gm-Message-State: AOJu0YzYckWBKk5bl5QQ6t9MgOmMFSM/Roatvm352ld5Xm/QFvVdSdOz VPWa7tVhg8RSryTT3eCd/yWnjg5O/JQVmQFwEW6mJKE/295e9tXWGWRmsvcVB0U2x5V31FWf7HH FwqolO3+Q0A== X-Google-Smtp-Source: AGHT+IGEcXvK1E6p1QN6VWO2jx68qSIOrMuAi/BiYCBb8KUHtua6fwqyhsNuspKqCPBH8gZ6xgZ9uefHpOM2 X-Received: from ywbci17.prod.google.com ([2002:a05:690c:a91:b0:784:a970:1a17]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:690c:f93:b0:784:8ed9:e362 with SMTP id 00721157ae682-7848ed9e887mr172832517b3.40.1761328779968; Fri, 24 Oct 2025 10:59:39 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:53 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-19-irogers@google.com> Subject: [PATCH v1 18/22] perf test stat: Update std_output testing metric expectations From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make the expectations match json metrics rather than the previous hard coded ones. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/stat+std_output.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/tests/shell/stat+std_output.sh b/tools/perf/tests/s= hell/stat+std_output.sh index ec41f24299d9..9c4b92ecf448 100755 --- a/tools/perf/tests/shell/stat+std_output.sh +++ b/tools/perf/tests/shell/stat+std_output.sh @@ -12,8 +12,8 @@ set -e stat_output=3D$(mktemp /tmp/__perf_test.stat_output.std.XXXXX) =20 event_name=3D(cpu-clock task-clock context-switches cpu-migrations page-fa= ults stalled-cycles-frontend stalled-cycles-backend cycles instructions bra= nches branch-misses) -event_metric=3D("CPUs utilized" "CPUs utilized" "/sec" "/sec" "/sec" "fron= tend cycles idle" "backend cycles idle" "GHz" "insn per cycle" "/sec" "of a= ll branches") -skip_metric=3D("stalled cycles per insn" "tma_" "retiring" "frontend_bound= " "bad_speculation" "backend_bound" "TopdownL1" "percent of slots") +event_metric=3D("CPUs_utilized" "CPUs_utilized" "cs/sec" "migrations/sec" = "faults/sec" "frontend_cycles_idle" "backend_cycles_idle" "GHz" "insn_per_c= ycle" "/sec" "branch_miss_rate") +skip_metric=3D("tma_" "TopdownL1") =20 cleanup() { rm -f "${stat_output}" --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 E595934DB7F for ; Fri, 24 Oct 2025 17:59:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328784; cv=none; b=mctlgPFjn22O0+h8JeRlszECUBXAAsCl4dC6EZ+HyA+ilVyOfWsRByzvpzJrfGin4vDTJB18s2JqnJiQV5NbVW/oWP2eDwm8Rq+292o7pq56QosNM5kPufQpyondPelT6gtddMiNqcyJdqo4bOvl1320QtEViTMp5GaIjtq/11E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328784; c=relaxed/simple; bh=nnbzpYYoE1uErizC7KXzK9XKE4rE5R+0ONkMp4g7shk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Ebt7C6l20PZUjLkztKJnYouAxq6cVamvWuX7iH1fVrF7qaYqOXE/TcBE2tZuNvJASKidAicfmKGd+Nlq/bY12Nz/7O/FmXrXCaPzKD7tcAhnIN/m629PvKJB8q4dM8/oMH33Q5qr3VSws6oWxYE1v47/ec6BxBtEoQ4jQ48I8cc= 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=2SnJ84L1; arc=none smtp.client-ip=209.85.215.202 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="2SnJ84L1" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6d53016548so637677a12.3 for ; Fri, 24 Oct 2025 10:59:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328782; x=1761933582; 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=Qll4Tnbg7iSyg4HhuOtdcJhkqf9XcL7mLt6N2dgKiAo=; b=2SnJ84L1NHuDloRg1N0xFdk/5Tq391AzUKpiI9lf78+Y5iwKO8cio1Oqvb5x8IA0q0 8rIqCpyqU5364X7xDrnNg6142KLtTIKeu1iXJZE28rADDYaaLwGWhDkCpeBkcquVcAbA SpwkWdvS82Tp6oElJDFmG4aUWXyQdIeEk2O7CEM1ug8+l+YELslc1fr2JKVx1ObKDqZn E0xlyPeMg/yToSvZ9wpvd336O6q88Em1zt0TVA+e0sqqzV7qVRVecghKsu7PcAvaoyvg 3EDrGq//h+Yq4n52l63x97Rx50qC/uPRuf6ddXqy7DGFaDIEpdqjCipVcZiNEOzqfURI fzNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328782; x=1761933582; 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=Qll4Tnbg7iSyg4HhuOtdcJhkqf9XcL7mLt6N2dgKiAo=; b=Yax2BIDJjcOepZxJqu8PF+MDy4ECHpy7sn9exvobUyTsfpx7gHgMdqfChipttiUkwy SQkw7Cs8bIS1qkf3+HhGAsnfQoD3MWGARNQ8owS23vlPCyPHZWKn115q4i7kUdfDiKoX IQK8qyCTYRd1JtQ0/a/qeJStixrjaFU6c3cQGJuwluw4M9xHuMG4sKePqpL/wzmM78W6 gu2A47Q5RYFFvSOHRqfxusEYBEWrqKvi5SrQIHYi8w4ku/IYxVOEBqh0dLOiAUO9AMKT eSWYx5zV8omy34lcNltc91/0n5s4mY6vuKdhBLwgoFqslsIF5H6gNE5QkhIpQFS/Z3Vv DDSw== X-Forwarded-Encrypted: i=1; AJvYcCXBFhqRYFpzWFAEsLYGCYHi+xpW8cab7Dsq5LpgVa8tAbPQYPzS1ZVwdNd1sPxELwTq7uY2U2Ww1nP8gMA=@vger.kernel.org X-Gm-Message-State: AOJu0YyDuOAhnsBYOrKroZUL4uKXblVvEzjbp7owDm0rTIegd//hwsRE nOdkwyS/VHfgr5Dsk885CJ4p9XYBDnB5nbyj1Idxps0Fvfg41EXtuIm61mQSVPP/sExtYMoR0cz 617g492Pt5g== X-Google-Smtp-Source: AGHT+IEj7v8hY7mfMTsEI1hA2dB953ZEYGmWJ9X89OsMwCloBEvnYhMZ48xa40L7Vl0BguVxjppBAdghME/g X-Received: from pjn8.prod.google.com ([2002:a17:90b:5708:b0:31f:2a78:943]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:72a7:b0:33f:4e3d:b004 with SMTP id adf61e73a8af0-33f4e3db1acmr1588439637.47.1761328782193; Fri, 24 Oct 2025 10:59:42 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:54 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-20-irogers@google.com> Subject: [PATCH v1 19/22] perf test metrics: Update all metrics for possibly failing default metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Default metrics may use unsupported events and be ignored. These metrics shouldn't cause metric testing to fail. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/stat_all_metrics.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/perf/tests/shell/stat_all_metrics.sh b/tools/perf/tests/= shell/stat_all_metrics.sh index 6fa585a1e34c..a7edf01b3943 100755 --- a/tools/perf/tests/shell/stat_all_metrics.sh +++ b/tools/perf/tests/shell/stat_all_metrics.sh @@ -25,8 +25,13 @@ for m in $(perf list --raw-dump metrics); do # No error result and metric shown. continue fi - if [[ "$result" =3D~ "Cannot resolve IDs for" ]] + if [[ "$result" =3D~ "Cannot resolve IDs for" || "$result" =3D~ "No supp= orted events found" ]] then + if [[ "$m" =3D=3D @(l1_prefetch_miss_rate|stalled_cycles_per_instructi= on) ]] + then + # Default metrics that may use unsupported events. + continue + fi echo "Metric contains missing events" echo $result err=3D1 # Fail --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 A262634E750 for ; Fri, 24 Oct 2025 17:59:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328786; cv=none; b=ZfBXamIDOQzJqOxPDkM5tYaqsxyIorp1afNgzjCGHGTIORNQJe+ag91e2gnDmtUxiIQMqDW5WWD7gdiwWHYQsgHs8L8w2T7WUOEGQarPYgPrz6Z7kUpYCUIThvfW5cwOq67k75zwzBCdY4AxLpkozBGUjrpYYX+kvUSx3vn4GW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328786; c=relaxed/simple; bh=a5JGvMLFyprG6QfL5XnHpkM6fv0A27tSZN8uL+4ANfs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=WHRg4QFBvy7gKv5TFbVZeKUevyFdPJXl+Eqp3tzT5lQ/F2NGrSqB7acLbTkaNNLlZ9CrsyUzQP9aTh/K+tATQvIJrfDGa8U/5FmOA2ZbKhocR1XHZlRpwtPTFlkqOpEKoCzsMkBfmLH3RRcoSxgMT/taSNqiZpVVzif7tJtXBuU= 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=dgVwxfOU; arc=none smtp.client-ip=209.85.216.74 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="dgVwxfOU" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-33bcb779733so2124745a91.3 for ; Fri, 24 Oct 2025 10:59:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328784; x=1761933584; 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=6yI70voK5e+ZzNgu0TYVzbazqhONpuqvIFoYlpIFjbk=; b=dgVwxfOU1JIuSrHesNEoYUsn8NO3yM5d5+JQVB36Cu7704m/DIhVMioSnScuiYyZxZ IFQO4s8Y5xaNufwJpK0E152xmIx3Auv8pUE9Nx+M6V6BGOwNj4LdkVlVxkO+38tRc48P nccHvgopjr4wFY/5VWLqoHNylgm5YbaJUZ0LKkep8DJGwR1Mh5IPcyyIUWa3zVHfIBmG h2BxdzyRanKYMhno+YCBDtaRQQEMy/+WYINYD/mpaGA6nhRMl0IAD7nlkG47VDxbslGC 6yVpdnH6qTHnNS74m+ur/yurQUqgdlYtb6y9CvqvkxT5SlYltDatRDXJ0D2wvCrZ3IWL RO8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328784; x=1761933584; 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=6yI70voK5e+ZzNgu0TYVzbazqhONpuqvIFoYlpIFjbk=; b=nrpswh5xMTRfmOs0ZL6ld9XxSHQiVcIkhv7ZoSEaXGL7YDO/7G81sv8978cRHAV+Lm AAC9I7elkaY2QoG/fthn+rO3QWPwjoLzLTNIAEUi7Azd2IIRU/qWBwCBF0mY7ofBK+7v Jrk2xkJfQaVIG6J7DNQalN9Mcejn8n21WDpqP888bCgkyXQyrZ+7YzwwX/BcChmTVRTl Ksj5IWRzAgvgsZrVsCii+Y2xSDb6oyjY9fIWfZDLqTZ3h0Tygt2ZeZByoBny8UDiXtkV vkPbg6XE/Q3fWwQA5QvrFokNZ/2pZ/ZRkbgah8V3kxxnfb5q/E2TObwwhMXc2oRJl/1w p7bg== X-Forwarded-Encrypted: i=1; AJvYcCUu9Q3mHqhdKtvGwwiEJ59K7nTXbSnpKPbp0Xd36Y49U3EL5VrECKGN7IL6cQ7bfGmbvVTRVcd/A02BsD0=@vger.kernel.org X-Gm-Message-State: AOJu0YygZC4IgW8ge/wl/2M6HByz26RtinmySRlTbj0/tEyRxmLCHVJJ BtzJCYDxvdLTvYiS+bmRUx5wjC5H0WnJVQVbhWzk5oOOZkghYrbvO2uwDIoiokQmGye75Eh1NR5 6o7y1GxJr0A== X-Google-Smtp-Source: AGHT+IG02mHYSHgon5GJSvJvSSO7TIhhkQ06xdgDu0aLXCVNpp4zfSMQGEXZc46bfivjxQnjSY9hFD96bbum X-Received: from pjblm10.prod.google.com ([2002:a17:90b:334a:b0:33d:ee1f:6fb7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:28c4:b0:327:c0c6:8829 with SMTP id 98e67ed59e1d1-33bcf8e4f50mr37235277a91.24.1761328784087; Fri, 24 Oct 2025 10:59:44 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:55 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-21-irogers@google.com> Subject: [PATCH v1 20/22] perf test stat: Update shadow test to use metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Previously '-e cycles,instructions' would implicitly create an IPC metric. This now has to be explicit with '-M insn_per_cycle'. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/stat+shadow_stat.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/tests/shell/stat+shadow_stat.sh b/tools/perf/tests/= shell/stat+shadow_stat.sh index 8824f445d343..cabbbf17c662 100755 --- a/tools/perf/tests/shell/stat+shadow_stat.sh +++ b/tools/perf/tests/shell/stat+shadow_stat.sh @@ -14,7 +14,7 @@ perf stat -a -e cycles sleep 1 2>&1 | grep -e cpu_core &&= exit 2 =20 test_global_aggr() { - perf stat -a --no-big-num -e cycles,instructions sleep 1 2>&1 | \ + perf stat -a --no-big-num -M insn_per_cycle sleep 1 2>&1 | \ grep -e cycles -e instructions | \ while read num evt _ ipc rest do @@ -53,7 +53,7 @@ test_global_aggr() =20 test_no_aggr() { - perf stat -a -A --no-big-num -e cycles,instructions sleep 1 2>&1 | \ + perf stat -a -A --no-big-num -M insn_per_cycle sleep 1 2>&1 | \ grep ^CPU | \ while read cpu num evt _ ipc rest do --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 259B934E759 for ; Fri, 24 Oct 2025 17:59:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328789; cv=none; b=lSx9z+OMqf+8mvfA3oAj7dJG2+s3f815HJkPims2Tir+X5n+UyHO9qwLkgiH1sfwlQnP/Wh4mMcPgZh95EC6p+i4FwZmFjD1rUR4SDf1b0dTK8Y5JACrokzYvUuZUrPN6u3HA0Je1UOhlOi5w34IDSyweTXmKsxBgQdqAycBHVQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328789; c=relaxed/simple; bh=q1O8hLkBKOlhvk1PqTzz9AoGYbVsRGA0an5mkJTkoys=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=lUToIs1YNjcaF4qYP4nuiSAJ1tMNsa5Thg2EFrwTO10R0+OAgifq94w1YexI3mHWdihQnZIHHYpSBhgB+XfmApO4PMt1bQyEXJLBu4N/L96ljVJe4adx8Xj2M4Z1QxjYsWGLRl4ein3Nq5q9WFeaNuR5g8SunBe/Ju8JyVvLrb4= 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=jtkJoI7I; arc=none smtp.client-ip=209.85.216.73 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="jtkJoI7I" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3324538ceb0so3500005a91.1 for ; Fri, 24 Oct 2025 10:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328786; x=1761933586; 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=JmyzXEiuEakA9tINxzGZRCYfGFH2n3X7HRR3W7fGH50=; b=jtkJoI7I7p/P6Q4D+f/Dis7rpvxBAJT2Ykr+4jhpUocsi6nwyQ3tP7jJaU/KdJo8Ua wlyOetOYn9h02TeCZZo2Tp4QFMGPh1ySdk2A7SBYU4en9dKjZKKJlvTsG2DKq48jiBXI ZAEYE1wQiW82Hcr8MpSQrz+V/F6/YiK9Q5QRlndOvMceifM4hXHHmVXIK4PSFb7q+Cu/ BaZCTrpFUY6sNq3XtULNFA7OHfa7RlcoAJwgIHz0xdX8NFXVI5a3G5uIQs5bKAABZb9v gtCdab0MiBPg+JQpB0RXIQfCKNbP8+Bd5VMu88fERR7Dcyguxar9MSyB1anV7Q9OP1bP CDsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328786; x=1761933586; 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=JmyzXEiuEakA9tINxzGZRCYfGFH2n3X7HRR3W7fGH50=; b=e5FmlwT9LqMNJlJJG0kXTzXwSxBi3zTLkfJRfY67vhof845zVj2yYo5vRIqQoWpbZV jNcjsuYJkpdg+fCn+Ij5GtX6i9hEl8APayerh8L5K2u7O9PmouCsuerbFjk6WBNk0THU LuAKjz+6mmqFHdXf6D39xoDVbwdxRI7iovCJJgTWg2woo3+wOOU0uiulAx7nk4NSZ9U7 uC6UENqGZ0ieeoSa/t1nWUcN9qFUPlLYpDYwbtVVCmxuUanKn2Y8G+/cuO2et/MlrkNc InQ7VYgHJ3UPBFoFrSx2Qs5pNiR3w9gOFFqj9KGe89BdLZ5Pm9NTgpXflImoGIdqgSf8 w0eg== X-Forwarded-Encrypted: i=1; AJvYcCX1YvB5W3m1wVW+thgjIGaNkRiLkyJ/ckGcPsJSNk8vWJrXfVARVq4WLbiKF6dT+AawiJBf7ca7wkkh5B0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyj8qk+tTOxaB12VYhQjqCfUmUg53y6vMgzs0EPDzZKTqe8rbDN Z48tCX8spmLXgRMcWdJ3SsjEbvtbyN7DsE/QIHnsB1lV/iszLm0eImQBguuIV5vsMkaWdQ+uPOu VKZkTg9qYGQ== X-Google-Smtp-Source: AGHT+IH3T1XEJnZO2R7yqtTin61a3Kd5JkyUZzfnB4kDi6C1ujwkEp7c2F6yvCfiEiGjcWhl+v0wQOEZtd3X X-Received: from pjbqn7.prod.google.com ([2002:a17:90b:3d47:b0:339:ee5f:ec32]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3d0e:b0:32b:c9c0:2a11 with SMTP id 98e67ed59e1d1-33bcf84e114mr40783160a91.4.1761328786458; Fri, 24 Oct 2025 10:59:46 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:56 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-22-irogers@google.com> Subject: [PATCH v1 21/22] perf test stat: Update test expectations and events From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" test_stat_record_report and test_stat_record_script used default output which triggers a bug when sending metrics. As this isn't relevant to the test switch to using named software events. Update the match in test_hybrid as the cycles event is now cpu-cycles to workaround potential ARM issues. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/stat.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh index 8a100a7f2dc1..985adc02749e 100755 --- a/tools/perf/tests/shell/stat.sh +++ b/tools/perf/tests/shell/stat.sh @@ -18,7 +18,7 @@ test_default_stat() { =20 test_stat_record_report() { echo "stat record and report test" - if ! perf stat record -o - true | perf stat report -i - 2>&1 | \ + if ! perf stat record -e task-clock -o - true | perf stat report -i - 2>= &1 | \ grep -E -q "Performance counter stats for 'pipe':" then echo "stat record and report test [Failed]" @@ -30,7 +30,7 @@ test_stat_record_report() { =20 test_stat_record_script() { echo "stat record and script test" - if ! perf stat record -o - true | perf script -i - 2>&1 | \ + if ! perf stat record -e task-clock -o - true | perf script -i - 2>&1 | \ grep -E -q "CPU[[:space:]]+THREAD[[:space:]]+VAL[[:space:]]+ENA[[:spac= e:]]+RUN[[:space:]]+TIME[[:space:]]+EVENT" then echo "stat record and script test [Failed]" @@ -196,7 +196,7 @@ test_hybrid() { fi =20 # Run default Perf stat - cycles_events=3D$(perf stat -- true 2>&1 | grep -E "/cycles/[uH]*| cycl= es[:uH]* " -c) + cycles_events=3D$(perf stat -a -- sleep 0.1 2>&1 | grep -E "/cpu-cycles/= [uH]*| cpu-cycles[:uH]* " -c) =20 # The expectation is that default output will have a cycles events on ea= ch # hybrid PMU. In situations with no cycles PMU events, like virtualized,= this --=20 2.51.1.821.gb6fe4d2222-goog From nobody Sat Feb 7 17:19:56 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 14A5C34EEF6 for ; Fri, 24 Oct 2025 17:59:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328790; cv=none; b=gmCA2GRfUu9hSj86U4ZmQpq17sQJEL5X+qupuOyCA6LPt3HKwBX21WUm7sA/wHsSOiiqTDd87VfHBlWaslJemKObrOGso2NmGXvI1WbUhXlSrKIjNQg8AZV/89L8Xf55UwNdWHEuBe0WilecCOIZ4ha+C2kSDzrMNxiatZDRIQ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761328790; c=relaxed/simple; bh=yAXsZhxvHyHEQLXos94jIHAJ3UZbjk6e3qIEtM58ctc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=P9npUTefogzmAADbTj4/BMAJCMBo2w0AwqXz6KzplaHe1unvfipfve9rGpTvRQm4vohOTcn5TpNYohYTB+WQVoG3vyq3xyBLieky7C7jq5davqAU9sC2lbYD+6OOIm35d+yMEaqk1VPUrStvYDU8RZimv7DeDy3tFHJH9soVA1g= 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=YRMTlaKD; arc=none smtp.client-ip=209.85.216.74 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="YRMTlaKD" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-33428befc08so5017383a91.2 for ; Fri, 24 Oct 2025 10:59:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1761328788; x=1761933588; 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=+GqPNh/zh5jE+hbuHQPcYDyfHhHCRzurjNcqVZkY2gg=; b=YRMTlaKDCXaJjZWE/GVULI7UW6UzTbOREPsR+ErTuoVR8Ch1gLLVGD6yqM2stBcI7E sYAXjcxPLL58ZhhP+YjsLmQJS4GKHvpk1XQTg/qGU/8qI4EnwV+1lPaUGUbuZMQKJ8KU tSluW4dIsIiQs5pdT7SVpPczyfLMM9ovFL/051Rl4kthfiXKRn740b6myXGaTNdFkB+F 0Zd1YBv5WWV2SVBYI0DqKYtydMWJeFWKeQsavTD3+chmo06FDlwmnZZG70a/Qj/5mfej QVcy3fiFDZbRZ9k336PclyqSNnKof1rG+lXM/t8SAkr3SsMx2YH/gT3HWb/zUFqNDNdC vJlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761328788; x=1761933588; 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=+GqPNh/zh5jE+hbuHQPcYDyfHhHCRzurjNcqVZkY2gg=; b=XzX2w5+8gIy8plzbW66NkmTgRatnc/Lb2f+gFNj0uG/5x1wyvnUtusR6/CE7KwJHgY HuGTRLUiEnBRR5I+7En55+QURsvK4iAsg1olqkJSV+LaxAqMvtki9CpjMkvDVYIW47vz pfhGnlDh03YF0XScz4ofU33oth/TYQOkXpvZPBFyus7YTVSAGBzhhs1SltoZXkp/FuP9 0OIyHgaeyE6b+rRdL3RycoTcyPCEH3kmPWzYc/RjDVrVO6jtLxUhNthfZHK98CF2yRrD FZTCYm0KeghT4ws1FNzqQUSG2NlQ3WG1gu4OGn8+XVURPNioT3ViacZf8C/s+v2afQxG 9mXA== X-Forwarded-Encrypted: i=1; AJvYcCWZTjD0q/jAGlebkaOflwp0I+t+VxIw5zokpOAMiMSXP1ZnjBFceoN+04dwlyrJyWLCoQpAZ237qAInTv8=@vger.kernel.org X-Gm-Message-State: AOJu0YzvL7WzEOfpVHinvf9k7Jc0POMhd9VBMan7YXaDgFEXlPj3xb7l ySKnHYf+OejbvtK1cyPvpo2ETzsvIp5jLIpAGujlFgUO6l4nChjTN5kDFF68dF6FYRWJKbZKcja 89BqLQE8aqA== X-Google-Smtp-Source: AGHT+IGI97mAtuqdO6OgV7iYK43SUTMj0/LhdECvBdjMp+FRWjR96CthVK9UYiaa2g7HS9K9cguw9qEme2CU X-Received: from pjbmd3.prod.google.com ([2002:a17:90b:23c3:b0:32b:35fb:187f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:d60f:b0:329:ed5b:ecd5 with SMTP id 98e67ed59e1d1-33bcf8eb21fmr38489811a91.19.1761328788381; Fri, 24 Oct 2025 10:59:48 -0700 (PDT) Date: Fri, 24 Oct 2025 10:58:57 -0700 In-Reply-To: <20251024175857.808401-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: <20251024175857.808401-1-irogers@google.com> X-Mailer: git-send-email 2.51.1.821.gb6fe4d2222-goog Message-ID: <20251024175857.808401-23-irogers@google.com> Subject: [PATCH v1 22/22] perf test stat csv: Update test expectations and events From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Xu Yang , Chun-Tse Shao , Thomas Richter , Sumanth Korikkar , Collin Funk , Thomas Falcon , Howard Chu , Dapeng Mi , Levi Yun , Yang Li , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Explicitly use a metric rather than implicitly expecting '-e instructions,cycles' to produce a metric. Use a metric with software events to make it more compatible. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/lib/stat_output.sh | 2 +- tools/perf/tests/shell/stat+csv_output.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/tests/shell/lib/stat_output.sh b/tools/perf/tests/s= hell/lib/stat_output.sh index c2ec7881ec1d..3c36e80fe422 100644 --- a/tools/perf/tests/shell/lib/stat_output.sh +++ b/tools/perf/tests/shell/lib/stat_output.sh @@ -156,7 +156,7 @@ check_metric_only() echo "[Skip] CPU-measurement counter facility not installed" return fi - perf stat --metric-only $2 -e instructions,cycles true + perf stat --metric-only $2 -M page_faults_per_second true commachecker --metric-only echo "[Success]" } diff --git a/tools/perf/tests/shell/stat+csv_output.sh b/tools/perf/tests/s= hell/stat+csv_output.sh index 7a6f6e177402..cd6fff597091 100755 --- a/tools/perf/tests/shell/stat+csv_output.sh +++ b/tools/perf/tests/shell/stat+csv_output.sh @@ -44,7 +44,7 @@ function commachecker() ;; "--per-die") exp=3D8 ;; "--per-cluster") exp=3D8 ;; "--per-cache") exp=3D8 - ;; "--metric-only") exp=3D2 + ;; "--metric-only") exp=3D1 esac =20 while read line --=20 2.51.1.821.gb6fe4d2222-goog