From nobody Wed Dec 17 08:54:41 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (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 A10101581F5; Fri, 12 Jul 2024 10:21:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779694; cv=none; b=panIasGqYE1lNHPZsIQH5xY/ocd7gJItnhGKLemuEe22fhBlMbU/elRRVr9krsJwZZC2h+fw+UXBVqRT/CdLTfE8SoR+cV8kEWOxON2oGR3FbrUtEBgXvJfr49hsxc5IDD0s6/RRMQJMPAJGzHA3dtm6AFX46Ai71m/54pu18+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779694; c=relaxed/simple; bh=RzanKec69OjpYow528ddx8RJu3FhJQBfxfE59UoUTMc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fLyvOaIcDqJVY6p/AYtwiLYSHrSrMIsU/UcQSnnoje8cRUjgLfCgbBrGNQMQKyiCzfjqrAOY1fXisATj3kx6yY1tiaTweArdcVaXZZct1JZUaJ2hm/JI/osMAILSDzNgstidHfWRI/UKbSJ8CTKRITDEvOOUgTXi++1gu2dpETA= 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=Uq5JbXuf; arc=none smtp.client-ip=192.198.163.8 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="Uq5JbXuf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720779693; x=1752315693; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=RzanKec69OjpYow528ddx8RJu3FhJQBfxfE59UoUTMc=; b=Uq5JbXufjT0Cp4fat4CB0XctYrPjLtDZyFeTXmcNSGMqWJUJ78SBZC6+ hHWqCxKdvCAw/ycB/oMaSyk858jf7E1IRIiyJaMAOzuTnBMu14U2CuIc4 6LkMdemeFYK6NEGpSNpk49b5s5Tq2sP4jlqsBhWrk8PkXoMZyOzUN2QiY mzVh0Npwj6RLKVf8mfG5xNxKFxIFdm+MACfV7MthOr6W5SZlHOLOjuXUl epQHwtxDCYyhNpd1wclqh7Rm+3F3UamsDMdJDkeeEHyGoGFQZmWB4xTmF Sbobr4eHj1GaAyUp2vM6LFS1Fv6/c7MSIF83RqP/uq1mixhH0dbPxIz20 g==; X-CSE-ConnectionGUID: Pyfp6kX/SAuuwUy95UH05w== X-CSE-MsgGUID: qV49YQSIQTixAe7Jw1kNCw== X-IronPort-AV: E=McAfee;i="6700,10204,11130"; a="35756760" X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="35756760" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2024 03:21:33 -0700 X-CSE-ConnectionGUID: RXnG3z4vSCqvE4syvjyznA== X-CSE-MsgGUID: i1IF3qJiSrmoCZCD+Djcjg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="79576227" Received: from emr.sh.intel.com ([10.112.229.56]) by orviesa002.jf.intel.com with ESMTP; 12 Jul 2024 03:21:29 -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 v3 1/5] perf x86/topdown: Complete topdown slots/metrics events check Date: Fri, 12 Jul 2024 17:03:35 +0000 Message-Id: <20240712170339.185824-2-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240712170339.185824-1-dapeng1.mi@linux.intel.com> References: <20240712170339.185824-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 | 48 +++++++++++++++++++++++++++++- tools/perf/arch/x86/util/topdown.h | 2 ++ 4 files changed, 55 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..49f25d67ed77 100644 --- a/tools/perf/arch/x86/util/topdown.c +++ b/tools/perf/arch/x86/util/topdown.c @@ -32,6 +32,52 @@ 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; + + if (!strcasestr(info->name, "topdown")) + return 0; + + 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 (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 || !pmu->is_core) + return false; + + if (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 +90,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 Wed Dec 17 08:54:41 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (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 1E84715B107; Fri, 12 Jul 2024 10:21:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779697; cv=none; b=XoCAo339Wkt6lqae5THvDee4gDe7+VeQF76m0YPD0NXwye8hdHlVqofezGdT4R50fEs5kDEQ4ADDt+DWPNvskSna45BA2VSM0Kz8AI41aeUHeRa6usAfhzZEIe80Cg8PNXLadUWnHL1LJpQ4GHAkqmmjfluZxqtKMNx249JW4+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779697; c=relaxed/simple; bh=6BwyhI1ygNz4RFIi5YJoddlQb3Ig5C1L4xGiisWXOeM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=keUhovM9R9iTwqWG/Nv14hWO97yYsRxAxnFrvZQc3+QJDBJ4QzPXKGqkrkTL6v4pu/usIWu99b0wORrzfKZvu4VuxsHZ/lHROIxzEtEAxxIcTmw88EcWHfYSnt7Y0wUkuvP4s0BhMtgzk4hxMZKMEVTeMtnEdoGCmd7JUtDxjSk= 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=UQFq3kg+; arc=none smtp.client-ip=192.198.163.8 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="UQFq3kg+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720779696; x=1752315696; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6BwyhI1ygNz4RFIi5YJoddlQb3Ig5C1L4xGiisWXOeM=; b=UQFq3kg+AHrDTWUBQXXW7obJd7YAzIg4CVnv4zW2SnytZAVH0Lkg07iu 6Vze72xvMe9IrdhwyoIDyPMTymFi3HPk7FDE5ku7176iV4EoFkyizN62p NuxkdMaIj98FRKnOc2DFmQJC3VSdI48k9pvPciMThI2chaNmfXuTct2z6 Gav/rg5Qf0l3/MRfsd4wQSg0TVdlmcCLaJtro0ScJSlaFpOt0YBjTPlYF op7N8FM1QOlB67wo36AmLdeAebjMmfS34YPBHPhlduyYRkAIRpG9GvWCk 1zoiM9bt4Y/vnpAazXjfEUDEBkHgPZShCBzDD4zXv8GvUmIJ16DDQefCV w==; X-CSE-ConnectionGUID: TqSU1s5RS3CFytsZiYkqKQ== X-CSE-MsgGUID: H6Obaw8ES+21NtuLWds5Lg== X-IronPort-AV: E=McAfee;i="6700,10204,11130"; a="35756766" X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="35756766" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2024 03:21:36 -0700 X-CSE-ConnectionGUID: z/Pl6ZbHQZqYAynHkgxdKw== X-CSE-MsgGUID: AqkJ88znShq8914jn9P6VA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="79576231" Received: from emr.sh.intel.com ([10.112.229.56]) by orviesa002.jf.intel.com with ESMTP; 12 Jul 2024 03:21:32 -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 v3 2/5] perf x86/topdown: Correct leader selection with sample_read enabled Date: Fri, 12 Jul 2024 17:03:36 +0000 Message-Id: <20240712170339.185824-3-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240712170339.185824-1-dapeng1.mi@linux.intel.com> References: <20240712170339.185824-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 49f25d67ed77..857e00cf579f 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" @@ -87,11 +88,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 Wed Dec 17 08:54:41 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (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 8585115DBAE; Fri, 12 Jul 2024 10:21:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779701; cv=none; b=D/rYNJs4+8z+Z9Ks5+10+4blARHTLTqKUDBP4UJGe5uNNugn+aut0I60PRjYkrAQhkBj8T/cxTuZf1icSb2MwKSfjN/XqUS6HvtMt986UCzZ++i272yY/u6Y5dC/W/J8LZSHsxdGaLfkk8wDNNELPPyN5D8EoqT1oD3Xciomayw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779701; c=relaxed/simple; bh=Uz0dc8OHpJq+3744NgpGZ8C1cdwbf4ISl3iutvlILY4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fXkpSiOJFwRf1zJqIO+g2Cnvda2xapdvM5KKIPUxnxQO3Asrsba1c7DCkacjyatBVmeA5tyGdZTBMrdlphs83km62hHFJDY7tU/Urs78E4W74uWRt4skjBkNlXaXooQxXXBSQcJONwdIe7W/XFW2saG8MyKORcyZGcq3hdzMXN8= 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=YslZeF50; arc=none smtp.client-ip=192.198.163.8 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="YslZeF50" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720779700; x=1752315700; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Uz0dc8OHpJq+3744NgpGZ8C1cdwbf4ISl3iutvlILY4=; b=YslZeF50QR3mH1iK3CEbmvM2R2WYOAlQ/T7UPB8LZ/h/vhxCnG1W+tRw 4h4Q7HNZMBx1CZLLqAP2kP4F01AdUAsgkyxH/k7TNOEf2IQP95pNf6mCo 4HzfWsZD0WXMROTrNptwuCM4LKvwUcIPXjNP7wfh0TUEpD9POJV8VK2CN yUyshboLHQv968t4EtQxrzstLEHKNuRsyf2pSccG1dqy0hyvMr7BP0uPE 4pCrGtNzj5gHh6ZME8Vzu4SM1+vkyNMbltPe+u6PgYOXEgNpwsrEw3t6H SiCuOd3mug/STliSyjSHA2blgt9M7LF1uOKGw+Vfk1M72AV0U4NzR0IUr A==; X-CSE-ConnectionGUID: gIXWwszzS6WGC+lmpTknvA== X-CSE-MsgGUID: a4dNiiWXSSy8UqEZDg5T/g== X-IronPort-AV: E=McAfee;i="6700,10204,11130"; a="35756774" X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="35756774" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2024 03:21:39 -0700 X-CSE-ConnectionGUID: BHy734BdRu2iVS2DbdgEkQ== X-CSE-MsgGUID: v1kXtj0ATsOlX8ms3FXOPw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="79576235" Received: from emr.sh.intel.com ([10.112.229.56]) by orviesa002.jf.intel.com with ESMTP; 12 Jul 2024 03:21:36 -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 v3 3/5] perf x86/topdown: Don't move topdown metric events in group Date: Fri, 12 Jul 2024 17:03:37 +0000 Message-Id: <20240712170339.185824-4-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240712170339.185824-1-dapeng1.mi@linux.intel.com> References: <20240712170339.185824-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 don't move topdown metrics events forward if they are already in a group. Signed-off-by: Dapeng Mi --- tools/perf/arch/x86/util/evlist.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/perf/arch/x86/util/evlist.c b/tools/perf/arch/x86/util/e= vlist.c index 332e8907f43e..6ae044f21843 100644 --- a/tools/perf/arch/x86/util/evlist.c +++ b/tools/perf/arch/x86/util/evlist.c @@ -85,7 +85,12 @@ int arch_evlist__cmp(const struct evsel *lhs, const stru= ct evsel *rhs) /* 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)) + /* + * Move topdown events forward only when topdown events + * are not in same group with previous event. + */ + if (!arch_is_topdown_metrics(lhs) && arch_is_topdown_metrics(rhs) && + lhs->core.leader !=3D rhs->core.leader) return 1; } =20 --=20 2.40.1 From nobody Wed Dec 17 08:54:41 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (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 BBAA015EFAE; Fri, 12 Jul 2024 10:21:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779704; cv=none; b=i5A1QdXtHr2ZV3eaaPgcKxL/OwZBKGk1PHkj+KCZx/qYK5750CrwZGWjLFaADTul3gDDlE5rF3xWEVYDFmnEyGxXMhD7kse6VafpbqeQhiyvp0hjdRU32TBvgH79t3T+Clizl3Oa+OH/BNgbHZTzIJ9SpFFI46rihuNm69561Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779704; c=relaxed/simple; bh=7NPeKnDoJ/P82slpVaSMciOgj75XI6ViCTDAXn0KGrA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CnKVglxDu6RNyC6eZDD7qXRJ5tPca24xNhA1GaQ2bGyvlZBYu0UuefKhB1lWPg+0c4l5fQcd/wVsLTmvVdI9F9WNj4EUJyI/9rSG6GNE55fGY4wMn+h14cjB9d/qKUnhDubC3uyymxaNzK1M7e+SRT669zDQH/NsLOe4hLr6At4= 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=jLtCa7bi; arc=none smtp.client-ip=192.198.163.8 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="jLtCa7bi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720779703; x=1752315703; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7NPeKnDoJ/P82slpVaSMciOgj75XI6ViCTDAXn0KGrA=; b=jLtCa7bifudI+CB0oo34xYpHAZKH0ZidLvUDQHirG5qI1dU0rbaS51Gs x23fFFoCQSJSteyunAj1S9nXgny8qSyRXbFTQOX7lZ6uhd66EQSuWNwAI n+tlF+8vYYa2l53rZRZyF0Zpd35EZpAVUNBSwvZbZD9MGr97++60M7Cji KaXhmLagW033vDkguqJcYd0aGaNnhb1p3zc9nkZxTQ03QVHjLlbaKTQoc GRYiI1A22jvddcSSkvEf18Ool5hlZu79W86jsz2sUrYCc2DgUOOn4zUFI 0GYVxisn3aQ2VLRB70tRgKETJTlQJTjh1dXu3+8jWWfJ1yHha4WSgsz/j A==; X-CSE-ConnectionGUID: ywjUGzueQg+AhrKY7aNJRw== X-CSE-MsgGUID: S/X2ITp/Ssy5dj1Cgc8+RQ== X-IronPort-AV: E=McAfee;i="6700,10204,11130"; a="35756786" X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="35756786" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2024 03:21:43 -0700 X-CSE-ConnectionGUID: hDF+Il1bThaZ4B4g7PJcLA== X-CSE-MsgGUID: A2uYjbHrRaiiPLfSzNPF1Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="79576254" Received: from emr.sh.intel.com ([10.112.229.56]) by orviesa002.jf.intel.com with ESMTP; 12 Jul 2024 03:21:39 -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 v3 4/5] perf tests: Add leader sampling test in record tests Date: Fri, 12 Jul 2024 17:03:38 +0000 Message-Id: <20240712170339.185824-5-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240712170339.185824-1-dapeng1.mi@linux.intel.com> References: <20240712170339.185824-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 Wed Dec 17 08:54:41 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) (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 0EDE916A949; Fri, 12 Jul 2024 10:21:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.8 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779707; cv=none; b=aPvx62ljDAz88PCINQ2HfGpDGk2FNKwe9T7Bpj2ZNbAx6AbCFkhH+86ozWLawXes1E9EFVp1bGZN2uX3/MahoYZtfT77V0WXGMcgYJWUBHQbiWKCmesHZLOLhVNm+VO4CJrbiTyQvf9M1IBRtoWUkxINfxYq3hlnxtBjIcvpR3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720779707; c=relaxed/simple; bh=mYzLvmSJZKTBkmZhbdKH2s+bnRSxYws90RWrHKTt1cU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mqPKGGNSbw1xc/T7mxuLe4o7iduWVyYLPPJGpIXVdL61eSw6Kb+C+PejbXGQji2L8hFSUrrC9lN2QvBhKT6mnDsW6XMv5mnqdmJSDZn6tGpCfT7SiHRrUjh+ncb0ubzyOIFzRnlX548AceOJFReFKBvW9XEvZgVTgV17eCJ6ln4= 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=C1ttPrIN; arc=none smtp.client-ip=192.198.163.8 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="C1ttPrIN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720779706; x=1752315706; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mYzLvmSJZKTBkmZhbdKH2s+bnRSxYws90RWrHKTt1cU=; b=C1ttPrINNR+5OiurQsMd14O1ycw/0BAuf4zDOTGmtxYrjgYPm63TpSqA qQ1DyRZNhPD8eee3jRqj/tTtJoOxEG49dg5BiAGro3BUafg/RVXa+LQ/M aDHD8sU97qY5sw6feu8kw3yuSwGVSWtNUYWgSzHlhm3a/ubabKfBlxNI1 Mk2YirdSu2ytXSoF2dbUif6H2zQFJ8/uA7bubx+Jvut3MxrvijTenXs7Y 8JJN2HFRVZJOh8CXlKPuNAQOyg7d0BhviMKFYkE2ScQvJ/KjQ5WhFRZYx +w5qYtjkjcfQKM+vAwPkTmAnq2blReFFAsGncvJsG5dedRsjt4E7IadJj A==; X-CSE-ConnectionGUID: N3+Ww6aCQ2evm9vLPTNfqw== X-CSE-MsgGUID: LKkDMbtwRLe5WRtEPKzjfg== X-IronPort-AV: E=McAfee;i="6700,10204,11130"; a="35756794" X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="35756794" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2024 03:21:46 -0700 X-CSE-ConnectionGUID: ALB4pOYJRsiMBYkTMa0WGw== X-CSE-MsgGUID: PUIkzEv+R5S4LLOyky2ajw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,202,1716274800"; d="scan'208";a="79576258" Received: from emr.sh.intel.com ([10.112.229.56]) by orviesa002.jf.intel.com with ESMTP; 12 Jul 2024 03:21:42 -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 v3 5/5] perf tests: Add topdown events counting and sampling tests Date: Fri, 12 Jul 2024 17:03:39 +0000 Message-Id: <20240712170339.185824-6-dapeng1.mi@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240712170339.185824-1-dapeng1.mi@linux.intel.com> References: <20240712170339.185824-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 | 17 +++++++++++++++++ tools/perf/tests/shell/stat.sh | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/reco= rd.sh index 8e3e66780fed..9d0c43427811 100755 --- a/tools/perf/tests/shell/record.sh +++ b/tools/perf/tests/shell/record.sh @@ -217,12 +217,29 @@ test_leader_sampling() { echo "Basic leader sampling test [Success]" } =20 +test_topdown_leader_sampling() { + echo "Topdown leader sampling test" + if ! perf stat -e "{slots,topdown-retiring}" true 2> /dev/null + then + echo "Topdown leader sampling [Skipped event parsing failed]" + return + fi + if ! perf record -o "${perfdata}" -e "{instructions,slots,topdown-retiri= ng}:S" true 2> /dev/null + then + echo "Topdown leader sampling [Failed topdown events not reordered cor= rectly]" + err=3D1 + return + fi + echo "Topdown leader sampling test [Success]" +} + test_per_thread test_register_capture test_system_wide test_workload test_branch_counter test_leader_sampling +test_topdown_leader_sampling =20 cleanup exit $err 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