From patchwork Tue Feb 27 22:34:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Agustin Vega-Frias X-Patchwork-Id: 10246281 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E86B360208 for ; Tue, 27 Feb 2018 22:44:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D480C289E8 for ; Tue, 27 Feb 2018 22:44:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C70C928AF2; Tue, 27 Feb 2018 22:44:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1C6CD289E8 for ; Tue, 27 Feb 2018 22:44:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=SWUbgITmZbHefI1O12fe7clYXuUZehPC1m4K673Q/N0=; b=QIrKROiqqTti9yPR8BP0B4OjSm hB2S7avf5JpHw5P/1DukPk4Wpx/Isek3uHuVwjfAHzVt8FTr+ig1HaopVrukuro+LkF3j85mRXJvM BeRnt5IaduqbQbp0M7ik/edbMIiI8dbet/7nquJAWHmgZf8mQdAhPqnvXubMfcoqHgfc8/U+c4U3+ 7/6WGRj0srX+gK/nEMCu8ADmz9RthgMYCatu6MN/QTKTz6blPqXaxsXqH40Hx4EZprJdpUaFkUhNl 5jVGiPOzsFvlO8tY2SpvCAlmm0mzyD4yinHmsSyahoyVW/6FrmyxXB2i0qT/GSWfZXbOfeq6xXOOu geW8zMeg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eqnzB-0006il-TP; Tue, 27 Feb 2018 22:44:37 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eqnyQ-000631-An for linux-arm-kernel@bombadil.infradead.org; Tue, 27 Feb 2018 22:43:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=3dYBMmc1BbM4cg7UAHFzk9Z94D1/MAyyJwIV7ymS5pY=; b=J+OBAcN+hJDbh9VHsQ0pWAiZD lAcydBZLTupbwBMOMMh7WyJJHTnwuJ6WU8tfCuQ2UZ/iGus6t90Q2Gw/LSQH0Rgsx+DiQkE/pnlNT sKgYNrxqjA5SEDk20bIUCC0grvW4+CwzmViyuzyIUi8TpBp5JStKy4H+e7R0RXscaPTwMpiDxfK1S RESE5eWwbfmR7BfRV8jicyr4lJaxx/y8vTmtWjXhRX+YhtFBGUS6O1WdOb7itRzkwxhR8TLXBSpIi pq3saPHHy21i2dhEehCY7rzRv7nv05+D/SJe8Pado11Z3h61oT2xZCDZOQeJd2ZIRJmTXmQEIEqh+ aT2jJxiLg==; Received: from smtp.codeaurora.org ([198.145.29.96]) by casper.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eqnq9-0008Cg-L4 for linux-arm-kernel@lists.infradead.org; Tue, 27 Feb 2018 22:35:22 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id EA8E060F94; Tue, 27 Feb 2018 22:35:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1519770914; bh=PvGwkA4n4lJZGZrzUokCofz1CmePbgPeNfdFmNUJ1oA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AmPlNiemDofaY4xvHQBxKu2cAjgbbfAgqDN52g8Ez/8HAwjHLV37ebTw2EE9NqQRM sYa19tZWf3DLmZ3u9EJK8Jir8BYYeF288Ri6vg89jS15KGhaYCdFf9m+WCULmkCXmd +wVgKaq27KpYv8Kz+2rXDmNn6TZ/Hh0P5t41pT+o= Received: from azshara.qualcomm.com (global_nat1_iad_fw.qualcomm.com [129.46.232.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: agustinv@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 54B7060849; Tue, 27 Feb 2018 22:35:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1519770913; bh=PvGwkA4n4lJZGZrzUokCofz1CmePbgPeNfdFmNUJ1oA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cIRM/opQ+XMiRAjOJZPJUHfZLQMWjsyG4JOtOVnLMJTod564os+raE5tJ853vSdKs /bC7zEl3X4zBEGyTQ1XFqKQP7sr8fQuGSZFef9ZUVl01C8+50rw+3K++UdZAcHvGFN 2NLj60Uib/hN5ucAPbpQgPXJKP74CMpJu0pZyxpY= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 54B7060849 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=agustinv@codeaurora.org From: Agustin Vega-Frias To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Andi Kleen , Alexander Shishkin , Jiri Olsa , Namhyung Kim Subject: [RFC 2/3] perf, tools: Display pmu name when printing unmerged events in stat Date: Tue, 27 Feb 2018 17:34:07 -0500 Message-Id: <1519770848-26738-3-git-send-email-agustinv@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1519770848-26738-1-git-send-email-agustinv@codeaurora.org> References: <1519770848-26738-1-git-send-email-agustinv@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180227_223517_949606_C1189B5F X-CRM114-Status: GOOD ( 22.00 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: timur@codeaurora.org, agustinv@codeaurora.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Starting on v4.12 event parsing code for dynamic pmu events supports prefix-based matching of multiple pmus when creating dynamic events. E.g., in a system with the following dynamic pmus: l3cache_0_0 l3cache_0_1 l3cache_0_2 l3cache_0_3 passing l3cache// as an event spec will result in the creation of the event in all of the pmus. When this functionality is used in stat the command will by default merge the event counts and display a single value. E.g.: ./perf stat -a -e l3cache/read-miss/ ls > /dev/null Performance counter stats for 'system wide': 328 l3cache/read-miss/ 0.001661809 seconds time elapsed JSON-based alias events behave in the same way: $ ./perf stat -a -e l3cache_read_miss ls > /dev/null Performance counter stats for 'system wide': 229 l3cache_read_miss 0.001656099 seconds time elapsed This behavior can be disabled by the --no-merge option but the real pmu name is lost and it's not possible to see which count corresponds to which pmu: $ ./perf stat -a -e l3cache/read-miss/ --no-merge ls > /dev/null Performance counter stats for 'system wide': 67 l3cache/read-miss/ 67 l3cache/read-miss/ 63 l3cache/read-miss/ 60 l3cache/read-miss/ 0.001675706 seconds time elapsed This is also the case for alias events, e.g.: $ ./perf stat -a -e l3cache_read_miss --no-merge ls > /dev/null Performance counter stats for 'system wide': 12 l3cache_read_miss 17 l3cache_read_miss 10 l3cache_read_miss 8 l3cache_read_miss 0.001661305 seconds time elapsed This change adds the original pmu name to the event. For dynamic pmu events the pmu name is restored in the event name: $ ./perf stat -a -e l3cache/read-miss/ --no-merge ls > /dev/null Performance counter stats for 'system wide': 63 l3cache_0_3/read-miss/ 74 l3cache_0_1/read-miss/ 64 l3cache_0_2/read-miss/ 74 l3cache_0_0/read-miss/ 0.001675706 seconds time elapsed For alias events the name is added after the event name: $ ./perf stat -a -e l3cache_read_miss --no-merge ls > /dev/null Performance counter stats for 'system wide': 10 l3cache_read_miss [l3cache_0_3] 12 l3cache_read_miss [l3cache_0_1] 10 l3cache_read_miss [l3cache_0_2] 17 l3cache_read_miss [l3cache_0_0] 0.001661305 seconds time elapsed Signed-off-by: Agustin Vega-Frias --- tools/perf/builtin-stat.c | 29 ++++++++++++++++++++++++++++- tools/perf/util/evsel.c | 1 + tools/perf/util/evsel.h | 1 + tools/perf/util/parse-events.c | 8 +++++++- 4 files changed, 37 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 98bf9d3..d196972 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1225,6 +1225,31 @@ static void aggr_update_shadow(void) } } +static void uniquify_event_name(struct perf_evsel *counter) +{ + char *new_name; + char *config; + + if (!counter->pmu_name || !strncmp(counter->name, counter->pmu_name, + strlen(counter->pmu_name))) + return; + + config = strchr(counter->name, '/'); + if (config) { + if (asprintf(&new_name, + "%s%s", counter->pmu_name, config) > 0) { + free(counter->name); + counter->name = new_name; + } + } else { + if (asprintf(&new_name, + "%s [%s]", counter->name, counter->pmu_name) > 0) { + free(counter->name); + counter->name = new_name; + } + } +} + static void collect_all_aliases(struct perf_evsel *counter, void (*cb)(struct perf_evsel *counter, void *data, bool first), @@ -1253,7 +1278,9 @@ static bool collect_data(struct perf_evsel *counter, if (counter->merged_stat) return false; cb(counter, data, true); - if (!no_merge && counter->auto_merge_stats) + if (no_merge) + uniquify_event_name(counter); + else if (counter->auto_merge_stats) collect_all_aliases(counter, cb, data); return true; } diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ef35168..4841000 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -244,6 +244,7 @@ void perf_evsel__init(struct perf_evsel *evsel, evsel->metric_name = NULL; evsel->metric_events = NULL; evsel->collect_stat = false; + evsel->pmu_name = NULL; } struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index a7487c6..c2ac16a 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -142,6 +142,7 @@ struct perf_evsel { struct perf_evsel **metric_events; bool collect_stat; bool weak_group; + const char *pmu_name; }; union u64_swap { diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 34589c4..bafc91e 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1247,7 +1247,12 @@ static int __parse_events_add_pmu(struct parse_events_state *parse_state, if (!head_config) { attr.type = pmu->type; evsel = __add_event(list, &parse_state->idx, &attr, NULL, pmu, NULL, auto_merge_stats); - return evsel ? 0 : -ENOMEM; + if (evsel) { + evsel->pmu_name = name; + return 0; + } else { + return -ENOMEM; + } } if (perf_pmu__check_alias(pmu, head_config, &info)) @@ -1276,6 +1281,7 @@ static int __parse_events_add_pmu(struct parse_events_state *parse_state, evsel->snapshot = info.snapshot; evsel->metric_expr = info.metric_expr; evsel->metric_name = info.metric_name; + evsel->pmu_name = name; } return evsel ? 0 : -ENOMEM;