From nobody Sat Feb 7 15:11:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 079DD28E0F; Mon, 8 Jul 2024 07:40:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424442; cv=none; b=rzBxRP+KI8nnbNTwtViL1+25o8F1SVcYPOOUQJr9CWGCOuaXKWefAGmjed3wPW5Z7ypyP+YZWMjPcujAA8bwTGnj0dkqciZn4zK35urBaSAbcCn3XaI7L/SMOOmw54YaiOoL4cHURkkrIo9fEts+3ToDDCcFQScBMqOroz6rpgo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424442; c=relaxed/simple; bh=Jf9uNwduiPkFyLlEt8F+nEZMiB61bDwWBttgmoIpVdc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=udjUaSVZ8vr9VBBYt/M5pMEqgCOefYO1XaaqBlX5kn6Wg2K+f2hQj+3IwCNzbich4PZWwAwTNySFODwHPHraxCeUo9fp2UdBgId+70ALbAkkda8EgQElraOy4uWWJXAOBPmYerAxU3Bvc+GEgJ2OV5aQa8IUJpZj2WemQb9NH9w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=fPA+Dfzj; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fPA+Dfzj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720424441; x=1751960441; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Jf9uNwduiPkFyLlEt8F+nEZMiB61bDwWBttgmoIpVdc=; b=fPA+Dfzj3nwXziJKvEbIm8cCJQsmTFAGkG++Po56Agtkp0OAFd1sZAXX pRTKnvQ8oU72D4SdodqcM24fdFY7u9dhONAhBCF9TH+1hsZ4Nnb/T/W63 sFdlUITxSJmkt9ojb1eJH/BK0KiFkndxZt3IIGFzi68QPv2jMND0enaUc jWWQ44PqPxaXbDHH4kM27F6K6UiARJUo9TTewVrqqN6b2BdRBiCL8nkOU KZ/kfJg1TPtTbs+Kj9KPI2za+zu1yS7Pvueuqz06AHVCDvgmHJJ60EqDB /aEQinp2tmG+uYLnqYPe8He2vWJk81nLZ5DXhDLrFv2akTMJL/TvJNfJb Q==; X-CSE-ConnectionGUID: Tm1Wc7erTUu24QhWypNMSw== X-CSE-MsgGUID: 9g3bnN7WTnm1wL59ggBT8g== X-IronPort-AV: E=McAfee;i="6700,10204,11126"; a="17819213" X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="17819213" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2024 00:40:41 -0700 X-CSE-ConnectionGUID: of7PyLS0QTaXWjv1znmftA== X-CSE-MsgGUID: SrxYT8R0TBSooUaj+1MsUQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="51774081" Received: from emr.sh.intel.com ([10.112.229.56]) by fmviesa003.fm.intel.com with ESMTP; 08 Jul 2024 00:40:37 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Yongwei Ma , Dapeng Mi , Dapeng Mi Subject: [Patch v2 1/5] perf x86/topdown: Complete topdown slots/metrics events check Date: Mon, 8 Jul 2024 14:42:00 +0000 Message-Id: <20240708144204.839486-2-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> References: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It's not complete to check whether an event is a topdown slots or topdown metrics event by only comparing the event name since user may assign the event by RAW format, e.g. perf stat -e '{instructions,cpu/r400/,cpu/r8300/}' sleep 1 Performance counter stats for 'sleep 1': instructions cpu/r400/ cpu/r8300/ 1.002917796 seconds time elapsed 0.002955000 seconds user 0.000000000 seconds sys The RAW format slots and topdown-be-bound events are not recognized and not regroup the events, and eventually cause error. Thus add two helpers arch_is_topdown_slots()/arch_is_topdown_metrics() to detect whether an event is topdown slots/metrics event by comparing the event config directly, and use these two helpers to replace the original event name comparisons. Signed-off-by: Dapeng Mi --- tools/perf/arch/x86/util/evlist.c | 8 +++--- tools/perf/arch/x86/util/evsel.c | 3 ++- tools/perf/arch/x86/util/topdown.c | 43 +++++++++++++++++++++++++++++- tools/perf/arch/x86/util/topdown.h | 2 ++ 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/tools/perf/arch/x86/util/evlist.c b/tools/perf/arch/x86/util/e= vlist.c index b1ce0c52d88d..332e8907f43e 100644 --- a/tools/perf/arch/x86/util/evlist.c +++ b/tools/perf/arch/x86/util/evlist.c @@ -78,14 +78,14 @@ int arch_evlist__cmp(const struct evsel *lhs, const str= uct evsel *rhs) if (topdown_sys_has_perf_metrics() && (arch_evsel__must_be_in_group(lhs) || arch_evsel__must_be_in_group(rh= s))) { /* Ensure the topdown slots comes first. */ - if (strcasestr(lhs->name, "slots") && !strcasestr(lhs->name, "uops_retir= ed.slots")) + if (arch_is_topdown_slots(lhs)) return -1; - if (strcasestr(rhs->name, "slots") && !strcasestr(rhs->name, "uops_retir= ed.slots")) + if (arch_is_topdown_slots(rhs)) return 1; /* Followed by topdown events. */ - if (strcasestr(lhs->name, "topdown") && !strcasestr(rhs->name, "topdown"= )) + if (arch_is_topdown_metrics(lhs) && !arch_is_topdown_metrics(rhs)) return -1; - if (!strcasestr(lhs->name, "topdown") && strcasestr(rhs->name, "topdown"= )) + if (!arch_is_topdown_metrics(lhs) && arch_is_topdown_metrics(rhs)) return 1; } =20 diff --git a/tools/perf/arch/x86/util/evsel.c b/tools/perf/arch/x86/util/ev= sel.c index 090d0f371891..181f2ba0bb2a 100644 --- a/tools/perf/arch/x86/util/evsel.c +++ b/tools/perf/arch/x86/util/evsel.c @@ -6,6 +6,7 @@ #include "util/pmu.h" #include "util/pmus.h" #include "linux/string.h" +#include "topdown.h" #include "evsel.h" #include "util/debug.h" #include "env.h" @@ -44,7 +45,7 @@ bool arch_evsel__must_be_in_group(const struct evsel *evs= el) strcasestr(evsel->name, "uops_retired.slots")) return false; =20 - return strcasestr(evsel->name, "topdown") || strcasestr(evsel->name, "slo= ts"); + return arch_is_topdown_metrics(evsel) || arch_is_topdown_slots(evsel); } =20 int arch_evsel__hw_name(struct evsel *evsel, char *bf, size_t size) diff --git a/tools/perf/arch/x86/util/topdown.c b/tools/perf/arch/x86/util/= topdown.c index 3f9a267d4501..e805065bb7e1 100644 --- a/tools/perf/arch/x86/util/topdown.c +++ b/tools/perf/arch/x86/util/topdown.c @@ -32,6 +32,47 @@ bool topdown_sys_has_perf_metrics(void) } =20 #define TOPDOWN_SLOTS 0x0400 +bool arch_is_topdown_slots(const struct evsel *evsel) +{ + if (evsel->core.attr.config =3D=3D TOPDOWN_SLOTS) + return true; + + return false; +} + +static int compare_topdown_event(void *vstate, struct pmu_event_info *info) +{ + int *config =3D vstate; + int event =3D 0; + int umask =3D 0; + char *str; + + str =3D strcasestr(info->str, "event=3D"); + if (str) + sscanf(str, "event=3D%x", &event); + + str =3D strcasestr(info->str, "umask=3D"); + if (str) + sscanf(str, "umask=3D%x", &umask); + + if (strcasestr(info->name, "topdown") && event =3D=3D 0 && + *config =3D=3D (event | umask << 8)) + return 1; + + return 0; +} + +bool arch_is_topdown_metrics(const struct evsel *evsel) +{ + struct perf_pmu *pmu =3D evsel__find_pmu(evsel); + int config =3D evsel->core.attr.config; + + if (pmu && perf_pmu__for_each_event(pmu, false, &config, + compare_topdown_event)) + return true; + + return false; +} =20 /* * Check whether a topdown group supports sample-read. @@ -44,7 +85,7 @@ bool arch_topdown_sample_read(struct evsel *leader) if (!evsel__sys_has_perf_metrics(leader)) return false; =20 - if (leader->core.attr.config =3D=3D TOPDOWN_SLOTS) + if (arch_is_topdown_slots(leader)) return true; =20 return false; diff --git a/tools/perf/arch/x86/util/topdown.h b/tools/perf/arch/x86/util/= topdown.h index 46bf9273e572..1bae9b1822d7 100644 --- a/tools/perf/arch/x86/util/topdown.h +++ b/tools/perf/arch/x86/util/topdown.h @@ -3,5 +3,7 @@ #define _TOPDOWN_H 1 =20 bool topdown_sys_has_perf_metrics(void); +bool arch_is_topdown_slots(const struct evsel *evsel); +bool arch_is_topdown_metrics(const struct evsel *evsel); =20 #endif --=20 2.40.1 From nobody Sat Feb 7 15:11:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA6B336AEC; Mon, 8 Jul 2024 07:40:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424445; cv=none; b=Q85PXcfijWNQYmcOploZu7r3HkOrG2/iP4LIVl+DLJfFXbKqBdNK9xMiaNwH44nqTbcTe4LdF7EK4xRgcX/rwZIkuvCwCK3Rto/JSJsX/MhlnAduw+v0/LgSb7PfyJt9fS8pUoPm+rutxZR0PjnkgYWo987LRRNyNHsAzRMIOLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424445; c=relaxed/simple; bh=7mAASb3q0AC2znNgA2IO5PLY0spJ6CZck3SPO0Z0fSA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DFSQENWn5GGh8dDcnBCHj7N39Idk7TKuKAgD/L6G26NEz1X99en7pGO5wJ9VesDo4YtktUoLlUhv9iiy75B9gNhkzSRp5Rj3mMDJSJ76a1dQ0BWtYYk/0yr64JjSdr0h6bXnfJ+RPzLXR0AyrmiZSGsdVU1RAEZHHFsdlWpzU9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=RnG2ihLT; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="RnG2ihLT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720424444; x=1751960444; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7mAASb3q0AC2znNgA2IO5PLY0spJ6CZck3SPO0Z0fSA=; b=RnG2ihLTW6gfOwGGFrQRrNWQcKEGvbLfKywgHSxSXpBkLWQMv5hBYAhY V4uu5p4RNzwyomFHf3uS9RxdLpABBpCUM8zs7JwTCSSrCIu3qAASycorT YejXcbrYeqTg7ZCiSU/LhMwfzRrnafYL/HdIYZ9fJQf/urHRC0PNb+nZD e3Vr3/t0U5U3y6voZEgWqsbTz7R7PjZYj8ztapRdr1TN+LF5QY7/D6wrX ZzdOd7J4RXIunmAVrEoTSJ+9DtmO7pJbAsy++b6nvrkpNRMcQ75r8pf/q 7+b1vCNfhN77lc0dRgE2wD2MfBRiKbhG+pXKtmoLU6CXupeXNkonNetXC Q==; X-CSE-ConnectionGUID: qhojni5MRpujBgU+7dFBnQ== X-CSE-MsgGUID: 1RXOK5/qRueSr8HJOuhnPA== X-IronPort-AV: E=McAfee;i="6700,10204,11126"; a="17819224" X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="17819224" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2024 00:40:44 -0700 X-CSE-ConnectionGUID: c3AdZ3cLStWo5N7dyCGgyg== X-CSE-MsgGUID: i6kNOmSPQv6ja/3BjhPzGg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="51774095" Received: from emr.sh.intel.com ([10.112.229.56]) by fmviesa003.fm.intel.com with ESMTP; 08 Jul 2024 00:40:41 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Yongwei Ma , Dapeng Mi , Dapeng Mi Subject: [Patch v2 2/5] perf x86/topdown: Correct leader selection with sample_read enabled Date: Mon, 8 Jul 2024 14:42:01 +0000 Message-Id: <20240708144204.839486-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> References: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Addresses an issue where, in the absence of a topdown metrics event within a sampling group, the slots event was incorrectly bypassed as the sampling leader when sample_read was enabled. perf record -e '{slots,branches}:S' -c 10000 -vv sleep 1 In this case, the slots event should be sampled as leader but the branches event is sampled in fact like the verbose output shows. perf_event_attr: type 4 (cpu) size 168 config 0x400 (slots) sample_type IP|TID|TIME|READ|CPU|IDENTIFIER read_format ID|GROUP|LOST disabled 1 sample_id_all 1 exclude_guest 1 ------------------------------------------------------------ sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 =3D 5 ------------------------------------------------------------ perf_event_attr: type 0 (PERF_TYPE_HARDWARE) size 168 config 0x4 (PERF_COUNT_HW_BRANCH_INSTRUCTIONS) { sample_period, sample_freq } 10000 sample_type IP|TID|TIME|READ|CPU|IDENTIFIER read_format ID|GROUP|LOST sample_id_all 1 exclude_guest 1 The sample period of slots event instead of branches event is reset to 0. This fix ensures the slots event remains the leader under these conditions. Signed-off-by: Dapeng Mi --- tools/perf/arch/x86/util/topdown.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/perf/arch/x86/util/topdown.c b/tools/perf/arch/x86/util/= topdown.c index e805065bb7e1..b9210f6486fd 100644 --- a/tools/perf/arch/x86/util/topdown.c +++ b/tools/perf/arch/x86/util/topdown.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include "api/fs/fs.h" #include "util/evsel.h" +#include "util/evlist.h" #include "util/pmu.h" #include "util/pmus.h" #include "util/topdown.h" @@ -82,11 +83,22 @@ bool arch_is_topdown_metrics(const struct evsel *evsel) */ bool arch_topdown_sample_read(struct evsel *leader) { + struct evsel *evsel; + if (!evsel__sys_has_perf_metrics(leader)) return false; =20 - if (arch_is_topdown_slots(leader)) - return true; + if (!arch_is_topdown_slots(leader)) + return false; + + /* + * If slots event as leader event but no topdown metric events + * in group, slots event should still sample as leader. + */ + evlist__for_each_entry(leader->evlist, evsel) { + if (evsel !=3D leader && arch_is_topdown_metrics(evsel)) + return true; + } =20 return false; } --=20 2.40.1 From nobody Sat Feb 7 15:11:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 283FB38FB9; Mon, 8 Jul 2024 07:40:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424448; cv=none; b=Sbi+DxcT/wSMcpD71M/epao/iILTCSrWM4KeR7XkE8Cg8302+21R4/E0l9kmF0L3LqSgJCzxyZA9h8Hvo6BHUmJFEAOB5iPrbHUH/vYsbgQ7HyjCJw7ZEwiTzEdgI2x+H3E9R5VwEU4Xyloa7opqPOMK0tYzSmY3OJaJUQpFDV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424448; c=relaxed/simple; bh=1/nKuFBsRafZNDLvHVCKhdjLHZPBaKZQdBcN+bO4gTo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mfilMhj+drRzAiWe6FnK6D5BhItocIqL5y+0UMD3KOnvQ0CkLmijgyc9W08uiFVOTyv1jt2ltlUgDc5pvwP77Mn6P6lgcHttOrm6ZVFRhlzYqxqSHNTEEaqcaBaRNpivCo1xST18tpIjtwAACTn4jvQWqRbvjvHhD0CZCkQg4EM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=erP7AawP; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="erP7AawP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720424447; x=1751960447; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1/nKuFBsRafZNDLvHVCKhdjLHZPBaKZQdBcN+bO4gTo=; b=erP7AawP2R/jQpMgLv/jDwWK8nnLd5pNHi72//AscVboDl3mHn32cIah UWeQrq/+DzAgveeAPF7Gt40yNGxqKVXsuKAAM24Vv7f/scZ7c6p9Ox/+X 4X89yLMbrpHPUV0H0aGy2uPztKAglLpG/PRjlUGwGIKjOOrcpywu+Q1rg 0N1/YpPUgGDH+AQOaXOwdjnQtn/RNyWdWNgj69XPU9dW3cT7AdlmVmk8g oyC97PvMZJAKvT8W1DjBhYt5ztd1AZW/NXSTsCcGyQCZ5HqfR/u7nP+Z4 ADZJj2FWkufstcdReUJXOBpIFlmhxUf5cDTZjq8L+ItLrO6KER6EwYAN7 w==; X-CSE-ConnectionGUID: X+z4WbFoSCqzJXRAqXOAfA== X-CSE-MsgGUID: wV4mq54ZSIehNOJToqFy8w== X-IronPort-AV: E=McAfee;i="6700,10204,11126"; a="17819235" X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="17819235" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2024 00:40:47 -0700 X-CSE-ConnectionGUID: VN7GshEBTwOVaGiG2Be6sg== X-CSE-MsgGUID: heyKpxtLTemxBWRk16Xw/Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="51774134" Received: from emr.sh.intel.com ([10.112.229.56]) by fmviesa003.fm.intel.com with ESMTP; 08 Jul 2024 00:40:44 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Yongwei Ma , Dapeng Mi , Dapeng Mi Subject: [Patch v2 3/5] perf x86/topdown: Don't move topdown metrics events when sorting events Date: Mon, 8 Jul 2024 14:42:02 +0000 Message-Id: <20240708144204.839486-4-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> References: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" when running below perf command, we say error is reported. perf record -e "{slots,instructions,topdown-retiring}:S" -vv -C0 sleep 1 ------------------------------------------------------------ perf_event_attr: type 4 (cpu) size 168 config 0x400 (slots) sample_type IP|TID|TIME|READ|CPU|PERIOD|IDENTIFIER read_format ID|GROUP|LOST disabled 1 sample_id_all 1 exclude_guest 1 ------------------------------------------------------------ sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 =3D 5 ------------------------------------------------------------ perf_event_attr: type 4 (cpu) size 168 config 0x8000 (topdown-retiring) { sample_period, sample_freq } 4000 sample_type IP|TID|TIME|READ|CPU|PERIOD|IDENTIFIER read_format ID|GROUP|LOST freq 1 sample_id_all 1 exclude_guest 1 ------------------------------------------------------------ sys_perf_event_open: pid -1 cpu 0 group_fd 5 flags 0x8 sys_perf_event_open failed, error -22 Error: The sys_perf_event_open() syscall returned with 22 (Invalid argument) for e= vent (topdown-retiring). The reason of error is that the events are regrouped and topdown-retiring event is moved to closely after the slots event and topdown-retiring event needs to do the sampling, but Intel PMU driver doesn't support to sample topdown metrics events. For topdown metrics events, it just requires to be in a group which has slots event as leader. It doesn't require topdown metrics event must be closely after slots event. Thus it's a overkill to move topdown metrics event closely after slots event in events regrouping and furtherly cause the above issue. Thus delete the code that moving topdown metrics events to fix the issue. Signed-off-by: Dapeng Mi --- tools/perf/arch/x86/util/evlist.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tools/perf/arch/x86/util/evlist.c b/tools/perf/arch/x86/util/e= vlist.c index 332e8907f43e..6046981d61cf 100644 --- a/tools/perf/arch/x86/util/evlist.c +++ b/tools/perf/arch/x86/util/evlist.c @@ -82,11 +82,6 @@ int arch_evlist__cmp(const struct evsel *lhs, const stru= ct evsel *rhs) return -1; if (arch_is_topdown_slots(rhs)) return 1; - /* Followed by topdown events. */ - if (arch_is_topdown_metrics(lhs) && !arch_is_topdown_metrics(rhs)) - return -1; - if (!arch_is_topdown_metrics(lhs) && arch_is_topdown_metrics(rhs)) - return 1; } =20 /* Default ordering by insertion index. */ --=20 2.40.1 From nobody Sat Feb 7 15:11:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F1BC3BB25; Mon, 8 Jul 2024 07:40:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424451; cv=none; b=Y3GR9rjIAwiBAHEoAEttj0JurMJgCeIEXgNtdz6Ay6dNCSXk6N4f2W51inR3inc63aRLx4cwx4O7yKG83peWI2KGsi5aqShv9bdrwn+5Kjzm1G68BR1GtfTlc0jkkgXLFOvLG/IqkKyYyL0buNcV/Tz6jN1Z9F7rR7DzR3CUqMQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424451; c=relaxed/simple; bh=7NPeKnDoJ/P82slpVaSMciOgj75XI6ViCTDAXn0KGrA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NPYt/RXKY02yMTelZ4YU9Cm6GNI2Ub2BZ1eLmtADhaTFICiRLZt/kCgiw9kfpdf2LvUWmPAoTuAnlxLj7IlhAKzAppqqQ/rCkYnKW9lOpzpXMgdN+gmFR2YGuGd6ICs9ECfWnyRWsI3uh9AufhkyJfNI8BPWQwJoKmOWqJylG28= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=RHv3cWqG; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="RHv3cWqG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720424450; x=1751960450; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7NPeKnDoJ/P82slpVaSMciOgj75XI6ViCTDAXn0KGrA=; b=RHv3cWqGoEHusCyk4k0OTGuD+F9lNtvh1CdOyO9SrS+vOEtBjLvHid8v R2tgfO3yXb1TFZsnTmx/cij6yo4DW2hwH5xkhB/oxgOD0kerGGSdmcfNh TVtEdBotg9RZw3oLalAVY0Ck7Rsuqh9zc/o3vQepIGych9U4ikBokYJzW 1k9GQT7NlmHcOtLC1OlHB4DgezKJqlAtAEZ3HD0m8kmb/BgCQG88IrOyP NfGZz2cRV2x3GbuafUPIeOTrWFD2Ju3AJwCXtA8TIBsHnUwVo6zvKhytV 5pCYg19IqKD08o1B5gT4xozTe+FjZANYAZX8IsZRIfo4K0/A9b/R5SBJG g==; X-CSE-ConnectionGUID: DauF/CNbQfWPkCpX3LKgMA== X-CSE-MsgGUID: eQWYIAeUR92pC5Q+XHXRzw== X-IronPort-AV: E=McAfee;i="6700,10204,11126"; a="17819248" X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="17819248" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2024 00:40:50 -0700 X-CSE-ConnectionGUID: /3+jJtQOQKCheWkMuqRNzQ== X-CSE-MsgGUID: kXVs+frKRk+/aqgYqACsGQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="51774155" Received: from emr.sh.intel.com ([10.112.229.56]) by fmviesa003.fm.intel.com with ESMTP; 08 Jul 2024 00:40:47 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Yongwei Ma , Dapeng Mi , Dapeng Mi Subject: [Patch v2 4/5] perf tests: Add leader sampling test in record tests Date: Mon, 8 Jul 2024 14:42:03 +0000 Message-Id: <20240708144204.839486-5-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> References: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add leader sampling test to validate event counts are captured into record and the count value is consistent. Suggested-by: Kan Liang Signed-off-by: Dapeng Mi --- tools/perf/tests/shell/record.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/reco= rd.sh index 3d1a7759a7b2..8e3e66780fed 100755 --- a/tools/perf/tests/shell/record.sh +++ b/tools/perf/tests/shell/record.sh @@ -17,6 +17,7 @@ skip_test_missing_symbol ${testsym} =20 err=3D0 perfdata=3D$(mktemp /tmp/__perf_test.perf.data.XXXXX) +script_output=3D$(mktemp /tmp/__perf_test.perf.data.XXXXX.script) testprog=3D"perf test -w thloop" cpu_pmu_dir=3D"/sys/bus/event_source/devices/cpu*" br_cntr_file=3D"/caps/branch_counter_nr" @@ -190,11 +191,38 @@ test_branch_counter() { echo "Basic branch counter test [Success]" } =20 +test_leader_sampling() { + echo "Basic leader sampling test" + if ! perf record -o "${perfdata}" -e "{branches,branches}:Su" perf test = -w brstack 2> /dev/null + then + echo "Leader sampling [Failed record]" + err=3D1 + return + fi + index=3D0 + perf script -i "${perfdata}" > $script_output + while IFS=3D read -r line + do + # Check if the two branches counts are equal in each record + branches=3D$(echo $line | awk '{for(i=3D1;i<=3DNF;i++) if($i=3D=3D"bra= nches:") print $(i-1)}') + if [ $(($index%2)) -ne 0 ] && [ ${branches}x !=3D ${prev_branches}x ] + then + echo "Leader sampling [Failed inconsistent branches count]" + err=3D1 + return + fi + index=3D$(($index+1)) + prev_branches=3D$branches + done < $script_output + echo "Basic leader sampling test [Success]" +} + test_per_thread test_register_capture test_system_wide test_workload test_branch_counter +test_leader_sampling =20 cleanup exit $err --=20 2.40.1 From nobody Sat Feb 7 15:11:59 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C24AD3D3BF; Mon, 8 Jul 2024 07:40:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424455; cv=none; b=cTb6GjGEido3OMeufTm551mT9n5NglpUP7JB6K8w7lKQ+S22LYz4LqOVCEyLkFNRWd4hW+t0dPmXioLn7FgzeP5VSVQPwuy3Zi5NzH7ln4de9KPy7sAWPuvd3S/j7g12jgLouYfq8jbc9LKjFbFVP0FjH4rS8vVtZKgFhzPg410= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720424455; c=relaxed/simple; bh=hbv/ONaTcOcSxcVI9/dmZbgKJj6Jaqy5OC6pe95FOVQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fUd8U76gpRjtW1sleHuzt7jMwniXu8rf6B2YJEcWnFI4zuq/PhmDagDHmNLqqj4BUHkc8cDJDhZdl95oodnPGFuO4shs0haZiKGBZHDIh8uGlBSDXQRluhsUTby6g3gYCGvKrS66TvwxdIQZwZvmxvAUF3YO+hjOOKVSmnkzEg8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=eXxLr60/; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="eXxLr60/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720424454; x=1751960454; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hbv/ONaTcOcSxcVI9/dmZbgKJj6Jaqy5OC6pe95FOVQ=; b=eXxLr60/NhbyMURlN/DMSvNNJCnhj9FHawDnffxBf4P1rjDarlme7z5V SMb6Hwd3Va+bxSpXhJDgehXqpyKqLrjo46EaWjBNHM8jjeF6rnvWKx6zK aDPQmIEcsSFK5n/aEhFP1ix1EUOEFCD7hpWUzYfHvbpZG+CjjleompS45 INEMko2YMWlen9QXnmIljNrNBZT9Qk8CASvF/Vi4E2MNkS2xEe8ukSf+J 9rcrOxMNBN7KDr1SgGaEg09ZHBgirE1UmMol5tcyzp2WCzmHSyJNuLwaI FYp9BeCuEsDpg7C3K2HQLTJtVgo6/RO8uh0MiaBeFeKXQtERzET/dhKja Q==; X-CSE-ConnectionGUID: j8ZoPeUiQcecWwsMSCtQWA== X-CSE-MsgGUID: RQzgarQdRziNHwVHLFSH4A== X-IronPort-AV: E=McAfee;i="6700,10204,11126"; a="17819256" X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="17819256" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2024 00:40:54 -0700 X-CSE-ConnectionGUID: YtzkbKIVTvC4PgJUQdKEPQ== X-CSE-MsgGUID: P7xyYtMVSuawUwqYqfwQFg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,191,1716274800"; d="scan'208";a="51774161" Received: from emr.sh.intel.com ([10.112.229.56]) by fmviesa003.fm.intel.com with ESMTP; 08 Jul 2024 00:40:50 -0700 From: Dapeng Mi To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , Adrian Hunter , Alexander Shishkin , Kan Liang Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Yongwei Ma , Dapeng Mi , Dapeng Mi Subject: [Patch v2 5/5] perf tests: Add topdown events counting and sampling tests Date: Mon, 8 Jul 2024 14:42:04 +0000 Message-Id: <20240708144204.839486-6-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> References: <20240708144204.839486-1-dapeng1.mi@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add counting and leader sampling tests to verify topdown events including raw format can be reordered correctly. Signed-off-by: Dapeng Mi --- tools/perf/tests/shell/record.sh | 6 ++++++ tools/perf/tests/shell/stat.sh | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/reco= rd.sh index 8e3e66780fed..164f0cf9648e 100755 --- a/tools/perf/tests/shell/record.sh +++ b/tools/perf/tests/shell/record.sh @@ -214,6 +214,12 @@ test_leader_sampling() { index=3D$(($index+1)) prev_branches=3D$branches done < $script_output + if ! perf record -o "${perfdata}" -e "{instructions,slots,topdown-retiri= ng}:S" true 2> /dev/null + then + echo "Leader sampling [Failed topdown events not reordered correctly]" + err=3D1 + return + fi echo "Basic leader sampling test [Success]" } =20 diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh index 3f1e67795490..092a7a2abcf8 100755 --- a/tools/perf/tests/shell/stat.sh +++ b/tools/perf/tests/shell/stat.sh @@ -79,6 +79,12 @@ test_topdown_groups() { err=3D1 return fi + if perf stat -e '{instructions,r400,r8000}' true 2>&1 | grep -E -q "" + then + echo "Topdown event group test [Failed raw format slots not reordered = first]" + err=3D1 + return + fi echo "Topdown event group test [Success]" } =20 --=20 2.40.1