From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 381391EB18A for ; Mon, 19 May 2025 19:52:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684323; cv=none; b=HEUy0Dm2wYvM/aRnVy15sq0HohOJ8nExT4fY5qM7ISLmluxR+PZjwd3zFXXzI6lHl3lkJf1buGzNRVkDXPimoU1e5DhxIZAXP4LCPVhE9mqdzsWsbbjhpxzAxUqHe6G5bvH3+9mXwrr3t67d2j6pkVJZaQOd4O4Y3oRrAuwzIGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684323; c=relaxed/simple; bh=moBbk0e4zwG56wqQUF81dVts+MTk1ZzL4lCGN3wIn8o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=VpfnHkT4SPi/JlvgS+dSIdTqAQE3X5ziMMbMU29ZnDrgt6QxLd8jczNUbbs9KBUE3tyJRkfqwybqtWbXq1UvWN2d6X35eJi3JsE1eIrnIYlgTjIfK3L1UX35jmE6PHUKZdL2lLLU0OzLQXQ/FR5cqwga/jEFlDLiHo9ozo8iJH8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=NJETqKNP; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="NJETqKNP" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-22e7e097ef7so35832345ad.2 for ; Mon, 19 May 2025 12:52:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684321; x=1748289121; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=KLEswg+2ZvrVLuaVvJaBqbKOECqngCDtBESlmPXVj5E=; b=NJETqKNP8/5/a9EMxvxtiUaJmWDegkDzzfPbEZI4DXFm608qlg9J99HvvSU+YcrxCx Z0IQkqHcuZRWgPSKs5L59cVwXQ79e57zYNfDz8J8cXcKUTgPwvUl+B3Uer/Am8PRxfiM bWmIqkQ8PJUjyqckxfMSLdY9YnENISuW2PSWpLWqPMhQhO3yfbhfnyTU0H73d+veOCXF CuP1hPOLKEnsjymUrSzl+43VkNFn9Yw2YPriYjhd0VGR65T/Z1EztrAbkwYMsiKxDtt6 SlsEAl3kVhKsSeVPy9Yd1ydA9vzABhyzMdGmUvMdEzqAxP83frxrb1g0NzGsFFrJGHRr 063Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684321; x=1748289121; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KLEswg+2ZvrVLuaVvJaBqbKOECqngCDtBESlmPXVj5E=; b=ub1KXBQzSkADkvkgYnVRwTnfhSo88JfjTG9ITD80OIP6F9L14+frKOTSpQKKw2+2iV 5lVaeo5pTqK5E2YDOb+TKZ7FOBbb6kc6t1TX9vTHIcYRR+ZT7VDLxsm/1MxkFVRu6can 2Z16Hnu1vDY775dQ6QDjlYeUDLuOdfss7N1dpz7cvV0yU2fLOZHptgH3Q8Zw2l7xST2l 3pjvUdyklU3ChIUITzVcoV41K5V6xsRb/eLfMF8jLEWn0iur2YAlf4cwwXyYuP1cmhgU qFIm6FOzWCt9OPq2cTNNvWXzyKvfzNtnI1AAWjZh9gJbojdOQ+plleNFS/fHtV5N+tOJ rrfA== X-Forwarded-Encrypted: i=1; AJvYcCUD8TuGo4V1GqjvLIfl4hkrFnKmxqj2vqP00+NlvC7xRewTWzvpxs2MFW7CKfkBE8ZWPlwX/xYZJDJOneY=@vger.kernel.org X-Gm-Message-State: AOJu0YzBbaSfRQx1aoR8g0JRBfujVOZVXjot/+p/XIHQlhbW207HzFcl NzQxy2Wj9H2QmXeMmX13B3JRdOSm8p+4KFmZR5b6Ud/I2D40IROiYm4BVFMeeoM/LH/Pb8Y0mo7 FESZk2VLzTg== X-Google-Smtp-Source: AGHT+IGiY7OLM1UzxicQml+gH+PtRzbE8+fqCyt/LZBKRCSiwh5xxuwG513k9Tf7aNUBoQ3RvzqhqxPjjUnf X-Received: from plbma15.prod.google.com ([2002:a17:903:94f:b0:22e:4a61:5545]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1988:b0:21b:d2b6:ca7f with SMTP id d9443c01a7336-231de3ada46mr178538855ad.32.1747684321434; Mon, 19 May 2025 12:52:01 -0700 (PDT) Date: Mon, 19 May 2025 12:51:38 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-2-irogers@google.com> Subject: [PATCH v3 1/7] libperf threadmap: Don't segv for index 0 for the NULL perf_thread_map From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" perf_thread_map__nr returns length 1 if the perf_thread_map is NULL, meaning index 0 is valid. When perf_thread_map__pid of index 0 is read then return the expected "any" -1 value. Assert this is only done for index 0. Signed-off-by: Ian Rogers --- tools/lib/perf/threadmap.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/lib/perf/threadmap.c b/tools/lib/perf/threadmap.c index 07968f3ea093..3ca9ba4987fc 100644 --- a/tools/lib/perf/threadmap.c +++ b/tools/lib/perf/threadmap.c @@ -97,5 +97,10 @@ int perf_thread_map__nr(struct perf_thread_map *threads) =20 pid_t perf_thread_map__pid(struct perf_thread_map *map, int idx) { + if (!map) { + assert(idx =3D=3D 0); + return -1; + } + return map->map[idx].pid; } --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7BDD20E719 for ; Mon, 19 May 2025 19:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684329; cv=none; b=rMUkq84tLw4vZHuyYe1AWCATFMqb2YINgGJt+2WXvZ6qp39XePEmSOZfjfPwXCRYPm5XLVptCq9ISQpdjKBd58xfQZNPVPtHxRt+zaFOAGrzHi02BKlgYnc6SB/TQmVG6SUxOepWE691BTDJPfnS2yAxFMHs6Cu+DYr8jalgcnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684329; c=relaxed/simple; bh=F91uGFNuS9ze+k4o3LzvwL3EVQh99OWk2GUUQpppF5w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nU2VRoi3hDAJ7bchYTkrrI/7jVDZtWsJkIM91IXECGbhKE3H6IK31PJ0sEJjyoePpqTQ0Ln9m0SLOz4f8AW5DPPX/ZSBcgMtZHDdfcm2QL38fbgBu2MMQyqfAzterFzZxP3TOqtytK52JPVsUEjasWeo4gBsRsiupLcrioThb34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wh1i6VJg; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wh1i6VJg" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b1ffc678adfso3041311a12.0 for ; Mon, 19 May 2025 12:52:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684327; x=1748289127; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=B88KQis10sHy3aFQlUkzgjmtvbJRuQpEiX14gbvKHas=; b=wh1i6VJgacMSkeorv8+ocAWh3vUr0QpUnauM5PUBa4Su5e6OXTZXAFjT4M3yrFI72R VwWC/xuf9sm/T2CcVQYHATgs8kvwOlGNdzMwV2Ue0+6v69c1iT5hstZxqVgvTPx+BAkf vdVdOKLoh0TybMUvCA6ZBQX2u8+wjfHsMasLg+VrbSrDX/62x2MSHPP4WzN01PiUyxDI xXeBEySYmJ88Sto8hEiPlwnZsPrOUWL7etOAkbMeFFMNhK6FE5dKAdRIzHN3zVZA9gcn g1XygW655CW9ky0hs1s4XdvDMY5pFNy1EvT4EA/V0uDBOa1TVxN4BMIr1tj4rM1ef1la tSDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684327; x=1748289127; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=B88KQis10sHy3aFQlUkzgjmtvbJRuQpEiX14gbvKHas=; b=n79nQwAfQT4BXbMojtKW087Ac7T0o2YBihYrdH9/l1B+io7APGmcFXL3KxX8kKhIki XLNhYSCFTpHUsExcyvJ69WnDbdseCE4UrSYqbTY9n+rX4tAKB7RfTvbW1h5aXi7nV20S Pog1TXuQ7oDuLStzNlWey0ZzxncA4ET8NCB8ybY2ZTSU+qqVRZy5g/+jppao8siBc8sc ehROVAT46FBiXhbNr/jjysmiQRx+9WPSWmzz8wuOSJNVZKWcoLyfWzUucaVrFPTn4KSg ZH4KElFK/CmE9MgSuIGCvs8WrXUmfisj2pgTPcmsYEh+U8IShks5CxAkJNBvEsuwaXYD g8QA== X-Forwarded-Encrypted: i=1; AJvYcCVVOhhfLNSLFwFI/dtXGN0bZErSwmoEl1CfqmMgxzlR0YjQXzHlBDEvLfQqGVu0kl8VW5lEhFGbMt7F6Z4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywz3RC1btGkQEcjCL1FwI2u1exfnv5dESz0PpAukphaPCPdnAxU Z3uo1OtSgMMEgp1jMfFXU16qdW9wZfCnqG8rVTQaQDDX3MlQrymbUsSYrs8U3pt9/WA6zN+vpFO wZntoCsg//A== X-Google-Smtp-Source: AGHT+IGNKB0kTAILEX+H7U3c+Jevs+vPzolX2bExHW6YHAb/rS7vZwLc48G926qGoOnOZVWAucjqNObd1hy7 X-Received: from plka5.prod.google.com ([2002:a17:903:f85:b0:22e:154a:6dba]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2449:b0:231:c2e8:89df with SMTP id d9443c01a7336-231d4535a98mr219436745ad.28.1747684327179; Mon, 19 May 2025 12:52:07 -0700 (PDT) Date: Mon, 19 May 2025 12:51:39 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-3-irogers@google.com> Subject: [PATCH v3 2/7] libperf threadmap: Add perf_thread_map__idx From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow computation of thread map index from a PID. Note, with a perf_cpu_map the sorted nature allows for a binary search to compute the index which isn't currently possible with a perf_thread_map as they aren't guaranteed sorted. Signed-off-by: Ian Rogers --- tools/lib/perf/include/perf/threadmap.h | 1 + tools/lib/perf/threadmap.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/tools/lib/perf/include/perf/threadmap.h b/tools/lib/perf/inclu= de/perf/threadmap.h index 8b40e7777cea..44deb815b817 100644 --- a/tools/lib/perf/include/perf/threadmap.h +++ b/tools/lib/perf/include/perf/threadmap.h @@ -14,6 +14,7 @@ LIBPERF_API void perf_thread_map__set_pid(struct perf_thr= ead_map *map, int idx, LIBPERF_API char *perf_thread_map__comm(struct perf_thread_map *map, int i= dx); LIBPERF_API int perf_thread_map__nr(struct perf_thread_map *threads); LIBPERF_API pid_t perf_thread_map__pid(struct perf_thread_map *map, int id= x); +LIBPERF_API int perf_thread_map__idx(struct perf_thread_map *map, pid_t pi= d); =20 LIBPERF_API struct perf_thread_map *perf_thread_map__get(struct perf_threa= d_map *map); LIBPERF_API void perf_thread_map__put(struct perf_thread_map *map); diff --git a/tools/lib/perf/threadmap.c b/tools/lib/perf/threadmap.c index 3ca9ba4987fc..db431b036f57 100644 --- a/tools/lib/perf/threadmap.c +++ b/tools/lib/perf/threadmap.c @@ -104,3 +104,15 @@ pid_t perf_thread_map__pid(struct perf_thread_map *map= , int idx) =20 return map->map[idx].pid; } + +int perf_thread_map__idx(struct perf_thread_map *threads, pid_t pid) +{ + if (!threads) + return pid =3D=3D -1 ? 0 : -1; + + for (int i =3D 0; i < threads->nr; ++i) { + if (threads->map[i].pid =3D=3D pid) + return i; + } + return -1; +} --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B48EE213E66 for ; Mon, 19 May 2025 19:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684335; cv=none; b=sB9coN3CG30OSwaFRn7Lbhdo/PKxKWVOe6MpUQVUbOo9in2OC38IJ0pzw9s5DW+6+Sj+m/EDH84NA7boVV0eOJkgVkycBqe/YPS2bxQ9NbWNoehfCr4ojcLgAsQY6awqSDptzGVpM0f/9uJ7HtSXypeWGSt5tsE2jPSHlUeW3/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684335; c=relaxed/simple; bh=vYKZ7UU3d6W0XWpUl3LQ77RivMsd/ygLc7/+TypmMX0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Hy8acGzjmbZfkr4B6+vNOr71IFuHQcPhZSp1SxADuJtR21irIt3NbFW5Ku6QWAxlKEzaF9V+XPmqzJAbGXPNsM7l9jcmyfjerG1FNxJME/WF4PzqmFZk1WYl5rd/qPdk2blH5w09hq4xIE6TroPbDQe90cmtv3xra2BOcdFyAaY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GwmtWyIW; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GwmtWyIW" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-22e7e097ef7so35833175ad.2 for ; Mon, 19 May 2025 12:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684333; x=1748289133; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=FgAhtpYqG4jLSkLI7df7b5Hm2UBWO/lbheIxXFEUD3s=; b=GwmtWyIWTwpwQ0RmN6Xb1ctrI98ZJ3Yz4cNY9X+RPLXWAIrqvZ/61p49+H2tO0A9vB 0j1XUaZFQlTxzlwbn/Cdc3n66Kkh6QTzRr1RA2pqzLNah9in5KU3bB7Ep9Y7n8TnE3eL KHEvwwh+Gqo0EaKUfCxpsjbZqo1FBBN0eoJtWBXCa5dcG1F9AuqT+nl0stIRqixesAKS 8LpofQ1hc9C2wDVQI4ww7UE/JG5ku7nL/hzMxYSt8ZrtrhLsxPQN1EzULJ2t4TfMeMTY ONS9TmPc1QglS6iJMggTFYMhzNsaEGv9YF3FoR/2zKQL49JlWNCMITAQFVYxDSmIq5XD nZnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684333; x=1748289133; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FgAhtpYqG4jLSkLI7df7b5Hm2UBWO/lbheIxXFEUD3s=; b=qLKhmbrQUlMbg4rK1rOlbYDXE1/nddJlEy0Vy3PGCE1bjAyFjW8QQuIr0Js2zfIiGi iMXD8y/SQambVmvRFHWXJghL+KLEJCJbonPwJUoAQLVaYVkpdfjVcDRwof7Lu8Msg4IW xTeyFzPhUXbAk3/K3RgWSyxoWpRNlEBZhRnOYHObZzkhr7HcS7XVu0pwgNrqLTaASVsI KZFspyU/XCU2khhvPpOmXkQ9vgpoOvApkp85s0IxRqFKzX6mSWyOX635j1PBWqT6xhYU 8z/uvRXe96afuMNwZD/odraeZB06fK6rUNBJhh5tMnNFfFVOZczv1IR1rz81yL0HsYKw WrTA== X-Forwarded-Encrypted: i=1; AJvYcCUaiWQEpVwHoAOKZTAIv30IozyggypaIztMZ2gbXbHf+UqDYpOQ8ZHHeSerOJbgxZX746gCrk/Fxc2U2P4=@vger.kernel.org X-Gm-Message-State: AOJu0YwOxjM8EDN6yQeLYUKlcUd9IiRMDYx6n92H8pkO2sBAfgK8ttxV rvDOMUUKmmUaTs0qiGnZOnZPWoN85PTp2XpoUh3nrG4JfsMXYELzw8BwrPrOa+Ip53QJZ+bDdDV W8mqGsiofgw== X-Google-Smtp-Source: AGHT+IH1kT3MN3SYAmc8uUe08DCjTdzbnCvrlmmF/wDovWUwVi+lLGNVgvguJC9H+PaoKTd+AZaNUwKtVAd6 X-Received: from plblm14.prod.google.com ([2002:a17:903:298e:b0:220:ca3c:96bc]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:fc46:b0:231:cb8e:472e with SMTP id d9443c01a7336-231de3b9eedmr194639595ad.46.1747684333058; Mon, 19 May 2025 12:52:13 -0700 (PDT) Date: Mon, 19 May 2025 12:51:40 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-4-irogers@google.com> Subject: [PATCH v3 3/7] perf python: Add evsel cpus and threads functions From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow access to cpus and thread_map associated with an evsel. Signed-off-by: Ian Rogers --- tools/perf/util/python.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index f3c05da25b4a..ead3afd2d996 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -781,6 +781,27 @@ static PyObject *pyrf_evsel__open(struct pyrf_evsel *p= evsel, return Py_None; } =20 +static PyObject *pyrf_evsel__cpus(struct pyrf_evsel *pevsel) +{ + struct pyrf_cpu_map *pcpu_map =3D PyObject_New(struct pyrf_cpu_map, &pyrf= _cpu_map__type); + + if (pcpu_map) + pcpu_map->cpus =3D perf_cpu_map__get(pevsel->evsel.core.cpus); + + return (PyObject *)pcpu_map; +} + +static PyObject *pyrf_evsel__threads(struct pyrf_evsel *pevsel) +{ + struct pyrf_thread_map *pthread_map =3D + PyObject_New(struct pyrf_thread_map, &pyrf_thread_map__type); + + if (pthread_map) + pthread_map->threads =3D perf_thread_map__get(pevsel->evsel.core.threads= ); + + return (PyObject *)pthread_map; +} + static PyObject *pyrf_evsel__str(PyObject *self) { struct pyrf_evsel *pevsel =3D (void *)self; @@ -799,6 +820,18 @@ static PyMethodDef pyrf_evsel__methods[] =3D { .ml_flags =3D METH_VARARGS | METH_KEYWORDS, .ml_doc =3D PyDoc_STR("open the event selector file descriptor table.") }, + { + .ml_name =3D "cpus", + .ml_meth =3D (PyCFunction)pyrf_evsel__cpus, + .ml_flags =3D METH_NOARGS, + .ml_doc =3D PyDoc_STR("CPUs the event is to be used with.") + }, + { + .ml_name =3D "threads", + .ml_meth =3D (PyCFunction)pyrf_evsel__threads, + .ml_flags =3D METH_NOARGS, + .ml_doc =3D PyDoc_STR("threads the event is to be used with.") + }, { .ml_name =3D NULL, } }; =20 --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EF6B213E78 for ; Mon, 19 May 2025 19:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684342; cv=none; b=jXXkn5nMruIGrcZAkklwpRR3MbYKFNGHuVrBEjT+SejWrSFLho0vPF05r9DsSlLgtLzxYAH6nfKHD92cbr+e+iO2KHuMw5bqqRco0Dkhh0n15j2JXyTQmg1ep0PLsSbx72BIhPr9NJjGA2rR8t84LTSnDOfo1sSm4N5nWB/jGxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684342; c=relaxed/simple; bh=Y/HNMqcQP/riAHO3HNhmmDEvvwFHYw87yxhobZtc66U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WsPPT7jVaYX5PHoSm6JaZj8avXhFp0gjmdQAVfOLe8cZxZOgnFFZyXG1lCbE4bhld1w3jh/xOx5clZevGUhB5+ZCng5ciYvqvVj6IOpz5Za7PEDe1jxLFDroQHej7WxCoLqZdNGVEn4/r3ZSbdM9Hx3EQ/4FdOCZxoQG6mlDQwM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=rWODWSKd; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="rWODWSKd" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-6c8f99fef10so5191750a12.3 for ; Mon, 19 May 2025 12:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684339; x=1748289139; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=LEC8UOjbQB4i9lwjJYkmf0JwtSt5t5y7+0+7oUgRW1Y=; b=rWODWSKduHB6Xni6LVNTzGZhrUZnxnzIzeSNEFjMgaHwY0chj64Gh5Pe9plbJNDQCY qwivDqZ9ka5LziFd7ECdA3/42cQUG5vZ0kHSVEdnve7BinN8iM9ZdWsDDEeFzcR8JbJf +QkEg7VtzBl13rGIhnwloRXKArMHXAdPS8dpA1/+FLyu4YrUPMaWwtTz7gFth6Y9UxVb j26G+/fwaLhWutV4IqVZredCQ3Uf07SA7Vgxm6uED4LqPhPz9uJec7HEs2F6UdNjZy+5 SidmrsuKNN1+2SQNKk9+78oTAxGahwOJjXXeMNoMOzDBF0v69yCZrw+BSfaRSC1nPJNX /vWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684339; x=1748289139; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LEC8UOjbQB4i9lwjJYkmf0JwtSt5t5y7+0+7oUgRW1Y=; b=Cxtsyrp/XtEEKK50ix9VBL79MJ6UyHXmPOxJgrOA6EWHd3+sk5hJwlfqFOWqBfKWJ9 MOCiG+CpO2Ov7mff10zjdDgZAVS/8EHCurNbUUFnuEg/u/9pnIAIJwNcRri8OZQzeYsm r0cgxw2uOAG9jHv+z8hQEt6rckDjV1QrOINEY/CNGAJaPR5VaBrvQ3PjVKJKKQEM1352 b/UcKybrfCIjaae7VgjWvPgjWx1rf1Su7pXiFdsBrKvjVfOLAH88rrLwHmatODudo/iY cHyAVBUgNZwTPT9pYaRsq/fMYU+GpQsBP+c+JCXs0wis9LLiiBSDG86LpPKO1Nwgmt9e G+UQ== X-Forwarded-Encrypted: i=1; AJvYcCXj9FQVhXsdqcXi+lWcKgK/JwctPFC0TGAsIQnmot3FDkXQ9LaPEKz17Cmb9YB09tXLt+UkeBCCKOglzUk=@vger.kernel.org X-Gm-Message-State: AOJu0YzEhejjPQ//9HI49nv9cMsP4tBo3xQwE76nY7a+etSvqsAyJLL+ kRa0saODvpzS10F0t4aTTPcVdsPeLLs0YMXSUrf1eYeh2UtYzAv0n0HQMAxGstYctaVUPKWorbO e0aPIpuiSZQ== X-Google-Smtp-Source: AGHT+IE4wYkkv0WQ++1iJ/s32JMqVqDb/FRQ1CdnxcBr6RgzfW4bFAGJ4ixnmqMEpDnvABzcJCFQELKK7jTZ X-Received: from pfblr44.prod.google.com ([2002:a05:6a00:73ac:b0:730:7e2d:df69]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7287:b0:1f5:8a69:f41b with SMTP id adf61e73a8af0-2170ce39a02mr20946344637.37.1747684338812; Mon, 19 May 2025 12:52:18 -0700 (PDT) Date: Mon, 19 May 2025 12:51:41 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-5-irogers@google.com> Subject: [PATCH v3 4/7] perf python: Add support for perf_counts_values to return counter data From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gautam Menghani Add support for perf_counts_values struct to enable the python bindings to read and return the counter data. Signed-off-by: Gautam Menghani --- tools/perf/util/python.c | 92 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index ead3afd2d996..1cbddfe77c7c 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -626,6 +626,92 @@ static int pyrf_thread_map__setup_types(void) return PyType_Ready(&pyrf_thread_map__type); } =20 +struct pyrf_counts_values { + PyObject_HEAD + + struct perf_counts_values values; +}; + +static const char pyrf_counts_values__doc[] =3D PyDoc_STR("perf counts val= ues object."); + +static void pyrf_counts_values__delete(struct pyrf_counts_values *pcounts_= values) +{ + Py_TYPE(pcounts_values)->tp_free((PyObject *)pcounts_values); +} + +#define counts_values_member_def(member, ptype, help) \ + { #member, ptype, \ + offsetof(struct pyrf_counts_values, values.member), \ + 0, help } + +static PyMemberDef pyrf_counts_values_members[] =3D { + counts_values_member_def(val, Py_T_ULONG, "Value of event"), + counts_values_member_def(ena, Py_T_ULONG, "Time for which enabled"), + counts_values_member_def(run, Py_T_ULONG, "Time for which running"), + counts_values_member_def(id, Py_T_ULONG, "Unique ID for an event"), + counts_values_member_def(lost, Py_T_ULONG, "Num of lost samples"), + {NULL} +}; + +static PyObject *pyrf_counts_values_get_values(struct pyrf_counts_values *= self, void *closure) +{ + PyObject *vals =3D PyList_New(5); + + if (!vals) + return NULL; + for (int i =3D 0; i < 5; i++) + PyList_SetItem(vals, i, PyLong_FromLong(self->values.values[i])); + + return vals; +} + +static int pyrf_counts_values_set_values(struct pyrf_counts_values *self, = PyObject *list, + void *closure) +{ + Py_ssize_t size; + PyObject *item =3D NULL; + + if (!PyList_Check(list)) { + PyErr_SetString(PyExc_TypeError, "Value assigned must be a list"); + return -1; + } + + size =3D PyList_Size(list); + for (Py_ssize_t i =3D 0; i < size; i++) { + item =3D PyList_GetItem(list, i); + if (!PyLong_Check(item)) { + PyErr_SetString(PyExc_TypeError, "List members should be numbers"); + return -1; + } + self->values.values[i] =3D PyLong_AsLong(item); + } + + return 0; +} + +static PyGetSetDef pyrf_counts_values_getset[] =3D { + {"values", (getter)pyrf_counts_values_get_values, (setter)pyrf_counts_val= ues_set_values, + "Name field", NULL}, + {NULL} +}; + +static PyTypeObject pyrf_counts_values__type =3D { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name =3D "perf.counts_values", + .tp_basicsize =3D sizeof(struct pyrf_counts_values), + .tp_dealloc =3D (destructor)pyrf_counts_values__delete, + .tp_flags =3D Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, + .tp_doc =3D pyrf_counts_values__doc, + .tp_members =3D pyrf_counts_values_members, + .tp_getset =3D pyrf_counts_values_getset, +}; + +static int pyrf_counts_values__setup_types(void) +{ + pyrf_counts_values__type.tp_new =3D PyType_GenericNew; + return PyType_Ready(&pyrf_counts_values__type); +} + struct pyrf_evsel { PyObject_HEAD =20 @@ -1475,7 +1561,8 @@ PyMODINIT_FUNC PyInit_perf(void) pyrf_evlist__setup_types() < 0 || pyrf_evsel__setup_types() < 0 || pyrf_thread_map__setup_types() < 0 || - pyrf_cpu_map__setup_types() < 0) + pyrf_cpu_map__setup_types() < 0 || + pyrf_counts_values__setup_types() < 0) return module; =20 /* The page_size is placed in util object. */ @@ -1520,6 +1607,9 @@ PyMODINIT_FUNC PyInit_perf(void) Py_INCREF(&pyrf_cpu_map__type); PyModule_AddObject(module, "cpu_map", (PyObject*)&pyrf_cpu_map__type); =20 + Py_INCREF(&pyrf_counts_values__type); + PyModule_AddObject(module, "counts_values", (PyObject *)&pyrf_counts_valu= es__type); + dict =3D PyModule_GetDict(module); if (dict =3D=3D NULL) goto error; --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6AE821A425 for ; Mon, 19 May 2025 19:52:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684347; cv=none; b=nV0qScIU9y4Mr++rOSq98ik3jt4bX3Q+Rw5L1RotpIBz1b8M10GC63ETnFj+/66ovaOrQrTJNlroKQFWycJ2LLXON5PAx4MluHAJjEWYvV93StvXYk4SLP8Z7HlHrs0VB0loX1TANuaIk2Avu582va+aRwf7Zv9RD8G7aA1EByc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684347; c=relaxed/simple; bh=iAgV7BW4u5uUh4ychZ6qiJayY9OaxSfuMeeVJ8Gi8f0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=detQ+W9j0J78yWIfYXgQvC5ZK4bt3LYRQWr3GmwZlgz8lP5hOrTLyhim3oZA1y7g4F5JBfnreEuWzia1R76Z4FTVo1f38Oer3BHMP3MpK+2/31GnkqZ9rZBYjzDWbTNmQzP9wy4OfQ8bnMVz0GFYtuLyL5W8lCXdgmqhI3q7PJ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=k/iqsnmi; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="k/iqsnmi" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-742c5f7a70bso1937000b3a.2 for ; Mon, 19 May 2025 12:52:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684345; x=1748289145; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=saq9JYuyHAErN9FVTy/nLE9pQHk/DpTR8gysANVHMSg=; b=k/iqsnmicgDdBAMgP0ogB2mqTTymZ2pZrAWdxGauYy3kSCG9V5EurEl30a/NAFe0wE JpDFtPME2y3/kPWkE1PCgaKTMhvre6hWwVHgfeKnOhZTwzimUeU1nFf43S+Awqn7VnUP 42Eb5WCAim9R+p/nGREbkmwkf7Ft9g+cG8j/yhZ1iBHzaffoVpLsAkZCNrEEeWcO+XuA 7qGbJv4u+sc5dZSUT/JtrQaDBUSVzm9gwg9/gTPZjH0wEExI0KwpBv1etu13bHYtLNkm OkiYCTTqfQ+If2eNA/1G5yG/vW8uWCebAJkDzfj6PC5hGZ5X5YThAZZeeoBCuEAnnPWg XzqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684345; x=1748289145; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=saq9JYuyHAErN9FVTy/nLE9pQHk/DpTR8gysANVHMSg=; b=hGr2qIn+T3/nW42XzFRJr5RsAoQjcAEIMQE9EQ8w+A+KXDrI2ESBxV1qOm40hd9xZK T43I0aS4f02KN0ewU8KoIA0pTbFs1p3V8W+aXcOlCGfP7Q/z88NmBYz3IMD3/hEgmTXW XfoOR5cCSDfzP9/NpT5MS732dfpoDhkSqZg+/u7JqcMhIt5zxx6kHBDFyOGljJ+ODIyS fdcy+HqRiiAFpfGwc97mxjw4VL+g1MFA/2TYD1VAEGMcSFjDlxeKVgQP+dwmxxFisJK4 7gVTkJ3WNV7RdP8A0P7J62wD5W61EBSx2Q8LZ2Uu/Wink1k0nOrKb5sXPaoNxuqVtx4D poUA== X-Forwarded-Encrypted: i=1; AJvYcCVY5qZIB0tVkQwyRJLHQi/M7Et4Q8EMBZblbqMP1TEsRTuSxgMENdjiex87m5yOM+6G57K5XlemKwGSfhg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0iZ2YEi/Tj+qclUwNQiJT5xD5XRCN815SREcI+rN4+65iU8Y2 oTHmVnXILwuyKiZCah+WaJvsxE4DkjKiqoeWlIiYsf1v4+d298qSFfQ5PiXNZz9XVigswDzuciL napqSEFiWYg== X-Google-Smtp-Source: AGHT+IH36TdO2shN7wIqHx2QpBMAhu0p2bXa7g0NsDHgwATqb4rk9Hb7IpGSGe9mgzdyZ4suzeocUIL+Xp/R X-Received: from pfbjt23.prod.google.com ([2002:a05:6a00:91d7:b0:736:38af:afeb]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:391a:b0:740:a879:4f7b with SMTP id d2e1a72fcca58-742acd5115amr17650760b3a.18.1747684344784; Mon, 19 May 2025 12:52:24 -0700 (PDT) Date: Mon, 19 May 2025 12:51:42 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-6-irogers@google.com> Subject: [PATCH v3 5/7] perf python: Add evsel read method From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gautam Menghani Add the evsel read method to enable python to read counter data for the given evsel. Signed-off-by: Ian Rogers Signed-off-by: Gautam Menghani --- Ian modified from v2 to make the API take a CPU and thread then compute from these the appropriate indices. This was discussed as the preferred API with Arnaldo: https://lore.kernel.org/linux-perf-users/20250512055748.479786-1-gautam@lin= ux.ibm.com/ --- tools/perf/util/python.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index 1cbddfe77c7c..281e706e102d 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -888,6 +888,37 @@ static PyObject *pyrf_evsel__threads(struct pyrf_evsel= *pevsel) return (PyObject *)pthread_map; } =20 +static PyObject *pyrf_evsel__read(struct pyrf_evsel *pevsel, + PyObject *args, PyObject *kwargs) +{ + struct evsel *evsel =3D &pevsel->evsel; + int cpu =3D 0, cpu_idx, thread =3D 0, thread_idx; + struct perf_counts_values counts; + struct pyrf_counts_values *count_values =3D PyObject_New(struct pyrf_coun= ts_values, + &pyrf_counts_values__type); + + if (!count_values) + return NULL; + + if (!PyArg_ParseTuple(args, "ii", &cpu, &thread)) + return NULL; + + cpu_idx =3D perf_cpu_map__idx(evsel->core.cpus, (struct perf_cpu){.cpu = =3D cpu}); + if (cpu_idx < 0) { + PyErr_Format(PyExc_TypeError, "CPU %d is not part of evsel's CPUs", cpu); + return NULL; + } + thread_idx =3D perf_thread_map__idx(evsel->core.threads, thread); + if (cpu_idx < 0) { + PyErr_Format(PyExc_TypeError, "Thread %d is not part of evsel's threads", + thread); + return NULL; + } + perf_evsel__read(&(evsel->core), cpu_idx, thread_idx, &counts); + count_values->values =3D counts; + return (PyObject *)count_values; +} + static PyObject *pyrf_evsel__str(PyObject *self) { struct pyrf_evsel *pevsel =3D (void *)self; @@ -918,6 +949,12 @@ static PyMethodDef pyrf_evsel__methods[] =3D { .ml_flags =3D METH_NOARGS, .ml_doc =3D PyDoc_STR("threads the event is to be used with.") }, + { + .ml_name =3D "read", + .ml_meth =3D (PyCFunction)pyrf_evsel__read, + .ml_flags =3D METH_VARARGS | METH_KEYWORDS, + .ml_doc =3D PyDoc_STR("read counters") + }, { .ml_name =3D NULL, } }; =20 --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1F8C21A424 for ; Mon, 19 May 2025 19:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684349; cv=none; b=WvUt1NB4CO5wfBZj0YdUwoZqZAkwKQulPxK4MNpy3ygoVWrzbPdWR0Zd43+rJ1Kh+e6V0xunihi6P09wMrWLf6ZFw3FJS6xXLMVFCOhC2W+VijFGuKrEMhyeO1ayqsroJTBy5awzdExqzdAkfJK2zsCDHdIiR+7Z8FgeA72PqnU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684349; c=relaxed/simple; bh=mNCo31KbwnmdJjCA4qZp2lBVW7ruAesrY4qBvEuiy/Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QRbSq6+/ArWhoZrTLdKymPMFACnSaNS/BUMaXWzGPsC2s/rvEOPVCHyxK4DuN86cztDgYoRvsOtf3xLezbUOOpDVj5YObEyKBNrC/yhHmUzxLZQcrEJlbszfSV2cU+WbWlH0Chh/S3yemsc5G40Xw9DD0HkTBSRi8Rfe0IPRpBg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wihdMMWC; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wihdMMWC" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-231d7f59e03so40258375ad.2 for ; Mon, 19 May 2025 12:52:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684347; x=1748289147; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=o7/0sX/Y61rnGl/g+i/reJXtElM4CHskgtvkgIXI1mc=; b=wihdMMWCRU3hUoRBS+pIvbJWPfnPkwPm8wv6nvN7o+AlXNOy2SNRVSjT02rOnXFnVi MguzJRDvpYW5nhD/uoVS9lR6kcKjDXawcJRMwJCl4Euq3nrPp5G/hMcGEOZgWp+p8Pn/ xh8NRgx7PFRtvfzH6W8XznEAUm6e6vnrNhfmYGB4ggOS6t91xUNdkpznykRiDNV7tGdv WTVvFGqT+0lqYehkIONSQbm5O+RSWh3uzlE+M2RGYstTCcZRkQNbIu1GgRmHJpK8Uvtr SaQqSN+O6uqpMhtT6iQWM0AsAWzP9yhB9d0vGQdfKRY5Crrfd11dvkrCPBXRC3E0y3C4 zdQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684347; x=1748289147; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=o7/0sX/Y61rnGl/g+i/reJXtElM4CHskgtvkgIXI1mc=; b=kFcyaLS1ZGev97Ash/UujM6O4GSvbZ7TQBCncoVZRe1lLrsrPJCppkoyX6J3tl3wBN vhqM2OD/aZdQxDo/LxYtEOA+yOk9NioJMAN5d7YyK6CCdqhdyg4ptbaLvwXYR/T7vK+e MrCTQiD/83UZWazwTllno0F/YpUuJZnnFyDew/1IesLaJxABVCSDY60PgQx8eddngIWX loU+Z/OKmyUf6t09To94Z7qJD9+tq82LrC03+sgeRZdbtQMzrqR2nrDt/3lM9j14r4lC jRslaDm3TpmtNp0DJ1RaYSovMJv1aAkcrqF2mqRysbvGx+YB36VYoVh8tApqe5Fg2mdE cS8Q== X-Forwarded-Encrypted: i=1; AJvYcCVQNYh6iXPome93ys7MK0EI/E0CWIZTXBZKJyib0va/lO6Dsw0unOf3cb42BgpJjq/RtrlJTeXGjkQzdww=@vger.kernel.org X-Gm-Message-State: AOJu0YwCGi5aHq0e9vvkmFdNH6KB/8n4XU7WnCDN8vzhNP+ZjZFbwNyK +8ElnoIbgygW39yUrnzKtqfvNsHVeZopP8WdZkKALoiYo/ejw+Nr8Z733aui/xnRxD0canc+LKT G0+dk+zALsg== X-Google-Smtp-Source: AGHT+IFLI7mAtH2Z1AHGEe+OQpXKXOTpuCyCJ0Oj3c60Cd5aBMySKeRs74b/H9+pDg9fA2EKKIqnEv3BZ+m5 X-Received: from plbjx1.prod.google.com ([2002:a17:903:1381:b0:223:8233:a96c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e5d1:b0:224:8bf:6d81 with SMTP id d9443c01a7336-231d45ac8ffmr185503845ad.46.1747684346958; Mon, 19 May 2025 12:52:26 -0700 (PDT) Date: Mon, 19 May 2025 12:51:43 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-7-irogers@google.com> Subject: [PATCH v3 6/7] perf python: Add evlist close support From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gautam Menghani Add support for the evlist close function. Signed-off-by: Gautam Menghani --- tools/perf/util/python.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index 281e706e102d..cca744d51349 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -1210,6 +1210,16 @@ static PyObject *pyrf_evlist__open(struct pyrf_evlis= t *pevlist, return Py_None; } =20 +static PyObject *pyrf_evlist__close(struct pyrf_evlist *pevlist) +{ + struct evlist *evlist =3D &pevlist->evlist; + + evlist__close(evlist); + + Py_INCREF(Py_None); + return Py_None; +} + static PyObject *pyrf_evlist__config(struct pyrf_evlist *pevlist) { struct record_opts opts =3D { @@ -1268,6 +1278,12 @@ static PyMethodDef pyrf_evlist__methods[] =3D { .ml_flags =3D METH_VARARGS | METH_KEYWORDS, .ml_doc =3D PyDoc_STR("open the file descriptors.") }, + { + .ml_name =3D "close", + .ml_meth =3D (PyCFunction)pyrf_evlist__close, + .ml_flags =3D METH_NOARGS, + .ml_doc =3D PyDoc_STR("close the file descriptors.") + }, { .ml_name =3D "poll", .ml_meth =3D (PyCFunction)pyrf_evlist__poll, --=20 2.49.0.1101.gccaa498523-goog From nobody Fri Dec 19 14:24:17 2025 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8BD721ABD4 for ; Mon, 19 May 2025 19:52:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684351; cv=none; b=s3cm0e8jypCkrpns6tX8CmjA7rBz05Kc+JZi89Y6tgkk1WJ5OBIl7C/ntnrpl9mWtLVWyUqzFteqVjdxz2P+PDrCorrao10Fjh3UvEM+KeY7xJOA0LJlSvk8fEDrxPOllmpU4LUXdbO755HmzevhdB5NhfFC+oxrrF2EwSeyzaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747684351; c=relaxed/simple; bh=eSrz67FjkchHelHVafOEmeAWHUr6NPRPEc/rDzBRpBU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=C8z4o14jEkuJu57b9AQbI4j+rQJlQvxhNxvX91D/PMHQYwpA1pI8ZiwWphrrhPwnFFsSUpKYpVVZuan/bgAkpMLDNmABebapYzhus0GkT1QHU9vGg07J9D9EMZJpve8SI3EbyJVPZpBqexUTKJFoYlzn3hcqguqSxwZEf2erD7g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=BP/HmT3w; arc=none smtp.client-ip=209.85.128.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="BP/HmT3w" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-708b13627abso81046937b3.2 for ; Mon, 19 May 2025 12:52:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747684349; x=1748289149; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tPgXaI8tTFRwCefa6hNl0JPB2ZmpLpvML91z05dCmvc=; b=BP/HmT3wqOXkbxBe3cWLT6uQWQCGlIZh4j7Rh1epn3t5yEta1kTjlgwd23r/r7TDJH FaYQb0WU3hCLhJi50HcUb+pPOEIT8kCfP15pr2OpONd0tXWhGJi1LU43a0iR7NhwmQOC lZ9vkJOin1+kx4MLJpzCfAxGOLGxtvWq/pMecXcVDXdM19i2iOyirSISdD2OOyLcHbGU Vwoh2szLwZ4DhSZmkC5gSVv6x1hVdymHqJ0AieQtIMoJeeRDbalSMiwNmmHsc4uK6f2t mBrXTsABAJdcAQHCQ59JM3MliQi+3S+x67+qaaHqWn0w9/zBobrxrSQiuXlf04hO2EoX wVHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747684349; x=1748289149; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tPgXaI8tTFRwCefa6hNl0JPB2ZmpLpvML91z05dCmvc=; b=J3eBwq5cc2sX3lgzf8kBu2dNgwZ3U0rsoZ0gLUeSJviAawFmJjCWg8AgRBtl8rVlO1 ZpX9mLLHTIBPDLCPtq7jxphns6nTeOMi2OzwMgATDO5j+JVJLDGi29HA6pbH4GQjvR3B cxDxHMML86TMSOHOkTdV8hVCB+Wz2fl7F/TcSknuYqjq58VK4Ss3bSPP7xB8nMpQrnlF QVRU7VLJwsy9ai6QUALl3A18nylk4fEZI1ZbCTmrvV5OdjDw5TevVgc1Sid+fLKNApTc 36RISU1y2OI1zPgIiCn0RsFsLpljPRxYexK9SSJ42yoxKL9QuCqaNbg7ec5PnLwG6iWB Fvmg== X-Forwarded-Encrypted: i=1; AJvYcCWdnJnvPe9iwJNSx3dZX6OpxMMDfkAqkwg4ds7nJW0pmb3l0OBGRUkghwjmnQ+lmGfqIpKxNKZWt502TUM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywzzo6l5p0Noqgm7YyD+ZnY6y95XpUSQSHg7yAg14VhKN2cMLRc XP3IGyycoTaT8bRYQk+PrIuDJT3q8Ooj0pEm7481yzGRleMYJcWO00LqcMZgLtHWQ3IhYoY2IRI oBWu0GtnpJg== X-Google-Smtp-Source: AGHT+IE5I8VoxfmFAqXpjWibQjEDWEqVKRsT3H7Fw6rw3klfVG1MgxDQDM9hd8bGKD0W7XqOKDtbBGECTEBK X-Received: from ybdm17.prod.google.com ([2002:a05:6902:6b11:b0:e7a:b53d:558]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6902:488e:b0:e7b:9972:5cc with SMTP id 3f1490d57ef6-e7b997206c0mr7412820276.24.1747684348890; Mon, 19 May 2025 12:52:28 -0700 (PDT) Date: Mon, 19 May 2025 12:51:44 -0700 In-Reply-To: <20250519195148.1708988-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250519195148.1708988-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250519195148.1708988-8-irogers@google.com> Subject: [PATCH v3 7/7] perf python: Add counting.py as example for counting perf events From: Ian Rogers To: Gautam Menghani , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , Howard Chu , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: maddy@linux.ibm.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Gautam Menghani Add counting.py - a python version of counting.c to demonstrate measuring and reading of counts for given perf events. Signed-off-by: Gautam Menghani Signed-off-by: Ian Rogers --- Ian modified from v2 to make the API take a CPU and thread then compute from these the appropriate indices. This was discussed as the preferred API with Arnaldo: https://lore.kernel.org/linux-perf-users/20250512055748.479786-1-gautam@lin= ux.ibm.com/ The use of a thread_map and cpu_map was also removed to make the code cleaner, instead the cpus and threads of the parsed evsel are used. Support for command line events is also added. The indent is reduced from 8 to 4 to match the preferred python PEP8 indent. --- tools/perf/python/counting.py | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 tools/perf/python/counting.py diff --git a/tools/perf/python/counting.py b/tools/perf/python/counting.py new file mode 100755 index 000000000000..02121d2bb11d --- /dev/null +++ b/tools/perf/python/counting.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 +# -*- python -*- +# -*- coding: utf-8 -*- + +import argparse +import perf + +def main(event: str): + evlist =3D perf.parse_events(event) + + for evsel in evlist: + evsel.read_format =3D perf.FORMAT_TOTAL_TIME_ENABLED | perf.FORMAT= _TOTAL_TIME_RUNNING + + evlist.open() + evlist.enable() + + count =3D 100000 + while count > 0: + count -=3D 1 + + evlist.disable() + + for evsel in evlist: + for cpu in evsel.cpus(): + for thread in evsel.threads(): + counts =3D evsel.read(cpu, thread) + print(f"For {evsel} val: {counts.val} enable: {counts.ena}= run: {counts.run}") + + evlist.close() + +if __name__ =3D=3D '__main__': + ap =3D argparse.ArgumentParser() + ap.add_argument('-e', '--event', help=3D"Events to open", default=3D"c= pu-clock,task-clock") + args =3D ap.parse_args() + main(args.event) --=20 2.49.0.1101.gccaa498523-goog