From patchwork Tue Jan 24 06:33:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 13113556 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DD3EEC54EAA for ; Tue, 24 Jan 2023 06:34:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Mime-Version: Message-Id:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=23AAzSMjy7rhDuvK0sTfE/BfBf7Dqghv/qwfZLg/nH0=; b=gfF tqgi6gESIcvQgdfVJnOqioKwv4Rk+qRQduG2mtHRg0AQ1+yzdj1N+VV1WNFmEXUjtXd79VAZlkLrz LIEg6eXu9NXlQmSWAV1/BgDk8B950PfUqa2epVgVlbZSPe1nQvdEZUgVjCYt9G2AXIuhYrswbC98G WpXds/n3fOsewFnz3zm1ucHotSthOQX/xtg0Kub5bn1nXXK3CrGD+PPfBtYDG5qaJRbonsk7vZDCc pxvC23Q55TM69LikHhCSEUhHRj1S0e3TiRpiJTkTixj/7YaneODRK5b1RzfNICq2QPgzhE88Sq/ZM +Ou4WYwj80RCzetqIg4O9Xr6EkDhfvg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pKCsC-002VwO-Kz; Tue, 24 Jan 2023 06:33:36 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pKCs8-002Vvq-SG for linux-arm-kernel@lists.infradead.org; Tue, 24 Jan 2023 06:33:34 +0000 Received: by mail-yb1-xb49.google.com with SMTP id r15-20020a25ac4f000000b0080b78270db5so31058ybd.15 for ; Mon, 23 Jan 2023 22:33:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:from:subject:mime-version :message-id:date:from:to:cc:subject:date:message-id:reply-to; bh=lpj7Gdq7/2eqEdmcuGjQXxSe+BaC4YXzCOgMtim3MVs=; b=tXOi4G6TIWCid2GBDv+YeETXTAsaF4mBtTaPtRfyt/TbjLKL/UPUhpNk2BcdiTr5U2 3WPe0PB0sCkyuxeWl4+B5tIdi3M1JFR1MiC/U223rq6v1cAoDTjYeMlSV8C2lq3vwDZc X2yeHiKuhHwc7ZtN9aXZz9yFCT2VmfmJLXliza90e3eSMqC/EOGcNnmh6Rj3kWCf0+Ql YmJbkRnS19W6jj+MIExyxpX/RFceUYwHlwy03ZquvmroV58Xc3AT/MIagO+sa2+oko2+ 9KK150BmMLgN+/fWwhQVxjmpaQGQPV2lNtwiGbxNH6/fIirQl3UIZuatXu2OWEx8zQ5u Tdkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:from:subject:mime-version :message-id:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=lpj7Gdq7/2eqEdmcuGjQXxSe+BaC4YXzCOgMtim3MVs=; b=N7EgKhkrNu7GUv8eGw7baqp1NaYb4mXGp2cKZtaUhasgYNHPWwtI+Mv3HFNYtUDUhv txfQQTYKfEEpjdotsv0PAk8JKUvtVSXFzQLpHCAY4S4zjdWnftRSqFTG4VFZdKpaemco yfe6AMY46xKorc7PvqpFXi9hr4wJHkGuXOiQkibRWW6HjYArV7+oT8SaarmiIRmMN4z/ 8XRvczGqTErE7LEwZppA21hk+7+tIZxBNNgB+4vsBp0X/4IfI+0xpziSFN9jT4wsEzO0 iE1HSasy2FKW6qUV6G6gPlVpDzwg8fOA/6mPKFW9NbHTCGdXrcr4ytQH19zKf8KB+0I2 4sAw== X-Gm-Message-State: AFqh2kpCyHKOQ20aQLbQC+mqV3oCse2AHyK8+DZfS8Qzs20AWRc2R6bw zAcZjF1HupqrKzv1wPK1RDSYU2AAwKLn X-Google-Smtp-Source: AMrXdXv13hLeAIA1WIgftB2H2vtNjrNkmtRb40sCD+NeaSnu57nxATPzQOuxff7hq6heFp8rc1homLdk785L X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:460d:1b4a:acb8:ae9a]) (user=irogers job=sendgmr) by 2002:a81:1191:0:b0:4ff:9c9b:aa0c with SMTP id 139-20020a811191000000b004ff9c9baa0cmr1615712ywr.477.1674542010760; Mon, 23 Jan 2023 22:33:30 -0800 (PST) Date: Mon, 23 Jan 2023 22:33:09 -0800 Message-Id: <20230124063320.668917-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.39.0.246.g2a6d74b583-goog Subject: [PATCH v3 00/11] jevents/pmu-events improvements From: Ian Rogers To: John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Kan Liang , Kim Phillips , Florian Fischer , Ravi Bangoria , Xing Zhengjun , Rob Herring , Kang Minchul , linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Sandipan Das , Jing Zhang , linuxppc-dev@lists.ozlabs.org, Kajol Jain Cc: Stephane Eranian , Perry Taylor , Caleb Biggers , Ian Rogers X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230123_223332_937430_94E2ED5B X-CRM114-Status: GOOD ( 16.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add an optimization to jevents using the metric code, rewrite metrics in terms of each other in order to minimize size and improve readability. For example, on Power8 other_stall_cpi is rewritten from: "PM_CMPLU_STALL / PM_RUN_INST_CMPL - PM_CMPLU_STALL_BRU_CRU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_FXU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_VSU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_LSU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_NTCG_FLUSH / PM_RUN_INST_CMPL - PM_CMPLU_STALL_NO_NTF / PM_RUN_INST_CMPL" to: "stall_cpi - bru_cru_stall_cpi - fxu_stall_cpi - vsu_stall_cpi - lsu_stall_cpi - ntcg_flush_cpi - no_ntf_stall_cpi" Which more closely matches the definition on Power9. A limitation of the substitutions are that they depend on strict equality and the shape of the tree. This means that for "a + b + c" then a substitution of "a + b" will succeed while "b + c" will fail (the LHS for "+ c" is "a + b" not just "b"). Separate out the events and metrics in the pmu-events tables saving 14.8% in the table size while making it that metrics no longer need to iterate over all events and vice versa. These changes remove evsel's direct metric support as the pmu_event no longer has a metric to populate it. This is a minor issue as the code wasn't working properly, metrics for this are rare and can still be properly ran using '-M'. Add an ability to just build certain models into the jevents generated pmu-metrics.c code. This functionality is appropriate for operating systems like ChromeOS, that aim to minimize binary size and know all the target CPU models. v3. Rebase an incorporate review comments from John Garry , in particular breaking apart patch 4 into 3 patches. The no jevents breakage and then later fix is avoided in this series too. v2. Rebase. Modify the code that skips rewriting a metric with the same name with itself, to make the name check case insensitive. Ian Rogers (11): perf jevents metric: Correct Function equality perf jevents metric: Add ability to rewrite metrics in terms of others perf jevents: Rewrite metrics in the same file with each other perf pmu-events: Add separate metric from pmu_event perf pmu-events: Separate the metrics from events for no jevents perf pmu-events: Remove now unused event and metric variables perf stat: Remove evsel metric_name/expr perf jevents: Combine table prefix and suffix writing perf pmu-events: Introduce pmu_metrics_table perf jevents: Generate metrics and events as separate tables perf jevents: Add model list option tools/perf/arch/arm64/util/pmu.c | 11 +- tools/perf/arch/powerpc/util/header.c | 4 +- tools/perf/builtin-list.c | 20 +- tools/perf/builtin-stat.c | 1 - tools/perf/pmu-events/Build | 3 +- tools/perf/pmu-events/empty-pmu-events.c | 108 ++++++- tools/perf/pmu-events/jevents.py | 350 +++++++++++++++++++---- tools/perf/pmu-events/metric.py | 79 ++++- tools/perf/pmu-events/metric_test.py | 10 + tools/perf/pmu-events/pmu-events.h | 26 +- tools/perf/tests/expand-cgroup.c | 4 +- tools/perf/tests/parse-metric.c | 4 +- tools/perf/tests/pmu-events.c | 68 ++--- tools/perf/util/cgroup.c | 1 - tools/perf/util/evsel.c | 2 - tools/perf/util/evsel.h | 2 - tools/perf/util/metricgroup.c | 203 +++++++------ tools/perf/util/metricgroup.h | 4 +- tools/perf/util/parse-events.c | 2 - tools/perf/util/pmu.c | 44 +-- tools/perf/util/pmu.h | 10 +- tools/perf/util/print-events.c | 32 +-- tools/perf/util/print-events.h | 3 +- tools/perf/util/python.c | 7 - tools/perf/util/stat-shadow.c | 112 -------- tools/perf/util/stat.h | 1 - 26 files changed, 650 insertions(+), 461 deletions(-)