From nobody Fri Dec 19 08:06:18 2025 Received: from mail-oo1-f74.google.com (mail-oo1-f74.google.com [209.85.161.74]) (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 A12AA28C5D6 for ; Thu, 10 Apr 2025 17:36:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306609; cv=none; b=dNV+FP640DEJ7NTaF1Qm3ir366MssPiyFAAZ/LwwdWCCnYhCuM7YkgXwvh/wrcfmMprD0aoHRzxq4Jf5xrmCfZ9e1BG6FiNHF22FnETYtmffrmRfb6NhwB0RqEQ/RtvPDTG3JIqWC+mbZzKub33FtYM776NUniLE7+Vr7pcwEAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306609; c=relaxed/simple; bh=rjDVXA1e48wiJP09H+3ttLssvR00WBTP8TaXhYipl0U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=sGi25EDmHq0EtPrLQCUecIOSFeDVsxe4AFxxvAm7fHFKToHiJu7e2MOeWkbH10/3jow3RZOZND9P8jQW1JqLSVw46oH52bXqAvA8vJ2E/pPztoFIwd7WKs17qTOVM1y5Yh0NqUp1WesDxt1zLK/tkEz5OWYMxgu+mxOY4Zjht10= 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=NAKOTTIp; arc=none smtp.client-ip=209.85.161.74 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="NAKOTTIp" Received: by mail-oo1-f74.google.com with SMTP id 006d021491bc7-603fbdab0f4so569076eaf.0 for ; Thu, 10 Apr 2025 10:36:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306606; x=1744911406; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=8v+NZetBaqzwnjvAKJtemj1czEgvtWJ39sNPAoy10bc=; b=NAKOTTIpT9QtglPYg6rdkzI4CGwVcrjBVtOV+gnssPJGFqCu5W7hhUuEYw2qhJQjl0 5J9yzpOePjizoDnjgZsAqvtores2uXbMQ2B9jhnxeIVFYUPecyrZu0plRn8UW0BLFm3P D52aeUTojCVKsxhqNHhBRzyS6rHo5UNDXdKsUqCbCPWM1yIGyAfwhiIUoZdpjYmnSrfj KTRXvQsgbxT1LZVstLu4iWJ7XJYWrCirUneULhReHQjrPwktcOaaR2dlhFVEutgNfDN+ wuxk5+5OwrOPcLiCMNBmGXa/i3cgCj5HfNzOiMhjczILcFok/D9XDidGTBtYdhutNnYR kW3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306606; x=1744911406; h=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=8v+NZetBaqzwnjvAKJtemj1czEgvtWJ39sNPAoy10bc=; b=miXsbPCGazI9ZdHut7nWmI+ISBKppqLyLTaopcKcedHLJovhrHobC5Eg3noyfDgC6l HS/ByfLCpNXaUIdpgITwwgyG3wC9rvjtRt2k/6ThFQ2O1BlvuMjvT2nhsa8O4nAczI+y LaH0YZSYVfHNFZQYlXS7Ddkgi3KPDkXyYJrKdRoThONlnNp1X/zFGaThwTvKbba35PFp WQ8mYQjkgGVaMqlMYBaBRr6hG5bK5gHvC4Dn6VJvOStrCDXaRme+xeNhYELUwxCvRBMj pA7qydCQtYFKCJyodSbIhwzUowQXBgjfsDH1EKHvdUEIofr7VBQWs7NvHzLYobHS0f/U bSoA== X-Forwarded-Encrypted: i=1; AJvYcCXKXHSEdwT9ZATAuQRWG+9wvH8H7iGIGnrI83ECEjw1m8KsQIw86pFEljDuFL2W2S43AOJ4uiye8q9O77g=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+3Gvh79+IB2MrTP1IvUI5lDBCl32iJIaRyCl4ESOhaTf++oXl tuIQN6Y6kCdmHXOMlMKa6yaJQiW7ifoM+EIQrVgl9xX1o8uAseJeTp2g6oKGKuufA8rpOwVDbsL qlKZB+w== X-Google-Smtp-Source: AGHT+IEwb9NbM9CUIgMKI0aGctFt6E85eoY4vwStAAMOKPWtdzhdBRq2bl9/AqJTGoTmUxudC+3nKm0UQUw6 X-Received: from oabwo9.prod.google.com ([2002:a05:6871:a989:b0:29f:d208:6db]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6870:6f14:b0:29e:53cc:a6c1 with SMTP id 586e51a60fabf-2d0b3593597mr2371126fac.6.1744306606709; Thu, 10 Apr 2025 10:36:46 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:20 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-2-irogers@google.com> Subject: [PATCH v2 01/12] perf tests record: Cleanup improvements From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove the script output file. Add a trap debug message. Minor style consistency changes. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/record.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/reco= rd.sh index ba8d873d3ca7..05d91a663fda 100755 --- a/tools/perf/tests/shell/record.sh +++ b/tools/perf/tests/shell/record.sh @@ -34,13 +34,15 @@ default_fd_limit=3D$(ulimit -Sn) min_fd_limit=3D$(($(getconf _NPROCESSORS_ONLN) * 16)) =20 cleanup() { - rm -rf "${perfdata}" - rm -rf "${perfdata}".old + rm -f "${perfdata}" + rm -f "${perfdata}".old + rm -f "${script_output}" =20 trap - EXIT TERM INT } =20 trap_cleanup() { + echo "Unexpected signal in ${FUNCNAME[1]}" cleanup exit 1 } @@ -239,7 +241,7 @@ test_leader_sampling() { return fi index=3D0 - perf script -i "${perfdata}" > $script_output + perf script -i "${perfdata}" > "${script_output}" while IFS=3D read -r line do # Check if the two instruction counts are equal in each record @@ -252,7 +254,7 @@ test_leader_sampling() { fi index=3D$(($index+1)) prev_cycles=3D$cycles - done < $script_output + done < "${script_output}" echo "Basic leader sampling test [Success]" } =20 --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 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 389EE28CF66 for ; Thu, 10 Apr 2025 17:36:49 +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=1744306611; cv=none; b=sb4/XcpGtAlqD+UhAe9UAUmZPk1q+SLk5WIrcVgKxcOmKFDPEfFJkA4B1z1zHnYZHcr/1CCE7+oLkwaRmTPJXAKsIoyKLJkSSjcNqES4z+tocWcheERPrQRe5Upu9uL9I+/U5Q2y6Kvgbaa18yhV38mMEXn3PmT5zJQwy85E7aY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306611; c=relaxed/simple; bh=G1gAgZUvOfcfqAATJ+QPOb6uS3I1bA5GRxZVqHLeqq4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=c+7b6lZmYlaoEEYKVUZYp6N7ykPtTlH9pn+LJnrdo7XVL68Twsr1ZFN56oie/++0uy7IWRbcXs0wvgigc1iiqi7yw/ZBBPS2wsKNoL8nOF5gLFoet84XibKnHB2SGl1LTHteD8W/5moMvbrd2kAbUwX93sbMJ1dvL8500C3jvJc= 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=nZ2je+Ut; 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="nZ2je+Ut" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-227ea16b03dso14091825ad.3 for ; Thu, 10 Apr 2025 10:36:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306608; x=1744911408; 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=jBep772rAPnbEAws0gmIZzBWpvWIV/iE0VJyGXGhVdQ=; b=nZ2je+UtpxEcOJRbSuZk1OVhBg5siLcwYycv54wdQGkfJjDkrHZFWbpZm9hnJye/KX oOuZJtG89k+bnXN8h/Zt/12gxmGtxsj4PNSrkqDxmkdjj7g6vbb96IRsUo3ylccgeqIk aN61sgvqFWEed+KihjidyRa9rkQYNohtLOGq/doePbdJTEEtFUclUoANte8l/EaLV4o6 UHxPQCj6D9Lkynms2mpVy+6Oktspp8z3viXLh1R17vO/Z+nH8kRo3BgD07tRy7zdAKCc /85VPmWfS6Tvg1owPSpaCRc/9C42hJeCcJjJ0VlzJhhhxrGfn1t/Q9eP/VQVecXsNPVF CXuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306608; x=1744911408; 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=jBep772rAPnbEAws0gmIZzBWpvWIV/iE0VJyGXGhVdQ=; b=IVAfhnSBKMohYH8qLOf2kVlbYKUvz0CSWQdApfD3UMdHaBNDts9D1Rw++Mu345OmmS HXnRJFQpOWgmwfhVFN9eC9un7C7aSw4CwxZCCQWiTbGsaK3yvxmJnjWrfO5tY0yErN/S sBrqH2yVS+tT1Rs42BlZp+KCDAZwDxTjOpCGg3cNJLpC+LqDO0fAzvri9qlr3luPRbto lOrMbuPLZA3GG6bB79xW15HW3nzM8SVd4EnLP/NWO1Y2GoqyfnNLdQrP6yKsr4iBXiaD 7jfgIXC55bP24/VvaVyBdAJkLL5fzJgSb+Mx1/DkfOTctde7sNe0XzmUqgKtBHRU7qYl KEjw== X-Forwarded-Encrypted: i=1; AJvYcCVl9D57MKU/3KcHHnHxNo8pb5lGtNV6CzK2wTt/5Bp/xAKCooKEZ4GE21Ygh2OzlOVqnHM7A/jUZ6LiNJQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yzf0VdA65a3teRyEiC8Ss5RN43D9pm1TdoAmCymGktb3cUxmEf8 btgXDQ8SLkvHpGnqFOE4q0cYz+qj/Uz+WS8UJjLeRpncPcYiRKRNJLpVEN2FyAf6uRHTmJYSh0+ K6n3g5Q== X-Google-Smtp-Source: AGHT+IFTo0lN/DGGBZMtGdBm9V4Gd+ZDzBjeI4vL2FnktYYk1TbWtujx99ZirSakEtrM/OA2kI73D73SRWn8 X-Received: from plal20.prod.google.com ([2002:a17:903:54:b0:215:48e7:5dc8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d4cc:b0:21f:617a:f1b2 with SMTP id d9443c01a7336-22b42c5bd38mr51689375ad.46.1744306608453; Thu, 10 Apr 2025 10:36:48 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:21 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-3-irogers@google.com> Subject: [PATCH v2 02/12] perf bench evlist-open-close: Reduce scope of 2 variables From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Cc: Arnaldo Carvalho de Melo Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make 2 global variables local. Reduces ELF binary size by removing relocations. For a no flags build, the perf binary size is reduced by 4,144 bytes on x86-64. Signed-off-by: Ian Rogers Reviewed-by: Arnaldo Carvalho de Melo Tested-by: Arnaldo Carvalho de Melo --- tools/perf/bench/evlist-open-close.c | 42 +++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/tools/perf/bench/evlist-open-close.c b/tools/perf/bench/evlist= -open-close.c index 5a27691469ed..79cedcf94a39 100644 --- a/tools/perf/bench/evlist-open-close.c +++ b/tools/perf/bench/evlist-open-close.c @@ -46,25 +46,6 @@ static struct record_opts opts =3D { .ctl_fd_ack =3D -1, }; =20 -static const struct option options[] =3D { - OPT_STRING('e', "event", &event_string, "event", "event selector. use 'pe= rf list' to list available events"), - OPT_INTEGER('n', "nr-events", &nr_events, - "number of dummy events to create (default 1). If used with -e, it = clones those events n times (1 =3D no change)"), - OPT_INTEGER('i', "iterations", &iterations, "Number of iterations used to= compute average (default=3D100)"), - OPT_BOOLEAN('a', "all-cpus", &opts.target.system_wide, "system-wide colle= ction from all CPUs"), - OPT_STRING('C', "cpu", &opts.target.cpu_list, "cpu", "list of cpus where = to open events"), - OPT_STRING('p', "pid", &opts.target.pid, "pid", "record events on existin= g process id"), - OPT_STRING('t', "tid", &opts.target.tid, "tid", "record events on existin= g thread id"), - OPT_STRING('u', "uid", &opts.target.uid_str, "user", "user to profile"), - OPT_BOOLEAN(0, "per-thread", &opts.target.per_thread, "use per-thread mma= ps"), - OPT_END() -}; - -static const char *const bench_usage[] =3D { - "perf bench internals evlist-open-close ", - NULL -}; - static int evlist__count_evsel_fds(struct evlist *evlist) { struct evsel *evsel; @@ -225,6 +206,29 @@ static char *bench__repeat_event_string(const char *ev= str, int n) =20 int bench_evlist_open_close(int argc, const char **argv) { + const struct option options[] =3D { + OPT_STRING('e', "event", &event_string, "event", + "event selector. use 'perf list' to list available events"), + OPT_INTEGER('n', "nr-events", &nr_events, + "number of dummy events to create (default 1). If used with -e, it = clones those events n times (1 =3D no change)"), + OPT_INTEGER('i', "iterations", &iterations, + "Number of iterations used to compute average (default=3D100)"), + OPT_BOOLEAN('a', "all-cpus", &opts.target.system_wide, + "system-wide collection from all CPUs"), + OPT_STRING('C', "cpu", &opts.target.cpu_list, "cpu", + "list of cpus where to open events"), + OPT_STRING('p', "pid", &opts.target.pid, "pid", + "record events on existing process id"), + OPT_STRING('t', "tid", &opts.target.tid, "tid", + "record events on existing thread id"), + OPT_STRING('u', "uid", &opts.target.uid_str, "user", "user to profile"), + OPT_BOOLEAN(0, "per-thread", &opts.target.per_thread, "use per-thread mm= aps"), + OPT_END() + }; + const char *const bench_usage[] =3D { + "perf bench internals evlist-open-close ", + NULL + }; char *evstr, errbuf[BUFSIZ]; int err; =20 --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 E479C28EA41 for ; Thu, 10 Apr 2025 17:36:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306612; cv=none; b=rL6aO8TjOxqi7ZbRn/QQjgHP5Fp4Wd+fzvbJX+vfEHlbzo9vmX1OD1OULgO930jB+zAh/FUYnWwyvYsysKvSdPV0EgCnUTebWhUQjfcb/d0miQCJSy6pCcvJsAqDgIl/ec+I0dIuVtgR8EIPzqyZHvd2bNddcknG/++sRPfAtdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306612; c=relaxed/simple; bh=X1Vcc+qhXCvLi9/obxnmkB3AaP6EATpW0kQwymqqBMY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=fJXHznOuH+cbAEW8bf1lRFp/OxYLjpSN8vZLHe0bpLFl9ZyxST9M8D+E9ohKl/6dV/L3TKjFErqFbSKNcfG+6U065HQ7Ppjg8iQTgjkMFLy06+dJuWrfRKCU1EneI21A3QSOg3HSJuZTFlLP+OAuNL8hfsvQBG25ZQZB6YyoGto= 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=H48Jm23n; arc=none smtp.client-ip=209.85.216.73 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="H48Jm23n" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-306b51e31c7so873934a91.1 for ; Thu, 10 Apr 2025 10:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306610; x=1744911410; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=4ozcx3/NEBUmkXi0QyyKv5MD92Ay8My7ba9iOvtFuV0=; b=H48Jm23neCtCAc4RWQtkGTwQCUP3gJ3Ej3+tuTTfSaGJNJgmPLYsAfcimzR0IAcYxQ /P+hg5kHPJtZ4gaNOn1dOHaqAcSr6jr/0jejCMPlZ7zV0NYj0sOEr2bxTqRLAVVNUOG4 fgfDNcpxr5Nyg4Pvmo1D91r0itfdoRVkGaVgL0usUHdeC0vA3CEAkI8n6LuG2AXuZSKf 08xYSV9coscZQpOugaGUfXOOdinPKPSz4H0RNwuiIX5HbpLOe/GMT71LKVodm2spDVh4 z7Y4hQ54snq/2YevMM+h8kWYbQ/IKrdPGDCPKaEdfwEIiuiikXmjsPM0MwSFlta2N2Gm ZQew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306610; x=1744911410; h=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=4ozcx3/NEBUmkXi0QyyKv5MD92Ay8My7ba9iOvtFuV0=; b=W9eT8EnjYmtbpxzRoj+LwbppT7dL5H2DAwtzfsBfMTFpVnhmFc3MbevlXhghJC5CbL aAMZ4MUIuYKiBajNxBGczECmsNUyXoWa1QWFK4GSz7hK3FqiOGUjsFucLxOhdwrNoZ5L 2FxAtRal5g8qGVxANXD/8f39JllpAoeLZGpAevsnC8ezQYZRJ8zqPptP70/5rvpdCOX+ FxoctqO5XGM1lQvbjnqOnHo88FJAaZJWzpFCP/3GHjqJSnZ4LdUbw2TGAETRwFWTEfq5 AbTQ34Llff0GbZOXStMgbMP5eqfl9A+1XHkXunWDO32oDjeQHOxTkfnYvqlDyKraRgIq TamA== X-Forwarded-Encrypted: i=1; AJvYcCXXq2O/9S86FUpJFl4njUKHighZxme/L3egZWQhfAzMmzpwFqz6JWKoct4FNkxIu0nSKzAWIZUt4sYMQLs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/Z20Oy+zfowOerbYpUZjyC84n5bp3XdLQ3RxHqwsR626VJDC1 Uo+Wcz58k8uEJeqs0XjtkbkBECO+XO2uH20qDT4G/P7TZNtA56I2RIH93rQk9qegV5YIt0WZ0/l 9+YKfkg== X-Google-Smtp-Source: AGHT+IHdgEuNsiGXTbMC46t9gyRQdDCOonL+w+/N7Gojul8jN+3BYg75AGrbFGU24EeEJ5jxduYta8cOlPQ2 X-Received: from pjx7.prod.google.com ([2002:a17:90b:5687:b0:2ea:9d23:79a0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:582f:b0:305:2d68:8d39 with SMTP id 98e67ed59e1d1-30718b6f388mr6668076a91.12.1744306610002; Thu, 10 Apr 2025 10:36:50 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:22 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-4-irogers@google.com> Subject: [PATCH v2 03/12] perf parse-events filter: Use evsel__find_pmu From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rather than manually scanning PMUs, use evsel__find_pmu that can use the PMU set during event parsing. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 5152fd5a6ead..ad5b40843b18 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2459,9 +2459,8 @@ foreach_evsel_in_last_glob(struct evlist *evlist, static int set_filter(struct evsel *evsel, const void *arg) { const char *str =3D arg; - bool found =3D false; int nr_addr_filters =3D 0; - struct perf_pmu *pmu =3D NULL; + struct perf_pmu *pmu; =20 if (evsel =3D=3D NULL) { fprintf(stderr, @@ -2479,16 +2478,11 @@ static int set_filter(struct evsel *evsel, const vo= id *arg) return 0; } =20 - while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) - if (pmu->type =3D=3D evsel->core.attr.type) { - found =3D true; - break; - } - - if (found) + pmu =3D evsel__find_pmu(evsel); + if (pmu) { perf_pmu__scan_file(pmu, "nr_addr_filters", "%d", &nr_addr_filters); - + } if (!nr_addr_filters) return perf_bpf_filter__parse(&evsel->bpf_filters, str); =20 --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-ot1-f73.google.com (mail-ot1-f73.google.com [209.85.210.73]) (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 A49CF28EA73 for ; Thu, 10 Apr 2025 17:36:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306614; cv=none; b=TmrKHUtXbkSXREjJBcJ2o89ViE0bYoDY+qr1BvVzGbWn4VJew9KSrp3lLOU37gXKp3yHhf6Y8jE6/Fo9ofEWerrF67560wEKCNF9hqHT8Xg+lEzrJGgDrVSpu7QyxKW5nHPNQOKGOhYnHuDhQyxNICmxvU7HN6vzrt102OJM3Eg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306614; c=relaxed/simple; bh=gTyDhZCTno1IXSRzvLwzt6dqW5aQfNugAfWRkxe3950=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=haV4t+tiDTv/tkGUTZNqfcTZSwyjGZAZOI+1zRmhBH0ODi908WD07YjqA0HwN3F+ZIIh2ZWomZqtvGxD6zk2EXelYW2AyVu/IAUHSFEByaSsop50tfqdA5aVbg+pd8B1+d3VvsS9uK8eNd6zmmZcTaIz1/DPS9BfXyevtjveJ3k= 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=wrfCGtSk; arc=none smtp.client-ip=209.85.210.73 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="wrfCGtSk" Received: by mail-ot1-f73.google.com with SMTP id 46e09a7af769-72b881599f6so947008a34.1 for ; Thu, 10 Apr 2025 10:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306611; x=1744911411; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=mcWxwltoH9XL7Cxrn6JcmLq/7/2rEiSHhwmo34ZV4XA=; b=wrfCGtSkpVXOCy9LNU5qJnoqOFo76dEsZoCYSSsgBpC1dpfneeR5z4pE7K+KPhh3ll MHZ8J7nyVjYBBeMiWxDRuufnzYag4msPZ7RYrFzXL+90eJl+LO0ZBwKlwilcBbCoY9eh GzXcdZ4ALVxMXjaMrOv9zgFb7l9ZUMyqcshqG310188/fXC/CVQpJBntZUm7+fFLpE3c FMoSlICKFsPUfBlxqlTmfRCfQ6FLBfbDJliw42YwMFWABRU7VrQTivAJKoFmYBw/0pk3 dYxi5BdFk9KjKhteBmsErcxyRYt4Vw9tprgcJhIldvtLjalWtNB5Ba/DpnAfKej5E9lu eWrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306611; x=1744911411; h=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=mcWxwltoH9XL7Cxrn6JcmLq/7/2rEiSHhwmo34ZV4XA=; b=kejYsRcGTndkk03zDhaB6pt8/viAHnjye5A+NMZvTW1+mX/R9JRnYheMCWVWuogsnS O8fUh4Hb6RdDFc9byJM882H2+N1vUThjVDmxGBWPos2bSlV2W2knaMhiC02zRCGD1GrZ vVyO/aFOIVWmYH/tgru4bS4hHakjahK4oXbGIhRqLPND73ywhcFostL2J+i5tIMtGFoa kab2VXK0TRHZACll8fYJmt2COLNheTMclHiMg8Zxtt0l+OPAgPlvY7r6IXyaGQdsTcJk H74OJzxOykF4di0SOtdWsrw1BiL75/UgM99uPELNjgAlbmByBhB1rvabxYTX1K10gLNh mLqg== X-Forwarded-Encrypted: i=1; AJvYcCUE8aC3jFjbKVhUlI//Qc2ARhtOx9ZCw79/AZIKbZfyeVb/PMX6lpE920TkmsJZKeY48+2r2afFwI9YuMI=@vger.kernel.org X-Gm-Message-State: AOJu0YzpSDC4PgteZA1Lub/hexJlwRxD/jSwDZPK9lyW80mAw66ta5jh bDNJswKuiOJPE1Tl82/SCu3avdh5NMkR9H5BoqbfVM0DcaKEV1DS525N9sFnheteAoHG5EMYLNB 7WqRJUA== X-Google-Smtp-Source: AGHT+IHulExf+Mv/Q1ZS+sBiHCCJIKDXZ9ldVCWeUBFQHANG4wq6xirGW1Tq6sYLc1Mhwf3q7i7XpglcaFSp X-Received: from oabfl6.prod.google.com ([2002:a05:6870:4946:b0:2bc:6ad3:5671]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6830:25c3:b0:727:3e60:b44b with SMTP id 46e09a7af769-72e7bae6f1bmr2044467a34.14.1744306611665; Thu, 10 Apr 2025 10:36:51 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:23 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-5-irogers@google.com> Subject: [PATCH v2 04/12] perf target: Separate parse_uid into its own function From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow parse_uid to be called without a struct target. Rather than have two errors, remove TARGET_ERRNO__USER_NOT_FOUND and use TARGET_ERRNO__INVALID_UID as the handling is identical. Signed-off-by: Ian Rogers --- tools/perf/util/target.c | 22 ++++++++++++---------- tools/perf/util/target.h | 3 ++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index 0f383418e3df..f3ad59ccfa99 100644 --- a/tools/perf/util/target.c +++ b/tools/perf/util/target.c @@ -94,15 +94,13 @@ enum target_errno target__validate(struct target *targe= t) return ret; } =20 -enum target_errno target__parse_uid(struct target *target) +uid_t parse_uid(const char *str) { struct passwd pwd, *result; char buf[1024]; - const char *str =3D target->uid_str; =20 - target->uid =3D UINT_MAX; if (str =3D=3D NULL) - return TARGET_ERRNO__SUCCESS; + return UINT_MAX; =20 /* Try user name first */ getpwnam_r(str, &pwd, buf, sizeof(buf), &result); @@ -115,16 +113,22 @@ enum target_errno target__parse_uid(struct target *ta= rget) int uid =3D strtol(str, &endptr, 10); =20 if (*endptr !=3D '\0') - return TARGET_ERRNO__INVALID_UID; + return UINT_MAX; =20 getpwuid_r(uid, &pwd, buf, sizeof(buf), &result); =20 if (result =3D=3D NULL) - return TARGET_ERRNO__USER_NOT_FOUND; + return UINT_MAX; } =20 - target->uid =3D result->pw_uid; - return TARGET_ERRNO__SUCCESS; + return result->pw_uid; +} + +enum target_errno target__parse_uid(struct target *target) +{ + target->uid =3D parse_uid(target->uid_str); + + return target->uid !=3D UINT_MAX ? TARGET_ERRNO__SUCCESS : TARGET_ERRNO__= INVALID_UID; } =20 /* @@ -142,7 +146,6 @@ static const char *target__error_str[] =3D { "BPF switch overriding UID", "BPF switch overriding THREAD", "Invalid User: %s", - "Problems obtaining information for user %s", }; =20 int target__strerror(struct target *target, int errnum, @@ -171,7 +174,6 @@ int target__strerror(struct target *target, int errnum, break; =20 case TARGET_ERRNO__INVALID_UID: - case TARGET_ERRNO__USER_NOT_FOUND: snprintf(buf, buflen, msg, target->uid_str); break; =20 diff --git a/tools/perf/util/target.h b/tools/perf/util/target.h index 2ee2cc30340f..e082bda990fb 100644 --- a/tools/perf/util/target.h +++ b/tools/perf/util/target.h @@ -48,12 +48,13 @@ enum target_errno { =20 /* for target__parse_uid() */ TARGET_ERRNO__INVALID_UID, - TARGET_ERRNO__USER_NOT_FOUND, =20 __TARGET_ERRNO__END, }; =20 enum target_errno target__validate(struct target *target); + +uid_t parse_uid(const char *str); enum target_errno target__parse_uid(struct target *target); =20 int target__strerror(struct target *target, int errnum, char *buf, size_t = buflen); --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 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 4259928F95A for ; Thu, 10 Apr 2025 17:36:54 +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=1744306615; cv=none; b=FDgpBqwUOndrq1xGLsGJClfCMAhYs0N7RMqpzBQUmi+Fgvq334/rke4+lzXqT417VCxVC4V3z2w54E/8yuBki/eKfGkFYQN3j/VwUdxD8basDHO3QCdrcCnm0OLctqnVyM1wTry7+8rjd6JTLvFfvJag+VpS4ggWAdSBkVL9Cd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306615; c=relaxed/simple; bh=adtWm6LLbIn1NEAvhqeF9pcSrgZi/NasO8jt5hVXwak=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uMIvgovSj0OeF0RqlOVaTNPBq72HB+FyKh2AJuQGetADs+0VxkZIdFuQkrEIW7u41u+dxkh334DwTEq1RzxeKLedInBRotO2Rfpaax5JVfpUwZ9Jtjmnc/QXtILqWFtPCCyvBGdnOuLtpjrvX004l8s06LZRsi1fYMFjFvxov74= 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=mLl9qcOo; 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="mLl9qcOo" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-af8e645a1d1so818406a12.3 for ; Thu, 10 Apr 2025 10:36:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306613; x=1744911413; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=sJlUHd00POlACtSKnVs2Xq2hei3Qf2bYPIcfv/IAydE=; b=mLl9qcOob07t95izV0aZO10hW/pu/fazq1HHNtNDSvMpMfAhLMC/+hLHCmTHGzKODO SCatDrWqdO9SeY61MKVT18BnKAx9HhFZ3U+y1tg+Tpm5Bo8zsirvNz1xOTkbZlbfhhpt ha4yWlckvhnwhjGGvRyrqjI8C58b1o/AXyu/q6sMTdXQpBy/biN3ws4A2qUmTtn8EH18 gzL0b3KEYc5BtEDxJp+mjXWtJrsWSVOLWBYFS+nq+UQgMkCCZgmcfwBW3hMqQ/UI5E8X c1vGTyTdz0MsZi4fms5o7av1ePIiQmlfLhn9uJ5AmWORf/Lep7Vm0qh/Ci696JDAXdP9 4RrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306613; x=1744911413; h=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=sJlUHd00POlACtSKnVs2Xq2hei3Qf2bYPIcfv/IAydE=; b=qc5S1Ba9dSGZyzzAb+ivapQJ18EK4sqcksdk7mwdcfFDb73AIEn412AWjxvFyuPO0d 6vJpL0tpC3sbSNryyJs9qw42mRrltXIa0MDBqwvDb0ReJNzQD7jSkij5D89COjbyyIQ6 h77ODpjGWmKlM0/XYzMKF3wQVAVwKJkbCnBVss4bAV8EV5d8x9z9dEqg05Odn2Syqtan DnEvwPdHgOMVrYmc22Ey+z+Y1qGiprDVkrTc5/2kVf1MsV8zr9K8BAUsBZx3KZZZWmB6 qXWVQDP2OSxchSKDXjQ2SZGCqQPdhRRnwpfVbdjLBpy3jm4CgnNGXraks+cVWc7tmLJL mqog== X-Forwarded-Encrypted: i=1; AJvYcCWYq1y4USo0NeXcjbHqypd0Jsed1EC/n4h4jxYhyqBcVcAHa7NL4ge3xkYZO4acHe7a0BnIhINASzKxbg4=@vger.kernel.org X-Gm-Message-State: AOJu0YyR7F61fln1nTQ/GuOblLwItiXRrUk6G9eo1TNiPgaLSbDVaeIU wmCz2Ya0MQRY6JkPWldalPFsueYt4L0fZvUdJmrZL60Fd4EG05dySs61x+46VF4rzxib68GNNg6 NngLM8Q== X-Google-Smtp-Source: AGHT+IGQm8EhNAjZDoDuAti/4OrUKsoaJ3Ygj5yBP/JzVbozppHAIIUQwLauKHLJyFwsGg53JlS/NHqxxMQX X-Received: from pjd15.prod.google.com ([2002:a17:90b:54cf:b0:2ff:5344:b54]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4a81:b0:2ff:6fc3:79c4 with SMTP id 98e67ed59e1d1-3072ba14733mr4841179a91.27.1744306613560; Thu, 10 Apr 2025 10:36:53 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:24 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-6-irogers@google.com> Subject: [PATCH v2 05/12] perf parse-events: Add parse_uid_filter helper From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add parse_uid_filter filter as a helper to parse_filter, that constructs a uid filter string. As uid filters don't work with tracepoint filters, add a is_possible_tp_filter function so the tracepoint filter isn't attempted for tracepoint evsels. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 19 ++++++++++++++++++- tools/perf/util/parse-events.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index ad5b40843b18..08ade3d70bc1 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2456,6 +2456,12 @@ foreach_evsel_in_last_glob(struct evlist *evlist, return 0; } =20 +/* Will a tracepoint filter work for str or should a BPF filter be used? */ +static bool is_possible_tp_filter(const char *str) +{ + return strstr(str, "uid") =3D=3D NULL; +} + static int set_filter(struct evsel *evsel, const void *arg) { const char *str =3D arg; @@ -2468,7 +2474,7 @@ static int set_filter(struct evsel *evsel, const void= *arg) return -1; } =20 - if (evsel->core.attr.type =3D=3D PERF_TYPE_TRACEPOINT) { + if (evsel->core.attr.type =3D=3D PERF_TYPE_TRACEPOINT && is_possible_tp_f= ilter(str)) { if (evsel__append_tp_filter(evsel, str) < 0) { fprintf(stderr, "not enough memory to hold filter string\n"); @@ -2504,6 +2510,17 @@ int parse_filter(const struct option *opt, const cha= r *str, (const void *)str); } =20 +int parse_uid_filter(struct evlist *evlist, uid_t uid) +{ + struct option opt =3D { + .value =3D &evlist, + }; + char buf[128]; + + snprintf(buf, sizeof(buf), "uid =3D=3D %d", uid); + return parse_filter(&opt, buf, /*unset=3D*/0); +} + static int add_exclude_perf_filter(struct evsel *evsel, const void *arg __maybe_unused) { diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index e176a34ab088..289afd42d642 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -45,6 +45,7 @@ static inline int parse_events(struct evlist *evlist, con= st char *str, int parse_event(struct evlist *evlist, const char *str); =20 int parse_filter(const struct option *opt, const char *str, int unset); +int parse_uid_filter(struct evlist *evlist, uid_t uid); int exclude_perf(const struct option *opt, const char *arg, int unset); =20 enum parse_events__term_val_type { --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 80D8B290084 for ; Thu, 10 Apr 2025 17:36:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306618; cv=none; b=Xkm0p2YglOYq/xXZQycaVMNjYitdx6TEXvlWAmkTFBRDXdb9dEm4Ybjxad+5lnb32IIdGAox0V42PFd3IJn18utQLQL1b3SwTQo4hfd4J4jSmf44fnv2Sn+A8b1y3kFUF/aH0oc8nO+J7Inx3NG3Y+1N2jiXjGeU+PTx01mprgQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306618; c=relaxed/simple; bh=+zDgHqHjon+MVPdXx/Sh4aANXSBT0gmB7cK1T8w0t/4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=N0NOBfu+3XAf/Y23awAbZpRGDFCJXjQscVJPRamBjQiSl0Deb2Dur54eG8e3fCP5Jv5cbNDFImUj+4n6lxuHf33Vztl+5G7rTspdCVoRh/sPgaWULNzixqqWwW1afBy4T5bo59kYgxPPjzh37tWQO1EdSkJ5kygbiwmlFwMdsGA= 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=L9i1qRWm; arc=none smtp.client-ip=209.85.210.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="L9i1qRWm" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-736cd36189bso1332072b3a.2 for ; Thu, 10 Apr 2025 10:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306616; x=1744911416; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=+FGIMvAhuHqvN23UYt85wu5DsyHObAAdkXWC2SirunI=; b=L9i1qRWmMXHnUr1cVFD1KCbQnKN4T/qpa5sxzNcfTjpjkM0qkuplkhs7qQ3lkPculU MuX4fiZeD1r01/v5Fc2QXOoaYThAEb3+oiFz9GQ7OAGTrKpXHiEssHMFipPFJSfPXR+/ k7pdXwe5ZKFMrog5205THx1h6lSb4fJ7lcMdidAbnxDJaHkLQvewXXZsadnYVc2JP87H yMOdw3vO83oxaY3YbBTLQmY3uJBI5CODIzy5IH8a595DmAc3e392wKzPKvggEr3Ufj6/ TBbb7M5l/PCrnoeyozzBE9axpb98j2lPcskANnbepbKA7np1cnUgJamvmhBusS1mAoar qggw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306616; x=1744911416; h=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=+FGIMvAhuHqvN23UYt85wu5DsyHObAAdkXWC2SirunI=; b=JWJzLdYAfUM4ORzBpwHTEs1mmLvkMAy56DAG9EKQvveQjNDx1d7j4yPQ/0gTzvV/82 VHEXkzsPkkN/TJFxYSJ6cdOzMQxcoU60fhfNWMwa/pbX360beksp1MiFjm0nttDRUgz/ CZAPmcx2fC4Kor7oBsoUqXoyU3Nk5us895dUKg4cc6b9V/sWHyj6PJsaIeM8BpuJ3bJl qW3Ln9hPeY6O94gmKvhqqk4dDzBXm5/1FE8ywNkN6lh5lzXm0RD2ggMPHi1TgsepkvZ+ YcC4e0PC9kBBlt44nMhQxwGaUregF5olZ0HkIBq6Of7qw9DFGyZfzrS+LOoA/pw4CzkT YbDA== X-Forwarded-Encrypted: i=1; AJvYcCW+SzMdQM76lOqQU2n8i7CH3jVxB0euOCXJHsnHBMoh3DQ1X3yHPKt0p6WOKrYp3n5FUCXCduPAvPUthQ4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7PvKqx9y3LYQFYc+aSb82J8fDuOVUKV7ImyMFVjOf8R2KW3bV RWa4NY36IitGhukYPfsSRf6UQ4TXFn/pLqfSgEAorxs/tLDgxKSQcwa6+XRgDFgQwyDA7FaKZM+ FYXt8mw== X-Google-Smtp-Source: AGHT+IGzwMbFnV9yTIRMoJtzlrbWMl3tKhbflByoyy/hN5H11hd+8SwOivTfc2zOtikUe4LcoWJ/l5j30Gk8 X-Received: from pfbfq2.prod.google.com ([2002:a05:6a00:60c2:b0:739:45ba:a49a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3a0b:b0:736:2a73:6756 with SMTP id d2e1a72fcca58-73bbf01e01cmr4994177b3a.21.1744306615869; Thu, 10 Apr 2025 10:36:55 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:25 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-7-irogers@google.com> Subject: [PATCH v2 06/12] perf record: Switch user option to use BPF filter From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finding user processes by scanning /proc is inherently racy and results in perf_event_open failures. Use a BPF filter to drop samples where the uid doesn't match. Ensure adding the BPF filter forces system-wide. Signed-off-by: Ian Rogers --- tools/perf/builtin-record.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index ba20bf7c011d..202c917fd122 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -173,6 +173,7 @@ struct record { bool timestamp_boundary; bool off_cpu; const char *filter_action; + const char *uid_str; struct switch_output switch_output; unsigned long long samples; unsigned long output_max_size; /* =3D 0: unlimited */ @@ -3460,8 +3461,7 @@ static struct option __record_options[] =3D { "or ranges of time to enable events e.g. '-D 10-20,30-40'", record__parse_event_enable_time), OPT_BOOLEAN(0, "kcore", &record.opts.kcore, "copy /proc/kcore"), - OPT_STRING('u', "uid", &record.opts.target.uid_str, "user", - "user to profile"), + OPT_STRING('u', "uid", &record.uid_str, "user", "user to profile"), =20 OPT_CALLBACK_NOOPT('b', "branch-any", &record.opts.branch_stack, "branch any", "sample any taken branches", @@ -4196,19 +4196,24 @@ int cmd_record(int argc, const char **argv) ui__warning("%s\n", errbuf); } =20 - err =3D target__parse_uid(&rec->opts.target); - if (err) { - int saved_errno =3D errno; + if (rec->uid_str) { + uid_t uid =3D parse_uid(rec->uid_str); =20 - target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); - ui__error("%s", errbuf); + if (uid =3D=3D UINT_MAX) { + ui__error("Invalid User: %s", rec->uid_str); + err =3D -EINVAL; + goto out; + } + err =3D parse_uid_filter(rec->evlist, uid); + if (err) + goto out; =20 - err =3D -saved_errno; - goto out; + /* User ID filtering implies system wide. */ + rec->opts.target.system_wide =3D true; } =20 - /* Enable ignoring missing threads when -u/-p option is defined. */ - rec->opts.ignore_missing_thread =3D rec->opts.target.uid !=3D UINT_MAX ||= rec->opts.target.pid; + /* Enable ignoring missing threads when -p option is defined. */ + rec->opts.ignore_missing_thread =3D rec->opts.target.pid; =20 evlist__warn_user_requested_cpus(rec->evlist, rec->opts.target.cpu_list); =20 --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-ot1-f73.google.com (mail-ot1-f73.google.com [209.85.210.73]) (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 A3FBE2900B4 for ; Thu, 10 Apr 2025 17:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306621; cv=none; b=jHVuusO6NQ8ql1NnUJ9XtaCF7i4kOHGXo+wejvxf14sWqXoG8/jd2W15Ts42Tk6IZmcVBPc1qmrNNLlYUkMCf/7AGWJEYH1IvtN+uKwVJkqxs2vY9zdo34/piJIbbQvMmxVTR4OJ85kbtmEbo+bl6g3GfW4IANYAdaPTPQtq+OU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306621; c=relaxed/simple; bh=wJHIkRUIijzHQJBAsZiYEC1oHduXPch9ZBc0/MkA4lo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=kxSQpyX5Kto1Pq5YXcuag2lXdjIMMsWfdf0NyADwXFeV61oa1/iSzFyFCTNte82dWMoC3fGw8aBrGVjhObr77b0KF3C4sOOK4QeTknC9AwWnsDCRtQgGUo8kBXQOIAIGusx8CFx4PaxIBTvBBv+EUmUJY4MtWntkpgDABxxByRA= 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=yPri3aqD; arc=none smtp.client-ip=209.85.210.73 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="yPri3aqD" Received: by mail-ot1-f73.google.com with SMTP id 46e09a7af769-72b7c00f3c6so373192a34.0 for ; Thu, 10 Apr 2025 10:36:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306618; x=1744911418; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=JBDFVNGJcg1Y5m+EPEDSUnPka56smnza49QJdWAufsI=; b=yPri3aqDj2yB7C68rY2E/Edl2CJEzflgF6Yf01m6snkij8wIqZVxr+MUbXAyRO3h1H tQQQAeWMOZHyHin1JQ1aFvH6Z3plMFC0SmhEv+1O/qu8KWIMgm+47jcbyMaq9bcVgYOs vq1899GiD7ziTxe/j8tN86MpUtWU4MdevnNm4hyimVYoLDpQ5LrlnOsg4aoYRhFPVMZ8 lFpyvvtwlMBiq6q368mAByuPLk98krUIgyaFomKoIDKZ3jpvbMIw71H1eANF1af3+Kwc CkjWFWE37Frdg1hmL1uF9X/R1Dd1Cr3ho7M7do57NXBzFzn3mO/SWgwubCoFeiBl1Ml/ xZBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306618; x=1744911418; h=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=JBDFVNGJcg1Y5m+EPEDSUnPka56smnza49QJdWAufsI=; b=X7m9DyNPvTeoSU9V0aTK0tRk4Q74pLW0WvOSAg2MO44EJ4aegCHoUU2jNMZGs6PFFs oxiKScf5rYr1xCINvO5oAcKDZccNuqmM1Kyy2UIdavqXhhB0boDDyFEqNXe9NQJ6owpP Y9MUC71EXz/aMnQN3vJJDZJ1XegxBnwTemXToytUHjW+Bzpo277/RXWLUEpLafKWLwY7 iWqLWeO4573UkFHheb7uj1tdq7cPJklDPbRPVqUYwfW+KtuhU5wx3zmvTmjW7tsT4GGu 8R67WMj23nJJpcKtViY4DVvZPHfWp+tOoCO4BSnvpnxsIzX8NUDrhYa0AzsYToTwlhB+ oxGQ== X-Forwarded-Encrypted: i=1; AJvYcCU6gNrDN0Fgfe3mM0MNU4sSsJUk0KKAZjjhavTe+zlzs62D/upuCCdtVx0BvF/Wk7XWZLCdKlCQroNBry8=@vger.kernel.org X-Gm-Message-State: AOJu0Yxy44lVWKkeU89owdhsHd01H8Aw/D8c6wgNosT3VLdxlCpdUkJo TeOtEU6PtW2p4OrUbwBdjm6qTHsvhRmN9Jz23rp6k0HWSokqo4QP88EDXar4meW+csSlkrzRtT8 dzGtulQ== X-Google-Smtp-Source: AGHT+IGIJT3nBwE7M1dGVt30ERQq3AjXXnVx4s5MM+wszH3uXona+1qYuAeQPVpntfIHhto8vkCtb9wcOwoq X-Received: from oabvp10.prod.google.com ([2002:a05:6871:a00a:b0:2c1:5f7a:eba8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6871:4102:b0:29e:684d:2739 with SMTP id 586e51a60fabf-2d0b38e1c47mr2153869fac.32.1744306617846; Thu, 10 Apr 2025 10:36:57 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:26 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-8-irogers@google.com> Subject: [PATCH v2 07/12] perf tests record: Add basic uid filtering test From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Based on the system-wide test with changes around how failure is handled as BPF permissions are a bigger issue than perf event paranoia. Signed-off-by: Ian Rogers --- tools/perf/tests/shell/record.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/reco= rd.sh index 05d91a663fda..308916f9c292 100755 --- a/tools/perf/tests/shell/record.sh +++ b/tools/perf/tests/shell/record.sh @@ -231,6 +231,31 @@ test_cgroup() { echo "Cgroup sampling test [Success]" } =20 +test_uid() { + echo "Uid sampling test" + if ! perf record -aB --synth=3Dno --uid "$(id -u)" -o "${perfdata}" ${te= stprog} \ + > "${script_output}" 2>&1 + then + if grep -q "libbpf.*EPERM" "${script_output}" + then + echo "Uid sampling [Skipped permissions]" + return + else + echo "Uid sampling [Failed to record]" + err=3D1 + # cat "${script_output}" + return + fi + fi + if ! perf report -i "${perfdata}" -q | grep -q "${testsym}" + then + echo "Uid sampling [Failed missing output]" + err=3D1 + return + fi + echo "Uid sampling test [Success]" +} + test_leader_sampling() { echo "Basic leader sampling test" if ! perf record -o "${perfdata}" -e "{cycles,cycles}:Su" -- \ @@ -324,6 +349,7 @@ test_system_wide test_workload test_branch_counter test_cgroup +test_uid test_leader_sampling test_topdown_leader_sampling test_precise_max --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 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 36C49290BAB for ; Thu, 10 Apr 2025 17:36:59 +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=1744306622; cv=none; b=JekCMZ+VceCebjwuHx2EcF59np3vFZdl6aU2k9Gfmsqfb2hu8ZZMUdgFr9/8C25pj20DHfAAhQRvYkCIEEe3elK4eY+XqBjXuNXMKeTqV7ZkHzg5Px4VgMXKN3ZdSdsrZlJgxHwKo65RoBQcZNgtPkjzT26WDYhE+slc5g2mp40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306622; c=relaxed/simple; bh=s5GHscAETkUAKivN7aAi7TLoUIfwAcyInliqpu10XeA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=bq0M9B0gZCLEmRgzLchtIoPKQjoKB5HU40xi7uTweVzqKuGxyMvE4EBPfvtoIMKibK6o7d/hdd9BQcYSBvcBJBB+/LS+x3LWllU9EqAJJRSQx1eCevfSmlSZ2TCgGVeBWtOVEPK1dtapUSimCOBCGZqYJp4w5/mnCxio+Ho18I8= 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=IZODvNjD; 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="IZODvNjD" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2254bdd4982so14759445ad.1 for ; Thu, 10 Apr 2025 10:36:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306619; x=1744911419; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ZpYG+riLDNowuBXALSOK3FRVNiACEEuoxpGzRk7BH3E=; b=IZODvNjDHhp0hVT1YiiOpynOIh0lai1bmUA25aAwSe2DiF8tmSDoMXP+6IA6TfJe7C alnO7R1SeMQzjnn0HlRsMCKP73WXdV6cgSXQjUgXLLRXx5nGSR6MB8AT1sfWlQRuv8Dj n/vN7pZAamWmH0eGWnQhZXedti7u1FWP+CncjYUf7CIzdFEnu89O/efi02OBzBYhEmGX vVnyKcsEDULqUM/IeuGouj8GXqvNqAjwy9/PtYS2kBoFVWFDvz+2eNzT+MqfOSWwuKVK iLKBK2qGw0JJNe+3FacBkw9AJiI1SSntNucpFhum3zS5fgckYb0QYoaKZ6DeaFWEgtA6 3h8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306619; x=1744911419; h=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=ZpYG+riLDNowuBXALSOK3FRVNiACEEuoxpGzRk7BH3E=; b=a2hz0p8TAnPBY/P8yvhFWT0UY8FXBe31lGPPessjNwaikQYcS/RTC5xwTrh5TTlA4B Fa89GinKqKiZpqAki8lx8Gp70tc1QngW33rUkHlqg7uN/Vx3v0QQkpCM+RUbg/qMcIcy m7Q938+fsKLWB6vftZT9LytSnm7BilHnLZeqB21l76N0nW4eUqwfsUqOAhx9KbwFgQCC WASqL/e1VkWfMWHiJ6otDdouSMUiD5TW/2ovVVLbywYL51jv0LmG5bAkfIqomU8BOfMd 8y8mVMosHvBr1FT1FggYpVU9XR+TgacJIsWLFVd/YN/qIFpww3TkI+cFu+WRNlNHcqkP hIew== X-Forwarded-Encrypted: i=1; AJvYcCW0xR1YtDhGj7PXgEyzPv1xlgIq19wpqxoruukanhA8KkhLU2z0ofmRGzYMtu6ZcQzwxr7Q3XZYL8lcmxM=@vger.kernel.org X-Gm-Message-State: AOJu0YwZVACFgyZ+/xACoUq7YvoUxS1ih0XhzUTbrQIF3yJwGtaRwSXc 4lE3yPt0AZpOd9Om4KOm5IEE/np2QIDcOFK5OfMjC9Z0qDBOEzsGP6G4YiSW4Ek197G0nOYoCSk 7P/Q0pQ== X-Google-Smtp-Source: AGHT+IGzIUP6D1cwLaSTj/gUi3pDoC4nLxOcZuHx9s7cibZ6nls36gURzWSfZGyGYDQBNmN1hxObG/FtTqx1 X-Received: from plge17.prod.google.com ([2002:a17:902:cf51:b0:223:242b:480a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:948:b0:224:10a2:cad5 with SMTP id d9443c01a7336-22b2eda468bmr66678385ad.10.1744306619427; Thu, 10 Apr 2025 10:36:59 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:27 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-9-irogers@google.com> Subject: [PATCH v2 08/12] perf top: Switch user option to use BPF filter From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finding user processes by scanning /proc is inherently racy and results in perf_event_open failures. Use a BPF filter to drop samples where the uid doesn't match. Signed-off-by: Ian Rogers --- tools/perf/builtin-top.c | 22 ++++++++++++---------- tools/perf/util/top.c | 4 ++-- tools/perf/util/top.h | 1 + 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 1061f4eebc3f..9a7af69b7c73 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -642,7 +642,7 @@ static void *display_thread_tui(void *arg) */ evlist__for_each_entry(top->evlist, pos) { struct hists *hists =3D evsel__hists(pos); - hists->uid_filter_str =3D top->record_opts.target.uid_str; + hists->uid_filter_str =3D top->uid_str; } =20 ret =3D evlist__tui_browse_hists(top->evlist, help, &hbt, top->min_percen= t, @@ -1566,7 +1566,7 @@ int cmd_top(int argc, const char **argv) "Add prefix to source file path names in programs (with --prefix-str= ip)"), OPT_STRING(0, "prefix-strip", &annotate_opts.prefix_strip, "N", "Strip first N entries of source file path name in programs (with --= prefix)"), - OPT_STRING('u', "uid", &target->uid_str, "user", "user to profile"), + OPT_STRING('u', "uid", &top.uid_str, "user", "user to profile"), OPT_CALLBACK(0, "percent-limit", &top, "percent", "Don't show entries under that percent", parse_percent_limit), OPT_CALLBACK(0, "percentage", NULL, "relative|absolute", @@ -1757,15 +1757,17 @@ int cmd_top(int argc, const char **argv) ui__warning("%s\n", errbuf); } =20 - status =3D target__parse_uid(target); - if (status) { - int saved_errno =3D errno; - - target__strerror(target, status, errbuf, BUFSIZ); - ui__error("%s\n", errbuf); + if (top.uid_str) { + uid_t uid =3D parse_uid(top.uid_str); =20 - status =3D -saved_errno; - goto out_delete_evlist; + if (uid =3D=3D UINT_MAX) { + ui__error("Invalid User: %s", top.uid_str); + status =3D -EINVAL; + goto out_delete_evlist; + } + status =3D parse_uid_filter(top.evlist, uid); + if (status) + goto out_delete_evlist; } =20 if (target__none(target)) diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c index 4db3d1bd686c..b06e10a116bb 100644 --- a/tools/perf/util/top.c +++ b/tools/perf/util/top.c @@ -88,9 +88,9 @@ size_t perf_top__header_snprintf(struct perf_top *top, ch= ar *bf, size_t size) else if (target->tid) ret +=3D SNPRINTF(bf + ret, size - ret, " (target_tid: %s", target->tid); - else if (target->uid_str !=3D NULL) + else if (top->uid_str !=3D NULL) ret +=3D SNPRINTF(bf + ret, size - ret, " (uid: %s", - target->uid_str); + top->uid_str); else ret +=3D SNPRINTF(bf + ret, size - ret, " (all"); =20 diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h index 4c5588dbb131..04ff926846be 100644 --- a/tools/perf/util/top.h +++ b/tools/perf/util/top.h @@ -48,6 +48,7 @@ struct perf_top { const char *sym_filter; float min_percent; unsigned int nr_threads_synthesize; + const char *uid_str; =20 struct { struct ordered_events *in; --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 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 16275290BC3 for ; Thu, 10 Apr 2025 17:37:01 +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=1744306623; cv=none; b=qZMMpkQQepa2StCDiGLlg9uc2TNIZA3nmyMBoMtVDxABtKvL/VgDq+hyKvYQSuGxR5aojd8YNJghhKj1fWNlKhwBrtKSQHrtBITnp1nB996ZMhv/WiK+dBl8hEkyVblhsqEbpREvuulP7/lnj8LPzKMKHhavczMzG0GFjOCkYzg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306623; c=relaxed/simple; bh=pwnF8n7mqD7yk9oNBMquJdU4/lh8MdFnDzv/GA7kVio=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=e6G0X6EVKQ/GODO2108HDrKdPixe7vmAH/X/pbfU04jWFNmNkHpSLjFGbOb96v2R0cNPRZfZ9FYC68eXK6mkUKH8IA/qh99BQGlAHoviUT/Svm2Rkcz2J0JPZlOmhciAYe5qFcB1ug/VDUtJQJDm2rh4MtBHrwbPTD6dCArwq3U= 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=h3fKEn+P; 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="h3fKEn+P" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-225107fbdc7so9605705ad.0 for ; Thu, 10 Apr 2025 10:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306621; x=1744911421; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=XpiUUvwlwp9tVCnJZ3TZUgEjsv1IVM8EEnnesVuXazs=; b=h3fKEn+Pz6OSFVCpDOszljZHfQXr0dLfzJkdBcKvgw+KCKrIsC8oXNEnmAsSqd9rEf JsmxFNiaOJRHgiYwgxRXodaSSnIs1hr5cDAri1SxncQ/BpUsvBqXNtW3IrExpseTdSz3 QmNbeiQ+bw2+aRuD1TAt/k4m89qeFxvhZLSHgrzKwq6zPlOEMzPHk68PBwMjpPjTmoO9 Mek7uXnINWAXZspY8ey7YOW+xQtODVaeCKzoEe07KFsCU2XTCuX7Nl8/gFGGCmDcRGpR T8HgJiYrvAlRIfhKkvcoqm4N3JLm7jiQbv1O7jENLfE7pvjmp/BhVIFiBT+RJ3PbpnAj wg2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306621; x=1744911421; h=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=XpiUUvwlwp9tVCnJZ3TZUgEjsv1IVM8EEnnesVuXazs=; b=p96swArIuufV57kteHhaG7jGHs2kCL+8bqbXZOwzC5E4WK1jTr3/HVQn1fpi+kOr0W ZkTncK/TfqXBMuwDhwAeI8/1AOl2w94P8NfS1eEP46oP8QE+u7jo/23KzoMHhtEJ54/r iSazgj5th3sVtrvOsKxmONZsKJGNntPaudrgeGTuFNpqQkMPx7Kn1LLzjgdkASPVVPB9 CG2IVuvjKoD/UjtOzDcF1Tdj/UIE9Xte35VDnZkEKL+d2IobAYYMkbOV5rjMtdyaNALl cAXoslxA5Nu+wuGQ3NlQ74enrDzdCMyALPwNn9NXW/utqhqO0RBtC1n8N1CjA8AuI2A5 dm7Q== X-Forwarded-Encrypted: i=1; AJvYcCW2Wpb3EcFVoZSjmeP8orqe9HlfsTb7sJsnVTqki5Wki5mvYele4cSRsmGjO15vQVSVSbmUf4aPYbMcQNc=@vger.kernel.org X-Gm-Message-State: AOJu0YzBciAWc2LVqVfR6GeNBXVLrXMj5+Xl6KRh/eYGvOC206Dp4LnD POKDVJgAE37/gmc8gQyGSTQWl80iI3SKGiU1WzUqWIL4Qv921ulMvCcpUM4OXwkVU2hAMII6ekH RWEe2rQ== X-Google-Smtp-Source: AGHT+IFwaCb2cDgkGC1n4/9Wz8pIMyxoLX83dVD19SJR7ZPEQ36S8XM3cNeUAEqdxlEjEYtd+dxtn/hNSjdL X-Received: from plbml15.prod.google.com ([2002:a17:903:34cf:b0:227:b826:af9e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:120a:b0:216:2bd7:1c2f with SMTP id d9443c01a7336-22be02f73bamr41067965ad.18.1744306621413; Thu, 10 Apr 2025 10:37:01 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:28 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-10-irogers@google.com> Subject: [PATCH v2 09/12] perf trace: Switch user option to use BPF filter From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finding user processes by scanning /proc is inherently racy and results in perf_event_open failures. Use a BPF filter to drop samples where the uid doesn't match. Ensure adding the BPF filter forces system-wide. Signed-off-by: Ian Rogers --- tools/perf/builtin-trace.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 6ac51925ea42..1f7d2b3d8b3d 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -240,6 +240,7 @@ struct trace { struct ordered_events data; u64 last; } oe; + const char *uid_str; }; =20 static void trace__load_vmlinux_btf(struct trace *trace __maybe_unused) @@ -4401,8 +4402,8 @@ static int trace__run(struct trace *trace, int argc, = const char **argv) evlist__add(evlist, pgfault_min); } =20 - /* Enable ignoring missing threads when -u/-p option is defined. */ - trace->opts.ignore_missing_thread =3D trace->opts.target.uid !=3D UINT_MA= X || trace->opts.target.pid; + /* Enable ignoring missing threads when -p option is defined. */ + trace->opts.ignore_missing_thread =3D trace->opts.target.pid; =20 if (trace->sched && evlist__add_newtp(evlist, "sched", "sched_stat_runtime", trace__sched= _stat_runtime)) @@ -5420,8 +5421,7 @@ int cmd_trace(int argc, const char **argv) "child tasks do not inherit counters"), OPT_CALLBACK('m', "mmap-pages", &trace.opts.mmap_pages, "pages", "number of mmap data pages", evlist__parse_mmap_pages), - OPT_STRING('u', "uid", &trace.opts.target.uid_str, "user", - "user to profile"), + OPT_STRING('u', "uid", &trace.uid_str, "user", "user to profile"), OPT_CALLBACK(0, "duration", &trace, "float", "show only events with duration > N.M ms", trace__set_duration), @@ -5762,11 +5762,19 @@ int cmd_trace(int argc, const char **argv) goto out_close; } =20 - err =3D target__parse_uid(&trace.opts.target); - if (err) { - target__strerror(&trace.opts.target, err, bf, sizeof(bf)); - fprintf(trace.output, "%s", bf); - goto out_close; + if (trace.uid_str) { + uid_t uid =3D parse_uid(trace.uid_str); + + if (uid =3D=3D UINT_MAX) { + ui__error("Invalid User: %s", trace.uid_str); + err =3D -EINVAL; + goto out_close; + } + err =3D parse_uid_filter(trace.evlist, uid); + if (err) + goto out_close; + + trace.opts.target.system_wide =3D true; } =20 if (!argc && target__none(&trace.opts.target)) --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 E8B6C293453 for ; Thu, 10 Apr 2025 17:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306625; cv=none; b=Scq6mrVXd3ndE+k5+buvstvQrNTMSfnhBIf4ufG/wEyOJlt6E2G0DdnsnSANLULSftJOUlyPqXCYm3qrzBuUileYcG1Hys7CYWUckQZDMIVDnxL8EjxL8oeeX80UrWFbkf99rKkUKYEhVsUk1WZ4O8bDBltr2OvQVj06u2PTBMo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306625; c=relaxed/simple; bh=OqTPFhQNMqA0kroRrrIFZ7VNgDyIrdQDv7/85+I3Vh0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=cEXXUlOI52q/gtp480SBNouGiA6+oLw5pTBIMzq3i2xXsbxdZQhufegmulshohjIqj0+5nnnxSNFsZlKE9uqItqPyjbGfJLChRBKloycmHDwUlKh1slu5b+ekf8ZCCNhKTTfwPXzou+KmWib3LvDHhyyheq22Jmy4w1WPEDvPHs= 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=KjzC/Au8; arc=none smtp.client-ip=209.85.216.74 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="KjzC/Au8" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-306e5d9c9a6so1898237a91.1 for ; Thu, 10 Apr 2025 10:37:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306623; x=1744911423; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=xQvK5ga6mbdGcs60cOEjaVt2CnhMO3nnFtvXgnIjviw=; b=KjzC/Au8vXIxBFBfTXNzYvpfxfOJ42hstGXxbLbN1yEeSKk3cbTZKP4bNgzWCO8Ois ZVVsk/742/NWKsnKTeyuSSbcUGSMmolp+rRhUEWhLKW80rsvaPkx9UlhFrBWDJqep5pl +3MvNKF/JTzQIvQPz1CA+cS7iPnrEpnmLuAh+/bi7wJ5n+xl0LtTfkxMEGObEkkPaLci 0Qmv/U5V203AHa9I+szW5n0ndeSigAO8OqAtUUtQDO9hSO05eGwwC6PCKRTZ/V9Q7eCI KMEKudWTVOtOyzUsdi0QtDIe+6PfrRH8VOZnh96arIIYIlh+wvXU9hTC/8Vs8Tkr8yds 2Pjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306623; x=1744911423; h=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=xQvK5ga6mbdGcs60cOEjaVt2CnhMO3nnFtvXgnIjviw=; b=GtiSoDDfbtVg8e1+KLJt832pvHjJt39q0CCtTGJvXBj5CBQrlwVuFdFQbM/txZSpKv CU3+teozdv0nQHVOZz48XoSX7z/jUTk0qk+Zwb0XwZE3M0vPNhEW7pDGfyyn6baMTogl qSNOYaC3ReiG0nXAr6wXsGF68XWJl/TR4sh0kjUl2G/HB8WkxdOijZPR4J995Y9H0yGc nZ8DND4gdy/ZjWOrFdN42SgIpeR8AupdMH9GsN8tCjTXbRjVmS/WFYo4Vdry6KiO/np8 kiX2gsqIDRLpi8EcdG2u+kCznhMUB/sSg8EKExdQqE86KmAOFWUARhNDFo86DW4SvQUj X56A== X-Forwarded-Encrypted: i=1; AJvYcCXNPsWKSWqVkIop8ft7wV1JyOaDHpn7BFle/RodiuSBptbd/oCp5tlrFe0o/Sd0Y3fHsmE02Y2wnWBZlbs=@vger.kernel.org X-Gm-Message-State: AOJu0Ywz1JQORlNYD+Dvo05uOjJVkO4nHFwCGAdbEqfbjY1gMw2WHzrB I1AVfQCyRB4F6KvtCqJ9O/xGKS+xlCKoQLvoyqJYGtQXQFyw3wqPAfP/YyLUpTONGFQ+hlxkUf4 220F/Ew== X-Google-Smtp-Source: AGHT+IELrMq7P3XO/BVtHJWWdlGWFYztHi/XhtOisl5L5h9RCt8GE54ixzv6LneO4zsw6KvJO4vaiirkoA6p X-Received: from pjyd8.prod.google.com ([2002:a17:90a:dfc8:b0:2fa:284f:adb2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:6c6:b0:2ee:7411:ca99 with SMTP id 98e67ed59e1d1-30718b64bb2mr5111942a91.1.1744306623335; Thu, 10 Apr 2025 10:37:03 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:29 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-11-irogers@google.com> Subject: [PATCH v2 10/12] perf bench evlist-open-close: Switch user option to use BPF filter From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finding user processes by scanning /proc is inherently racy and results in perf_event_open failures. Use a BPF filter to drop samples where the uid doesn't match. Signed-off-by: Ian Rogers --- tools/perf/bench/evlist-open-close.c | 36 ++++++++++++++++------------ 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/perf/bench/evlist-open-close.c b/tools/perf/bench/evlist= -open-close.c index 79cedcf94a39..bfaf50e4e519 100644 --- a/tools/perf/bench/evlist-open-close.c +++ b/tools/perf/bench/evlist-open-close.c @@ -57,7 +57,7 @@ static int evlist__count_evsel_fds(struct evlist *evlist) return cnt; } =20 -static struct evlist *bench__create_evlist(char *evstr) +static struct evlist *bench__create_evlist(char *evstr, const char *uid_st= r) { struct parse_events_error err; struct evlist *evlist =3D evlist__new(); @@ -78,6 +78,18 @@ static struct evlist *bench__create_evlist(char *evstr) goto out_delete_evlist; } parse_events_error__exit(&err); + if (uid_str) { + uid_t uid =3D parse_uid(uid_str); + + if (uid =3D=3D UINT_MAX) { + pr_err("Invalid User: %s", uid_str); + ret =3D -EINVAL; + goto out_delete_evlist; + } + ret =3D parse_uid_filter(evlist, uid); + if (ret) + goto out_delete_evlist; + } ret =3D evlist__create_maps(evlist, &opts.target); if (ret < 0) { pr_err("Not enough memory to create thread/cpu maps\n"); @@ -117,10 +129,10 @@ static int bench__do_evlist_open_close(struct evlist = *evlist) return 0; } =20 -static int bench_evlist_open_close__run(char *evstr) +static int bench_evlist_open_close__run(char *evstr, const char *uid_str) { // used to print statistics only - struct evlist *evlist =3D bench__create_evlist(evstr); + struct evlist *evlist =3D bench__create_evlist(evstr, uid_str); double time_average, time_stddev; struct timeval start, end, diff; struct stats time_stats; @@ -142,7 +154,7 @@ static int bench_evlist_open_close__run(char *evstr) =20 for (i =3D 0; i < iterations; i++) { pr_debug("Started iteration %d\n", i); - evlist =3D bench__create_evlist(evstr); + evlist =3D bench__create_evlist(evstr, uid_str); if (!evlist) return -ENOMEM; =20 @@ -206,6 +218,7 @@ static char *bench__repeat_event_string(const char *evs= tr, int n) =20 int bench_evlist_open_close(int argc, const char **argv) { + const char *uid_str =3D NULL; const struct option options[] =3D { OPT_STRING('e', "event", &event_string, "event", "event selector. use 'perf list' to list available events"), @@ -221,7 +234,7 @@ int bench_evlist_open_close(int argc, const char **argv) "record events on existing process id"), OPT_STRING('t', "tid", &opts.target.tid, "tid", "record events on existing thread id"), - OPT_STRING('u', "uid", &opts.target.uid_str, "user", "user to profile"), + OPT_STRING('u', "uid", &uid_str, "user", "user to profile"), OPT_BOOLEAN(0, "per-thread", &opts.target.per_thread, "use per-thread mm= aps"), OPT_END() }; @@ -245,15 +258,8 @@ int bench_evlist_open_close(int argc, const char **arg= v) goto out; } =20 - err =3D target__parse_uid(&opts.target); - if (err) { - target__strerror(&opts.target, err, errbuf, sizeof(errbuf)); - pr_err("%s", errbuf); - goto out; - } - - /* Enable ignoring missing threads when -u/-p option is defined. */ - opts.ignore_missing_thread =3D opts.target.uid !=3D UINT_MAX || opts.targ= et.pid; + /* Enable ignoring missing threads when -p option is defined. */ + opts.ignore_missing_thread =3D opts.target.pid; =20 evstr =3D bench__repeat_event_string(event_string, nr_events); if (!evstr) { @@ -261,7 +267,7 @@ int bench_evlist_open_close(int argc, const char **argv) goto out; } =20 - err =3D bench_evlist_open_close__run(evstr); + err =3D bench_evlist_open_close__run(evstr, uid_str); =20 free(evstr); out: --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 EC758293B50 for ; Thu, 10 Apr 2025 17:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306627; cv=none; b=IhQX6F9SyelcNLl+UZkhAz4CDBBFfVj886dC8g2aIxghMfsiSKc5DON5/lwRKUz2Q5p0aOjyMFIAvJNLyoXoX3L328tCSavf5EWn7h5U2FtQaWUgrsQJq0AUXjLLSFECZy/Azd+UxGhKpQps4o5iijuqHlFck4cf3Z1/9tOUMWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306627; c=relaxed/simple; bh=Bej04MyJsrdcV+Qp3WUuLZDsRwPz0V7gB+75yBJO4Po=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uQIrZmc6ewLaZGY45DnASzg+1FkwUhTRFIQ5cG6Uon/OKuZmFu10FURveLo4PSc3KHATt8QicSNoBkj9tB0YPmXrBNjBU2+bZWIO2AfzbbRYJ9SHHpiwDhvGz3CtoEr2tB622VEjoy8MrSjsL1i+FFGUCLVr7GJl8CqrtHJXnug= 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=Ca7UbY30; arc=none smtp.client-ip=209.85.216.73 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="Ca7UbY30" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff8119b436so877535a91.0 for ; Thu, 10 Apr 2025 10:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306625; x=1744911425; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=8wRgy6qZn0MUN5UByz3xQmmdwU9nj6FopesVn3TNXNM=; b=Ca7UbY30Xgclo8rkRVOimv7711/FVIkGLNwNZEQScmQkxImuyZ6PgsT/FiB8puoWCy FSfbhsreAtKp4O0B9HXXcbLbrZBn4T7Jz2F97XtOzYXYQnHOe2KlzTZd3jpajh3kc6B5 ykdYldr/+umWg7TVIAgUcIcDX97J2PfPMJcSyLFpMZka7zgrxZqXllMfAoRo05wWNkLD zKWBQHWlHBV0yEgwFuvcMI4rbtSSjFyRaizhQvnh3hiSsSlixt1HJ5HzZBwY9E8cm79R dXZdwM13TOrWyXbxu46o7yZxYfR54nDpSAg7yUvVqafW3yvxiSY8XTgFGrSHxB80XKWy u9rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306625; x=1744911425; h=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=8wRgy6qZn0MUN5UByz3xQmmdwU9nj6FopesVn3TNXNM=; b=iEKWqG4f1qxHOGjNPpGzTpn/jHayX/ZiChK4np6f9INbj1VHXVFdeko6vHY3ZwJvQW QKkWeZA/DWbaVVbwxg7vFpQTuybl9vW6lxF5jkaerXJZQ28TQkKmgbjFdvut2Kjgl4KQ 7ekjI87v38w3oE+0g4OFH+Yx/GgCPmsAFBw0tyBIFGWJ8BCffvBuSjML7b8Wm7pOk/0a EXoFaKaFuWzDeJljFtkBIeqdjiqlsPrDJ6PdYxPnUIqYtBEwcSmaUGLr5afcQ+oYveGX oM8Y9Hs4+KwWTcm/f0JKQYaaW/15YTMtoWaEXOFmKpC0kJQ9hh7IQQbwuokfKtCJyn/x rdZQ== X-Forwarded-Encrypted: i=1; AJvYcCU9b/JMwUm84gMnmxTQVRnsjOKFKCPiJqzurVJF2/n5q7AlXyFuyAWlIfq9PbOwKTyiS1Hom6D0JY1V1mk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8zfTxucO0fvixXZBLeWBGL47nPcy4nmro91uD9V40RYhgYdm5 ZttdGyu/G8o7a1KO5XNRW0V0qml5AAmLiPzh2rKBWwIwROd3UOdzWOIpw03eHCASIl/WcJR+E92 P0OgT6A== X-Google-Smtp-Source: AGHT+IGwzdSEoZrbjGfvRdfYeF1YnLx54YlVys0YEVqHBYv0YviwgXIHn/5uA7xwE2RZKnmyH8fOzMvVcfs5 X-Received: from pjbsw3.prod.google.com ([2002:a17:90b:2c83:b0:301:a339:b558]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2804:b0:2fe:d766:ad8e with SMTP id 98e67ed59e1d1-307e590a8b3mr5281918a91.4.1744306625275; Thu, 10 Apr 2025 10:37:05 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:30 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-12-irogers@google.com> Subject: [PATCH v2 11/12] perf target: Remove uid from target From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Gathering threads with a uid by scanning /proc is inherently racy leading to perf_event_open failures that quit perf. All users of the functionality now use BPF filters, so remove uid and uid_str from target. Signed-off-by: Ian Rogers --- tools/perf/builtin-ftrace.c | 1 - tools/perf/builtin-kvm.c | 2 - tools/perf/builtin-stat.c | 4 +- tools/perf/builtin-trace.c | 1 - tools/perf/tests/backward-ring-buffer.c | 1 - tools/perf/tests/event-times.c | 4 +- tools/perf/tests/openat-syscall-tp-fields.c | 1 - tools/perf/tests/perf-record.c | 1 - tools/perf/tests/task-exit.c | 1 - tools/perf/util/bpf-filter.c | 2 +- tools/perf/util/evlist.c | 3 +- tools/perf/util/target.c | 46 +-------------------- tools/perf/util/target.h | 12 +----- 13 files changed, 6 insertions(+), 73 deletions(-) diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c index 7caa18d5ffc3..ae901f2a18ef 100644 --- a/tools/perf/builtin-ftrace.c +++ b/tools/perf/builtin-ftrace.c @@ -1590,7 +1590,6 @@ int cmd_ftrace(int argc, const char **argv) int (*cmd_func)(struct perf_ftrace *) =3D NULL; struct perf_ftrace ftrace =3D { .tracer =3D DEFAULT_TRACER, - .target =3D { .uid =3D UINT_MAX, }, }; const struct option common_options[] =3D { OPT_STRING('p', "pid", &ftrace.target.pid, "pid", diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 67fd2b006b0b..d75bd3684980 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1871,8 +1871,6 @@ static int kvm_events_live(struct perf_kvm_stat *kvm, kvm->opts.user_interval =3D 1; kvm->opts.mmap_pages =3D 512; kvm->opts.target.uses_mmap =3D false; - kvm->opts.target.uid_str =3D NULL; - kvm->opts.target.uid =3D UINT_MAX; =20 symbol__init(NULL); disable_buildid_cache(); diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 68ea7589c143..22ec1d0702e7 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -108,9 +108,7 @@ static struct parse_events_option_args parse_events_opt= ion_args =3D { =20 static bool all_counters_use_bpf =3D true; =20 -static struct target target =3D { - .uid =3D UINT_MAX, -}; +static struct target target; =20 static volatile sig_atomic_t child_pid =3D -1; static int detailed_run =3D 0; diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 1f7d2b3d8b3d..aa0a27dd7d21 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -5374,7 +5374,6 @@ int cmd_trace(int argc, const char **argv) struct trace trace =3D { .opts =3D { .target =3D { - .uid =3D UINT_MAX, .uses_mmap =3D true, }, .user_freq =3D UINT_MAX, diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/bac= kward-ring-buffer.c index 79a980b1e786..c5e7999f2817 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -91,7 +91,6 @@ static int test__backward_ring_buffer(struct test_suite *= test __maybe_unused, in struct parse_events_error parse_error; struct record_opts opts =3D { .target =3D { - .uid =3D UINT_MAX, .uses_mmap =3D true, }, .freq =3D 0, diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c index deefe5003bfc..2148024b4f4a 100644 --- a/tools/perf/tests/event-times.c +++ b/tools/perf/tests/event-times.c @@ -17,9 +17,7 @@ static int attach__enable_on_exec(struct evlist *evlist) { struct evsel *evsel =3D evlist__last(evlist); - struct target target =3D { - .uid =3D UINT_MAX, - }; + struct target target =3D {}; const char *argv[] =3D { "true", NULL, }; char sbuf[STRERR_BUFSIZE]; int err; diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests= /openat-syscall-tp-fields.c index 0ef4ba7c1571..2a139d2781a8 100644 --- a/tools/perf/tests/openat-syscall-tp-fields.c +++ b/tools/perf/tests/openat-syscall-tp-fields.c @@ -28,7 +28,6 @@ static int test__syscall_openat_tp_fields(struct test_sui= te *test __maybe_unused { struct record_opts opts =3D { .target =3D { - .uid =3D UINT_MAX, .uses_mmap =3D true, }, .no_buffering =3D true, diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c index 0958c7c8995f..0b3c37e66871 100644 --- a/tools/perf/tests/perf-record.c +++ b/tools/perf/tests/perf-record.c @@ -45,7 +45,6 @@ static int test__PERF_RECORD(struct test_suite *test __ma= ybe_unused, int subtest { struct record_opts opts =3D { .target =3D { - .uid =3D UINT_MAX, .uses_mmap =3D true, }, .no_buffering =3D true, diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index 8e328bbd509d..4053ff2813bb 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c @@ -46,7 +46,6 @@ static int test__task_exit(struct test_suite *test __mayb= e_unused, int subtest _ struct evsel *evsel; struct evlist *evlist; struct target target =3D { - .uid =3D UINT_MAX, .uses_mmap =3D true, }; const char *argv[] =3D { "true", NULL }; diff --git a/tools/perf/util/bpf-filter.c b/tools/perf/util/bpf-filter.c index a4fdf6911ec1..ed4845ff4a10 100644 --- a/tools/perf/util/bpf-filter.c +++ b/tools/perf/util/bpf-filter.c @@ -449,7 +449,7 @@ int perf_bpf_filter__prepare(struct evsel *evsel, struc= t target *target) struct bpf_program *prog; struct bpf_link *link; struct perf_bpf_filter_entry *entry; - bool needs_idx_hash =3D !target__has_cpu(target) && !target->uid_str; + bool needs_idx_hash =3D !target__has_cpu(target); =20 entry =3D calloc(MAX_FILTERS, sizeof(*entry)); if (entry =3D=3D NULL) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index c1a04141aed0..2e1f14bc8461 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1006,8 +1006,7 @@ int evlist__create_maps(struct evlist *evlist, struct= target *target) * per-thread data. thread_map__new_str will call * thread_map__new_all_cpus to enumerate all threads. */ - threads =3D thread_map__new_str(target->pid, target->tid, target->uid, - all_threads); + threads =3D thread_map__new_str(target->pid, target->tid, UINT_MAX, all_t= hreads); =20 if (!threads) return -1; diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index f3ad59ccfa99..8cf71bea295a 100644 --- a/tools/perf/util/target.c +++ b/tools/perf/util/target.c @@ -28,20 +28,6 @@ enum target_errno target__validate(struct target *target) ret =3D TARGET_ERRNO__PID_OVERRIDE_CPU; } =20 - /* UID and PID are mutually exclusive */ - if (target->tid && target->uid_str) { - target->uid_str =3D NULL; - if (ret =3D=3D TARGET_ERRNO__SUCCESS) - ret =3D TARGET_ERRNO__PID_OVERRIDE_UID; - } - - /* UID and CPU are mutually exclusive */ - if (target->uid_str && target->cpu_list) { - target->cpu_list =3D NULL; - if (ret =3D=3D TARGET_ERRNO__SUCCESS) - ret =3D TARGET_ERRNO__UID_OVERRIDE_CPU; - } - /* PID and SYSTEM are mutually exclusive */ if (target->tid && target->system_wide) { target->system_wide =3D false; @@ -49,13 +35,6 @@ enum target_errno target__validate(struct target *target) ret =3D TARGET_ERRNO__PID_OVERRIDE_SYSTEM; } =20 - /* UID and SYSTEM are mutually exclusive */ - if (target->uid_str && target->system_wide) { - target->system_wide =3D false; - if (ret =3D=3D TARGET_ERRNO__SUCCESS) - ret =3D TARGET_ERRNO__UID_OVERRIDE_SYSTEM; - } - /* BPF and CPU are mutually exclusive */ if (target->bpf_str && target->cpu_list) { target->cpu_list =3D NULL; @@ -70,13 +49,6 @@ enum target_errno target__validate(struct target *target) ret =3D TARGET_ERRNO__BPF_OVERRIDE_PID; } =20 - /* BPF and UID are mutually exclusive */ - if (target->bpf_str && target->uid_str) { - target->uid_str =3D NULL; - if (ret =3D=3D TARGET_ERRNO__SUCCESS) - ret =3D TARGET_ERRNO__BPF_OVERRIDE_UID; - } - /* BPF and THREADS are mutually exclusive */ if (target->bpf_str && target->per_thread) { target->per_thread =3D false; @@ -124,31 +96,19 @@ uid_t parse_uid(const char *str) return result->pw_uid; } =20 -enum target_errno target__parse_uid(struct target *target) -{ - target->uid =3D parse_uid(target->uid_str); - - return target->uid !=3D UINT_MAX ? TARGET_ERRNO__SUCCESS : TARGET_ERRNO__= INVALID_UID; -} - /* * This must have a same ordering as the enum target_errno. */ static const char *target__error_str[] =3D { "PID/TID switch overriding CPU", - "PID/TID switch overriding UID", - "UID switch overriding CPU", "PID/TID switch overriding SYSTEM", - "UID switch overriding SYSTEM", "SYSTEM/CPU switch overriding PER-THREAD", "BPF switch overriding CPU", "BPF switch overriding PID/TID", - "BPF switch overriding UID", "BPF switch overriding THREAD", - "Invalid User: %s", }; =20 -int target__strerror(struct target *target, int errnum, +int target__strerror(struct target *target __maybe_unused, int errnum, char *buf, size_t buflen) { int idx; @@ -173,10 +133,6 @@ int target__strerror(struct target *target, int errnum, snprintf(buf, buflen, "%s", msg); break; =20 - case TARGET_ERRNO__INVALID_UID: - snprintf(buf, buflen, msg, target->uid_str); - break; - default: /* cannot reach here */ break; diff --git a/tools/perf/util/target.h b/tools/perf/util/target.h index e082bda990fb..84ebb9c940c6 100644 --- a/tools/perf/util/target.h +++ b/tools/perf/util/target.h @@ -9,9 +9,7 @@ struct target { const char *pid; const char *tid; const char *cpu_list; - const char *uid_str; const char *bpf_str; - uid_t uid; bool system_wide; bool uses_mmap; bool default_per_cpu; @@ -36,32 +34,24 @@ enum target_errno { =20 /* for target__validate() */ TARGET_ERRNO__PID_OVERRIDE_CPU =3D __TARGET_ERRNO__START, - TARGET_ERRNO__PID_OVERRIDE_UID, - TARGET_ERRNO__UID_OVERRIDE_CPU, TARGET_ERRNO__PID_OVERRIDE_SYSTEM, - TARGET_ERRNO__UID_OVERRIDE_SYSTEM, TARGET_ERRNO__SYSTEM_OVERRIDE_THREAD, TARGET_ERRNO__BPF_OVERRIDE_CPU, TARGET_ERRNO__BPF_OVERRIDE_PID, - TARGET_ERRNO__BPF_OVERRIDE_UID, TARGET_ERRNO__BPF_OVERRIDE_THREAD, =20 - /* for target__parse_uid() */ - TARGET_ERRNO__INVALID_UID, - __TARGET_ERRNO__END, }; =20 enum target_errno target__validate(struct target *target); =20 uid_t parse_uid(const char *str); -enum target_errno target__parse_uid(struct target *target); =20 int target__strerror(struct target *target, int errnum, char *buf, size_t = buflen); =20 static inline bool target__has_task(struct target *target) { - return target->tid || target->pid || target->uid_str; + return target->tid || target->pid; } =20 static inline bool target__has_cpu(struct target *target) --=20 2.49.0.604.gff1f9ca942-goog From nobody Fri Dec 19 08:06:18 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 683CC293B48 for ; Thu, 10 Apr 2025 17:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306630; cv=none; b=GmEoBiz2wNKOwY320fZb69H13NfscEoDNGvANC7mT1ATcAQfIpOm9YLKNKlVapZ4EG09bUAWGI/DA+g1iBcGGZnwnKULhYzfVEbqD5zgTIOaUKtAC+p1z8sTuaxiKWt7DyWcgjXpLroJsrEFhrmDZHc5D23o/9BnwObfCnFcSmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744306630; c=relaxed/simple; bh=+ixP1qHJBFjj59ZtGOMdYOK7HgE7wWblrGVYMQO0l7I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=C/fyD3rfRN1pIP0UHeB3jdj3Dn8pmCXKprQjEvl0YOXtxySr/DGqUHb283rpw3UJgGLReOh9QQYx+JotMzeKm8WIQTeGOBrsvZ9VjkIdY2+84xT1vRIqeO6a4aIV1MH2Hbea7m5HYoRrwClQgrB6XOY+fprFq/dOv5m2tb+9eNA= 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=UAtJe1sx; arc=none smtp.client-ip=209.85.216.73 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="UAtJe1sx" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff8340d547so962286a91.2 for ; Thu, 10 Apr 2025 10:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1744306627; x=1744911427; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ckBZYcyyJUN9FjcUaUL5/ekJZ+dJKWbrJB0EF0qu50A=; b=UAtJe1sxMef7RiCPyfLSDNtLGATsM0Zgoa/S3eZypn5bvgWP9IVrPzgfcWy2BYVeQB BlRF0eCcVLGWKv3Mu4bJd3xc6vR5pr1ywEl9dRYsHMcEO3XyKYAbdtJWMHBDvZC7YVtC cuYNxqOJi6f+GoeZcPHNtr4P2qAJbVNqOi+ygO7OENKW3VJ/wEP6zFGrNiX0hGxlt8Lp OkD37m1uD1vWLniDg5qzj9rna+fRRZ86dCRD5CdgDhj2AIEwtJSeRMW5CQinVeue77hZ gHqBMmp56Am7HrXl8z+PXRkBQaM/6w90Jccz7SdEf8zCCu9G8VxZXYt0VDuankWRITSo vjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744306627; x=1744911427; h=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=ckBZYcyyJUN9FjcUaUL5/ekJZ+dJKWbrJB0EF0qu50A=; b=d02C1yMbTwiMgnFAfLXki6vQRdA9nMEFeADYbuaVpvKlLGE7+l/4QiCDoM+KjO8y+A RrcCltF+wMLcVZ85WhmLJGtxbb7WnlFVBykKLgZUUZne74XsEl7U3XnwzqpmEvUkMXXa Lqv/vW+bGBuWgKXTQnG7VgPiMHrQ8bk2xgPo7rQqv+L1IqcYo7ON7f0MNmqxeDlwb0Lf uycPJSXwdquDwH0koUNWy/RDasr+BPXlS20liNyxTtfrm4DnAhwvEkL6qXs4h5kz+/rC BrcmSB9wlZ7DqQ3kqsm3X5K1b42I6zbxbf51CIV7uA1Cj3s6gSiraYrO0HAPuW+yfEdh yxyg== X-Forwarded-Encrypted: i=1; AJvYcCWY3YCA8iX31Ra23BMbgThymGMOBWM+tx3QQVY7j47UL9Emp8fMZx6+GA8yCLpLdCVTC4cuN9TLNH+sN4Q=@vger.kernel.org X-Gm-Message-State: AOJu0YxxrJMF2M0bO+cx51k3wAgUZhZq6zlmJfOLv5i1f/Kp7gvvzGMe QSMqon8D3g1MNeNXrfBTbRyhagD0L6dep8ApclqIAgFBNHqxV0Jc4KqNdWJ1H82W38C/wilkMPx 3yti87A== X-Google-Smtp-Source: AGHT+IG1qOFPzSDf9Ewl3xwJO7ONlzQPJXL9CVsc0lXzOmGKPKFYYwMJamiZf+cuyQopWHvr1ogG7wLUF1hJ X-Received: from pjbsd3.prod.google.com ([2002:a17:90b:5143:b0:2ea:3a1b:f493]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3a46:b0:2ee:af31:a7bd with SMTP id 98e67ed59e1d1-30718b547a9mr5165280a91.5.1744306627554; Thu, 10 Apr 2025 10:37:07 -0700 (PDT) Date: Thu, 10 Apr 2025 10:36:31 -0700 In-Reply-To: <20250410173631.1713627-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: <20250410173631.1713627-1-irogers@google.com> X-Mailer: git-send-email 2.49.0.604.gff1f9ca942-goog Message-ID: <20250410173631.1713627-13-irogers@google.com> Subject: [PATCH v2 12/12] perf thread_map: Remove uid options From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Dapeng Mi , Thomas Richter , Veronika Molnarova , Hao Ge , Howard Chu , Weilin Wang , Levi Yun , "Dr. David Alan Gilbert" , Dominique Martinet , Xu Yang , Tengda Wu , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now the target doesn't have a uid, it is handled through BPF filters, remove the uid options to thread_map creation. Tidy up the functions used in tests to avoid passing unused arguments. Signed-off-by: Ian Rogers --- tools/perf/tests/event-times.c | 4 +-- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-all-cpus.c | 2 +- tools/perf/tests/openat-syscall.c | 2 +- tools/perf/tests/perf-time-to-tsc.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/thread-map.c | 2 +- tools/perf/util/evlist.c | 2 +- tools/perf/util/python.c | 10 +++---- tools/perf/util/thread_map.c | 32 ++-------------------- tools/perf/util/thread_map.h | 6 ++-- 12 files changed, 20 insertions(+), 48 deletions(-) diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c index 2148024b4f4a..ae3b98bb42cf 100644 --- a/tools/perf/tests/event-times.c +++ b/tools/perf/tests/event-times.c @@ -62,7 +62,7 @@ static int attach__current_disabled(struct evlist *evlist) =20 pr_debug("attaching to current thread as disabled\n"); =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); if (threads =3D=3D NULL) { pr_debug("thread_map__new\n"); return -1; @@ -88,7 +88,7 @@ static int attach__current_enabled(struct evlist *evlist) =20 pr_debug("attaching to current thread as enabled\n"); =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); if (threads =3D=3D NULL) { pr_debug("failed to call thread_map__new\n"); return -1; diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-track= ing.c index 5a3b2bed07f3..eafb49eb0b56 100644 --- a/tools/perf/tests/keep-tracking.c +++ b/tools/perf/tests/keep-tracking.c @@ -78,7 +78,7 @@ static int test__keep_tracking(struct test_suite *test __= maybe_unused, int subte int found, err =3D -1; const char *comm; =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); CHECK_NOT_NULL__(threads); =20 cpus =3D perf_cpu_map__new_online_cpus(); diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index bd2106628b34..04b547c6bdbe 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c @@ -46,7 +46,7 @@ static int test__basic_mmap(struct test_suite *test __may= be_unused, int subtest char sbuf[STRERR_BUFSIZE]; struct mmap *md; =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); if (threads =3D=3D NULL) { pr_debug("thread_map__new\n"); return -1; diff --git a/tools/perf/tests/openat-syscall-all-cpus.c b/tools/perf/tests/= openat-syscall-all-cpus.c index fb114118c876..3644d6f52c07 100644 --- a/tools/perf/tests/openat-syscall-all-cpus.c +++ b/tools/perf/tests/openat-syscall-all-cpus.c @@ -28,7 +28,7 @@ static int test__openat_syscall_event_on_all_cpus(struct = test_suite *test __mayb struct evsel *evsel; unsigned int nr_openat_calls =3D 111, i; cpu_set_t cpu_set; - struct perf_thread_map *threads =3D thread_map__new(-1, getpid(), UINT_MA= X); + struct perf_thread_map *threads =3D thread_map__new_by_tid(getpid()); char sbuf[STRERR_BUFSIZE]; char errbuf[BUFSIZ]; =20 diff --git a/tools/perf/tests/openat-syscall.c b/tools/perf/tests/openat-sy= scall.c index 131b62271bfa..b54cbe5f1808 100644 --- a/tools/perf/tests/openat-syscall.c +++ b/tools/perf/tests/openat-syscall.c @@ -20,7 +20,7 @@ static int test__openat_syscall_event(struct test_suite *= test __maybe_unused, int err =3D TEST_FAIL, fd; struct evsel *evsel; unsigned int nr_openat_calls =3D 111, i; - struct perf_thread_map *threads =3D thread_map__new(-1, getpid(), UINT_MA= X); + struct perf_thread_map *threads =3D thread_map__new_by_tid(getpid()); char sbuf[STRERR_BUFSIZE]; char errbuf[BUFSIZ]; =20 diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-ti= me-to-tsc.c index d3e40fa5482c..d4437410c99f 100644 --- a/tools/perf/tests/perf-time-to-tsc.c +++ b/tools/perf/tests/perf-time-to-tsc.c @@ -90,7 +90,7 @@ static int test__perf_time_to_tsc(struct test_suite *test= __maybe_unused, int su struct mmap *md; =20 =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); CHECK_NOT_NULL__(threads); =20 cpus =3D perf_cpu_map__new_online_cpus(); diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-t= racking.c index 8df3f9d9ffd2..96f880c922d1 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -351,7 +351,7 @@ static int test__switch_tracking(struct test_suite *tes= t __maybe_unused, int sub const char *comm; int err =3D -1; =20 - threads =3D thread_map__new(-1, getpid(), UINT_MAX); + threads =3D thread_map__new_by_tid(getpid()); if (!threads) { pr_debug("thread_map__new failed!\n"); goto out_err; diff --git a/tools/perf/tests/thread-map.c b/tools/perf/tests/thread-map.c index 1fe521466bf4..54209592168d 100644 --- a/tools/perf/tests/thread-map.c +++ b/tools/perf/tests/thread-map.c @@ -115,7 +115,7 @@ static int test__thread_map_remove(struct test_suite *t= est __maybe_unused, int s TEST_ASSERT_VAL("failed to allocate map string", asprintf(&str, "%d,%d", getpid(), getppid()) >=3D 0); =20 - threads =3D thread_map__new_str(str, NULL, 0, false); + threads =3D thread_map__new_str(str, /*tid=3D*/NULL, /*all_threads=3D*/fa= lse); free(str); =20 TEST_ASSERT_VAL("failed to allocate thread_map", diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 2e1f14bc8461..8a7ec845a611 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1006,7 +1006,7 @@ int evlist__create_maps(struct evlist *evlist, struct= target *target) * per-thread data. thread_map__new_str will call * thread_map__new_all_cpus to enumerate all threads. */ - threads =3D thread_map__new_str(target->pid, target->tid, UINT_MAX, all_t= hreads); + threads =3D thread_map__new_str(target->pid, target->tid, all_threads); =20 if (!threads) return -1; diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index f3c05da25b4a..56f8ae4cebf7 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -566,14 +566,14 @@ struct pyrf_thread_map { static int pyrf_thread_map__init(struct pyrf_thread_map *pthreads, PyObject *args, PyObject *kwargs) { - static char *kwlist[] =3D { "pid", "tid", "uid", NULL }; - int pid =3D -1, tid =3D -1, uid =3D UINT_MAX; + static char *kwlist[] =3D { "pid", "tid", NULL }; + int pid =3D -1, tid =3D -1; =20 - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iii", - kwlist, &pid, &tid, &uid)) + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii", + kwlist, &pid, &tid)) return -1; =20 - pthreads->threads =3D thread_map__new(pid, tid, uid); + pthreads->threads =3D thread_map__new(pid, tid); if (pthreads->threads =3D=3D NULL) return -1; return 0; diff --git a/tools/perf/util/thread_map.c b/tools/perf/util/thread_map.c index b5f12390c355..ca193c1374ed 100644 --- a/tools/perf/util/thread_map.c +++ b/tools/perf/util/thread_map.c @@ -72,7 +72,7 @@ struct perf_thread_map *thread_map__new_by_tid(pid_t tid) return threads; } =20 -static struct perf_thread_map *__thread_map__new_all_cpus(uid_t uid) +static struct perf_thread_map *thread_map__new_all_cpus(void) { DIR *proc; int max_threads =3D 32, items, i; @@ -98,15 +98,6 @@ static struct perf_thread_map *__thread_map__new_all_cpu= s(uid_t uid) if (*end) /* only interested in proper numerical dirents */ continue; =20 - snprintf(path, sizeof(path), "/proc/%s", dirent->d_name); - - if (uid !=3D UINT_MAX) { - struct stat st; - - if (stat(path, &st) !=3D 0 || st.st_uid !=3D uid) - continue; - } - snprintf(path, sizeof(path), "/proc/%d/task", pid); items =3D scandir(path, &namelist, filter, NULL); if (items <=3D 0) { @@ -157,24 +148,11 @@ static struct perf_thread_map *__thread_map__new_all_= cpus(uid_t uid) goto out_closedir; } =20 -struct perf_thread_map *thread_map__new_all_cpus(void) -{ - return __thread_map__new_all_cpus(UINT_MAX); -} - -struct perf_thread_map *thread_map__new_by_uid(uid_t uid) -{ - return __thread_map__new_all_cpus(uid); -} - -struct perf_thread_map *thread_map__new(pid_t pid, pid_t tid, uid_t uid) +struct perf_thread_map *thread_map__new(pid_t pid, pid_t tid) { if (pid !=3D -1) return thread_map__new_by_pid(pid); =20 - if (tid =3D=3D -1 && uid !=3D UINT_MAX) - return thread_map__new_by_uid(uid); - return thread_map__new_by_tid(tid); } =20 @@ -289,15 +267,11 @@ struct perf_thread_map *thread_map__new_by_tid_str(co= nst char *tid_str) goto out; } =20 -struct perf_thread_map *thread_map__new_str(const char *pid, const char *t= id, - uid_t uid, bool all_threads) +struct perf_thread_map *thread_map__new_str(const char *pid, const char *t= id, bool all_threads) { if (pid) return thread_map__new_by_pid_str(pid); =20 - if (!tid && uid !=3D UINT_MAX) - return thread_map__new_by_uid(uid); - if (all_threads) return thread_map__new_all_cpus(); =20 diff --git a/tools/perf/util/thread_map.h b/tools/perf/util/thread_map.h index 00ec05fc1656..fc16d87f32fb 100644 --- a/tools/perf/util/thread_map.h +++ b/tools/perf/util/thread_map.h @@ -11,13 +11,11 @@ struct perf_record_thread_map; struct perf_thread_map *thread_map__new_dummy(void); struct perf_thread_map *thread_map__new_by_pid(pid_t pid); struct perf_thread_map *thread_map__new_by_tid(pid_t tid); -struct perf_thread_map *thread_map__new_by_uid(uid_t uid); -struct perf_thread_map *thread_map__new_all_cpus(void); -struct perf_thread_map *thread_map__new(pid_t pid, pid_t tid, uid_t uid); +struct perf_thread_map *thread_map__new(pid_t pid, pid_t tid); struct perf_thread_map *thread_map__new_event(struct perf_record_thread_ma= p *event); =20 struct perf_thread_map *thread_map__new_str(const char *pid, - const char *tid, uid_t uid, bool all_threads); + const char *tid, bool all_threads); =20 struct perf_thread_map *thread_map__new_by_tid_str(const char *tid_str); =20 --=20 2.49.0.604.gff1f9ca942-goog