Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1768982ybl; Sat, 11 Jan 2020 02:26:42 -0800 (PST) X-Google-Smtp-Source: APXvYqxMohACUCmnU2NuL/pDJYSBzagLx7ulh9bU2AeF/ef7mrldZavIZxTftnjWk9VYkwc4JVsY X-Received: by 2002:a9d:5885:: with SMTP id x5mr6183867otg.132.1578738402000; Sat, 11 Jan 2020 02:26:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578738401; cv=none; d=google.com; s=arc-20160816; b=VOS21kY6TXALaM3eu3b1IIxOe9eBzNxbaPGPfeQ6v+zrx9PNYilLgKpCORBHSufcla xqKVknHPGb9q7AllpOVolWbspc2Qx19Mp9Ab38J7bOBXMrzazhoLo9ZMRnYfruADPmNg TTwoln8mCtKeaFo6HPR3fzi+wZCp+DxoeF7c3gUAVjMQzjabk4ZFxOOWwd6UjqDO9uks 4hNGxl2k53LuU+ivqVOdcHlxSTgj2nECJfRWqoox5NTtcIl511+pbaw02oiKV7UQvx5N 64IfddojAbqj4lsMU+0urv7c74uIBwgbnDTO5wGJUUpfNlJR2j/PzHuQwPkPiKvukYFi 1tXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=9sPC9h7pAE+12X0ZnVHiK9zTDhGRHuDpm9aVki4n63c=; b=KXVRzeKCZUD1VPFmgBIyDeWyhmn3Pag2ly+zF2GKr4mgK03Xe8xIPTwQkw6O43hb4o RY69bxfHPLZ0cnZ6j4i5vMtXwaUiQ6gi4kZ5UqUEmQNSxzPuVTiG6p+GRBxh2wu26Ias Lu3zR8r1pVFmyu8GaSF2KaiPH5dit4X1FtRlV7S6b2xfWxqDQGJ9DztU47MwCGU/zuTr P4Qbk9ZvqiEXFB022XCK0G+CBr6SMI+YtdPMsNAdoUzCyeIT1ssYGN7fKAgB5fci+DV2 exCVnLPxEELgrfetUk5EFtTV33TNQIpgK27NHXoPJ7fQ+zN3YFQc/LxBJzwMgRXqJIrw 1qVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=W93qfeUv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 10si2752633ois.76.2020.01.11.02.26.30; Sat, 11 Jan 2020 02:26:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=W93qfeUv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729303AbgAKKZ0 (ORCPT + 99 others); Sat, 11 Jan 2020 05:25:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:55990 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729441AbgAKKZW (ORCPT ); Sat, 11 Jan 2020 05:25:22 -0500 Received: from localhost (unknown [62.119.166.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 753BE205F4; Sat, 11 Jan 2020 10:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578738320; bh=sldSkO1ZDdvT4JmhXAeCYgpRfznRSyIKMRuGQ4NGc0w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W93qfeUva1z+VeJ8sIsFi0UiF3FQVYBMh/TpO6qdMEA0tkm1kRaITYKGA2LS2zFm7 lt8GP3K5ncciJ/+BmJE2xocLrP8Ba0+d2dA7z0mTJxhibstqEAcHuOYO+9qdyDC6K2 uQtINfrRhTtb1rUW1E2YmnAvIX+oUlXfd04OZYEo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kajol Jain , Ravi Bangoria , Arnaldo Carvalho de Melo , Alexander Shishkin , Andi Kleen , Anju T Sudhakar , Jin Yao , Jiri Olsa , Kan Liang , Madhavan Srinivasan , Peter Zijlstra , Sasha Levin Subject: [PATCH 5.4 056/165] perf metricgroup: Fix printing event names of metric group with multiple events Date: Sat, 11 Jan 2020 10:49:35 +0100 Message-Id: <20200111094925.944708753@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200111094921.347491861@linuxfoundation.org> References: <20200111094921.347491861@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kajol Jain [ Upstream commit eb573e746b9d4f0921dcb2449be3df41dae3caea ] Commit f01642e4912b ("perf metricgroup: Support multiple events for metricgroup") introduced support for multiple events in a metric group. But with the current upstream, metric events names are not printed properly In power9 platform: command:# ./perf stat --metric-only -M translation -C 0 -I 1000 sleep 2 1.000208486 2.000368863 2.001400558 Similarly in skylake platform: command:./perf stat --metric-only -M Power -I 1000 1.000579994 2.002189493 With current upstream version, issue is with event name comparison logic in find_evsel_group(). Current logic is to compare events belonging to a metric group to the events in perf_evlist. Since the break statement is missing in the loop used for comparison between metric group and perf_evlist events, the loop continues to execute even after getting a pattern match, and end up in discarding the matches. Incase of single metric event belongs to metric group, its working fine, because in case of single event once it compare all events it reaches to end of perf_evlist. Example for single metric event in power9 platform: command:# ./perf stat --metric-only -M branches_per_inst -I 1000 sleep 1 1.000094653 0.2 1.001337059 0.0 This patch fixes the issue by making sure once we found all events belongs to that metric event matched in find_evsel_group(), we successfully break from that loop by adding corresponding condition. With this patch: In power9 platform: command:# ./perf stat --metric-only -M translation -C 0 -I 1000 sleep 2 result:# time derat_4k_miss_rate_percent derat_4k_miss_ratio derat_miss_ratio derat_64k_miss_rate_percent derat_64k_miss_ratio dslb_miss_rate_percent islb_miss_rate_percent 1.000135672 0.0 0.3 1.0 0.0 0.2 0.0 0.0 2.000380617 0.0 0.0 0.0 0.0 0.0 0.0 0.0 command:# ./perf stat --metric-only -M Power -I 1000 Similarly in skylake platform: result:# time Turbo_Utilization C3_Core_Residency C6_Core_Residency C7_Core_Residency C2_Pkg_Residency C3_Pkg_Residency C6_Pkg_Residency C7_Pkg_Residency 1.000563580 0.3 0.0 2.6 44.2 21.9 0.0 0.0 0.0 2.002235027 0.4 0.0 2.7 43.0 20.7 0.0 0.0 0.0 Committer testing: Before: [root@seventh ~]# perf stat --metric-only -M Power -I 1000 # time 1.000383223 2.001168182 3.001968545 4.002741200 5.003442022 ^C 5.777687244 [root@seventh ~]# After the patch: [root@seventh ~]# perf stat --metric-only -M Power -I 1000 # time Turbo_Utilization C3_Core_Residency C6_Core_Residency C7_Core_Residency C2_Pkg_Residency C3_Pkg_Residency C6_Pkg_Residency C7_Pkg_Residency 1.000406577 0.4 0.1 1.4 97.0 0.0 0.0 0.0 0.0 2.001481572 0.3 0.0 0.6 97.9 0.0 0.0 0.0 0.0 3.002332585 0.2 0.0 1.0 97.5 0.0 0.0 0.0 0.0 4.003196624 0.2 0.0 0.3 98.6 0.0 0.0 0.0 0.0 5.004063851 0.3 0.0 0.7 97.7 0.0 0.0 0.0 0.0 ^C 5.471260276 0.2 0.0 0.5 49.3 0.0 0.0 0.0 0.0 [root@seventh ~]# [root@seventh ~]# dmesg | grep -i skylake [ 0.187807] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver. [root@seventh ~]# Fixes: f01642e4912b ("perf metricgroup: Support multiple events for metricgroup") Signed-off-by: Kajol Jain Reviewed-by: Ravi Bangoria Tested-by: Arnaldo Carvalho de Melo Cc: Alexander Shishkin Cc: Andi Kleen Cc: Anju T Sudhakar Cc: Jin Yao Cc: Jiri Olsa Cc: Kan Liang Cc: Madhavan Srinivasan Cc: Peter Zijlstra Link: http://lore.kernel.org/lkml/20191120084059.24458-1-kjain@linux.ibm.com Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/perf/util/metricgroup.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index a7c0424dbda3..940a6e7a6854 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -103,8 +103,11 @@ static struct evsel *find_evsel_group(struct evlist *perf_evlist, if (!strcmp(ev->name, ids[i])) { if (!metric_events[i]) metric_events[i] = ev; + i++; + if (i == idnum) + break; } else { - if (++i == idnum) { + if (i + 1 == idnum) { /* Discard the whole match and start again */ i = 0; memset(metric_events, 0, @@ -124,7 +127,7 @@ static struct evsel *find_evsel_group(struct evlist *perf_evlist, } } - if (i != idnum - 1) { + if (i != idnum) { /* Not whole match */ return NULL; } -- 2.20.1