From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) (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 23482B663; Thu, 15 Aug 2024 01:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685803; cv=none; b=HqoT0H2Sdz00CTVEqRxDuoLGD4g6pkx+yG73KilAULa3v5WyHWL45m6hbAvHYzaRBKhe0lJXKoyqH0HqytBsTYDEwEzhSv+9oRyi1zTcwKJ1OjWbC5F6Mk3HSsciv4DEcRRvTc23RRHoQeVq1isfYv0fAXNLg553ZolBb/PFNn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685803; c=relaxed/simple; bh=/zEv8M9GajqLNiVXDbDbUzFLJxXKfIlEjtf7j8fihFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C1wbnSgZLubyyHAu9iy2EYxB3hW0UcEh+PbFb2CTc8BbnIdFhMsrmDEKX5pzV7jA8pFoWadwgaPYTL0P9AkS4Mg5pID+5dG2iYeLRh2QItMJcnMFPLpnDST4y2r+nZ2NXLFIJ58M3MaiBs6QXChYMKGbOi5XzlSKyY9sfCOAwis= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y6oP6Aah; arc=none smtp.client-ip=209.85.160.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y6oP6Aah" Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-26fd5a65057so415491fac.0; Wed, 14 Aug 2024 18:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685801; x=1724290601; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zhAQIULCNKZIk1tNzCvuYy9BXBZ3c18NDxYNH/x924A=; b=Y6oP6AahXY6Jst/aPocxvO9fmD6qfsH8KIGpoITN1RzyDCHrAAxz9txbwCSi7Yyzzo fnnvCB5YJu1fb4e5DUhFMWc56PnmCJayxfBNWGNIOXtZJQzITbyC9s0OkwyoMhZNZHea u6OW8pgU7f1GNmZ7izk5RzOEYmlb5g7gxlj6r+vd4HVmAIyP9c8bg5n6NwxHdVrgtMjs XT3Lqd0g+/7BauoPZ8RFDqqYZm87dy4M7KavLOHDY9pt/MlZNeJmM0PHHrpTSpgTXNkX yf/HHw/+zRQN17OSJRRfUy3qLj6t95QmLKe/we3UoFDoWtGJfLz9xJiGfNYYZp3c8Ofs Q8Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685801; x=1724290601; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zhAQIULCNKZIk1tNzCvuYy9BXBZ3c18NDxYNH/x924A=; b=baDHuueLF36y1CGEgQnQPmv1fq518DXlHcLS9RbRD38HPhK9cmQMN4f4vic2cR7XM6 Wi5gd0dBWpZyHYvQ1BDXZ87foo+lm9291q8tlAR2QZJAT6qJT1XPq2DroQjATI+/IBe0 aTq9zc3IocbdkCX91iJTZmYNtRH2AmAZwkEgnNshSlV/NwDrCdgQ2nS+Wou8JuJS40l9 W0gdvHEBPDT86/aX3WQFhl91fpH1AvW1H2PtpCbGu157nSZRY8FD5wCG3XGrMyA0Vvkw H1EJICR1Radflugvb9DNyxaEE0OCPjVyKWmbDt5p0Q/9HXxu+KJOqYeoA/HnN2Wlzp63 vF7g== X-Forwarded-Encrypted: i=1; AJvYcCXRBHe+oQt8d5BnEM5S8LgovsdkRxS2SdzVE8wlZmuuig0rzEChoLIh77+7DLorwFHdtPdKBhxL2hlMYFjG5KahcA==@vger.kernel.org, AJvYcCXYnsAarSJCiI1xsTZIErVxn0+NY0AIQ3ubrdXWUGzhBp3V4LiN/qbypHJxS6W1J+01aVcZWwOWLWvXxgc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy24AQ/U/I1/Wem+b2gXZW5J5E/93W6EEZCusISLC9/cJzWunf9 WjpUf99He0gAxCB4be7DJPDc8YBi3I+kuf9qXGMzphZRA+eoYXcg X-Google-Smtp-Source: AGHT+IGXgoLIiAXccpht+n/Mwm7s3WcADg4LTBbUE+zLZ70P4sh6n80+FmF9XI42AMZ58p2SW4a9VQ== X-Received: by 2002:a05:6870:9691:b0:261:72a:1336 with SMTP id 586e51a60fabf-26fe5c45c67mr4816123fac.50.1723685801064; Wed, 14 Aug 2024 18:36:41 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:40 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 01/10] perf trace: Fix perf trace -p Date: Thu, 15 Aug 2024 09:36:17 +0800 Message-ID: <20240815013626.935097-2-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" perf trace -p work on a syscall that is unaugmented, but doesn't work on a syscall that's augmented (when it calls perf_event_output() in BPF). Let's take open() as an example. open() is augmented in perf trace. Before: ``` perf $ perf trace -e open -p 3792392 ? ( ): ... [continued]: open()) = =3D -1 ENOENT (No such file or directory) ? ( ): ... [continued]: open()) = =3D -1 ENOENT (No such file or directory) ``` We can see there's no output. After: ``` perf $ perf trace -e open -p 3792392 0.000 ( 0.123 ms): a.out/3792392 open(filename: "DINGZHEN", flags: WRO= NLY) =3D -1 ENOENT (No such file or directory) 1000.398 ( 0.116 ms): a.out/3792392 open(filename: "DINGZHEN", flags: WRO= NLY) =3D -1 ENOENT (No such file or directory) ``` Reason: bpf_perf_event_output() will fail when you specify a pid in perf trace (EOP= NOTSUPP). When using perf trace -p 114, before perf_event_open(), we'll have PID =3D 114, and CPU =3D -1. This is bad for bpf-output event, because the ring buffer won't accept output from BPF's perf_event_output(), making it fail. I'm still trying to find out why. If we open bpf-output for every cpu, instead of setting it to -1, like this: PID =3D , CPU =3D 0 PID =3D , CPU =3D 1 PID =3D , CPU =3D 2 PID =3D , CPU =3D 3 ... Everything works. You can test it with this script: ``` #include #include int main() { int i1 =3D 1, i2 =3D 2, i3 =3D 3, i4 =3D 4; char s1[] =3D "DINGZHEN", s2[] =3D "XUEBAO"; while (1) { syscall(SYS_open, s1, i1, i2); sleep(1); } return 0; } ``` save, compile ``` gcc open.c ``` perf trace ``` perf trace -e open ``` Signed-off-by: Howard Chu --- tools/perf/util/evlist.c | 14 +++++++++++++- tools/perf/util/evlist.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index c0379fa1ccfe..f14b7e6ff1dc 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1067,7 +1067,7 @@ int evlist__create_maps(struct evlist *evlist, struct= target *target) if (!threads) return -1; =20 - if (target__uses_dummy_map(target)) + if (target__uses_dummy_map(target) && !evlist__has_bpf_output(evlist)) cpus =3D perf_cpu_map__new_any_cpu(); else cpus =3D perf_cpu_map__new(target->cpu_list); @@ -2627,3 +2627,15 @@ void evlist__uniquify_name(struct evlist *evlist) } } } + +bool evlist__has_bpf_output(struct evlist *evlist) +{ + struct evsel *evsel; + + evlist__for_each_entry(evlist, evsel) { + if (evsel__is_bpf_output(evsel)) + return true; + } + + return false; +} diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index b46f1a320783..bcc1c6984bb5 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -447,5 +447,6 @@ int evlist__scnprintf_evsels(struct evlist *evlist, siz= e_t size, char *bf); void evlist__check_mem_load_aux(struct evlist *evlist); void evlist__warn_user_requested_cpus(struct evlist *evlist, const char *c= pu_list); void evlist__uniquify_name(struct evlist *evlist); +bool evlist__has_bpf_output(struct evlist *evlist); =20 #endif /* __PERF_EVLIST_H */ --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (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 BC08D175A5; Thu, 15 Aug 2024 01:36:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685807; cv=none; b=kVaYcohW84I+vr4N5bQM/6Zi524KoBPXVoAcf077z3aOtexUMMTl0RrAHQej04K+iOL8m7tQkKOn6gZ3Mm920yc2bDkYhuHwHycK6lsE8F3wMdPuW1Cwc9uy9M8VM+FeC/Y4hzbLtClMXp7sx15uKQVb/kqPMbAtku4a3mkZRD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685807; c=relaxed/simple; bh=dJ6dwsc2te6C4fqphCuQO/mJgw1cnG5U9ZswITvx73k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cd1HR5E45dMSWdaN+mfkFdiTteh4LQwNzqZm3Y/JVfVbz0smRJfi3jSt0/LP5V9szXElJxGnQRzTTlbwiMqJBE7Tqm7D4rCI0otQurIW74cXoTld13gZ0P1Pni4TMFT1xmosls32cRu10NALPulmJVsuWeagd+USy0iWA3unr+M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nTv2CxDb; arc=none smtp.client-ip=209.85.167.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nTv2CxDb" Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3db1eb76702so297018b6e.0; Wed, 14 Aug 2024 18:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685805; x=1724290605; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=w5rrF35FuSQmX3OBIO6C+kKuzZZYCa/QtNoSMLimFXA=; b=nTv2CxDbJOtzgxlYtmZy88KU9tuvXqUgpM8Qjx1gA+gUgCG5cz+ugA7pGkGRVaoRAj 56GR/B6aKBI8QonYU0QJ4SmPF7RHfvWLowbZlG/iwCKXCYEFvWiRDjzum4LfP/XHzmq/ AXMbqwKqBaXBsRmJm808J1Nf55agxxocm4L7U2y7nfd/95dXXaw//1/07i8Oiwb+wo8j 22K0N15xk0v4GT7mAKhHbZfLzdXmou60UVBMsfv9UkI2VK/6CUwffqNWoJiwEzgR2CP3 wqNyjFZwk9oH4DuhdqtrysMSNh6WH2kcICZ0SMulH5fYzmlKPsID5VMIOj3PdKiXUNpw BdIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685805; x=1724290605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=w5rrF35FuSQmX3OBIO6C+kKuzZZYCa/QtNoSMLimFXA=; b=lxghxUjP/9QHvRlJ44AmnKLMX2o8PeYtvQFPeEuQGPAKk3ErFlIM3h/tkaQclM4U5k 56TFJhHGm6cF1vvy+wyZ9eQFeZ6Z1K3R7GRsiLHEBsiD+SwNAHjUPJ4IilsyqJHs2urw dh8Phxe777kedlBdmSFujnxg+gLqsEDR1kQ5drjuL6tZWHtNIKbiIOcnAgo30tCUnUX+ lX+xVgn2AKfCT0W4jtEzvJMU6wGSQWmgJ7efOF/gIbBhdPifSdVy9Irm9YE/M+BNKl+R G11CW3VtH4kiWxZyanxGiyfO3R4GQVDYk4//QXLIbVTgj9bHNmWMsW5RAjmxJeXCH7iT caHg== X-Forwarded-Encrypted: i=1; AJvYcCVFX4hpz8XCSYJdWJi6GrBnoGAeDWSXKZlEVgsmUVEH0zh86iA3pYMRIR0+QLTBS1M74BAnXGxPqkYt4L0PV4MsYv+0gPltMIGpwtAWJ3e5qvvpfpUmNopISNLULDO9yayj3iwWaDpSLd/X8/YLfw== X-Gm-Message-State: AOJu0YzoUZfAvJCDfrN8lDKuz7N14kHoDuRXV1qSWly0kTYEa7xhYHbT tFzfFA+3PURCj92lPezjEzUs/AMu8zXexiXDRhnk/kTj/E22Yxcz X-Google-Smtp-Source: AGHT+IGEgh6F0/+r7yu/UnkU0eMUnFxU67aCH/qRaiCzOyup63Kb3A7OIjo12O+Jo9aua6d86r3FPg== X-Received: by 2002:a05:6870:d29e:b0:25e:118e:ce89 with SMTP id 586e51a60fabf-26fe5a41ac4mr5740894fac.11.1723685804820; Wed, 14 Aug 2024 18:36:44 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:44 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 02/10] perf trace: Change some comments Date: Thu, 15 Aug 2024 09:36:18 +0800 Message-ID: <20240815013626.935097-3-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change them from '//' to '/* */' Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index d6ca541fdc78..97076b962688 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -957,17 +957,16 @@ static bool syscall_arg__strtoul_btf_type(char *bf, s= ize_t size, struct syscall_ if (btf =3D=3D NULL) return false; =20 - if (arg->fmt->type =3D=3D NULL) { - // See if this is an enum + /* See if this is an enum */ + if (arg->fmt->type =3D=3D NULL) syscall_arg_fmt__cache_btf_enum(arg->fmt, btf, type); - } =20 - // Now let's see if we have a BTF type resolved + /* Now let's see if we have a BTF type resolved */ bt =3D arg->fmt->type; if (bt =3D=3D NULL) return false; =20 - // If it is an enum: + /* If it is an enum: */ if (btf_is_enum(arg->fmt->type)) return syscall_arg__strtoul_btf_enum(bf, size, arg, val); =20 --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oa1-f48.google.com (mail-oa1-f48.google.com [209.85.160.48]) (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 A6BF822331; Thu, 15 Aug 2024 01:36:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685811; cv=none; b=sjZxfS6BWNXU4pcSwB/KyxjBxj0XW5/vIQ+FCP9H4lXMmh4kPUc2cshqw0OI3itKkzzRfRPhZpmRRzYXBrc8KmWVDB8BrvljbLqgpzkxTCTD95dOV+hiJSOEW86/caxweNgb5HbyGOnThLa9sNc/zAkiI64mx0MYuxepDrJpfCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685811; c=relaxed/simple; bh=8PSYrEoSqTOKDPb3MKTCzPSrb0bPjJzPpCLLP8YEZVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ta7X5KV3nNMaX30cOcnrCPS1ob9ss9jPCIuFqLEpxqsjYC0nsG8ewZZtiDVuzRO6IgySxh5FPCwJ1BU8uchxKbvHdJknOaUwBYGq6urrMlQeD4d4QTpDdwhHDaZj9F93jAeSs9SpE5DRju+SwMcEdlTvVfsaxDPeGfN7/DyKW18= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bLYQ4pve; arc=none smtp.client-ip=209.85.160.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bLYQ4pve" Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-26ff51294c4so386518fac.3; Wed, 14 Aug 2024 18:36:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685809; x=1724290609; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zSgV602+Ysoo9Kb67N9Db2Q5XyQw6Ub7x1SiEGD+57U=; b=bLYQ4pvekIKLMfLRjv4k5J7aOkX9YLPax/uKKbKku1DNxcAVz5ndjeL8HTssTO/3dp eRLX/Z8jTxY/mhWTHWBgPvlAqD4JNyTelhQjdyIweA8jDmIRx/6lIvHziY3LPjnEW7r8 dAo6AZc7yPqybTh7CdIVErvf1pZpqUyRLGMTS7lJzmIlD417NnNbGwcl2Og69uEkXeiY 2cD/R9eWednd+o1qL0sJ8IpDepsLZOKgBwEzeAvit1piR8laksIbkng50HGcNrlO16EU OQk4F9nUGkulEDqWq0O8qVnNPMPyV/384rfepkVj1KAaBCnNM2gO1q14jwq9z+8hJhtI x3kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685809; x=1724290609; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zSgV602+Ysoo9Kb67N9Db2Q5XyQw6Ub7x1SiEGD+57U=; b=ugy+75dnR/QTd/jYcfPhr1RFhjhS2F3hieMxbgQLnPjMswY4OSFfksm+Gl4uBSSWY1 /OpJWnjawV2qjUFzxXqwvVSE1FrNhoQGNKn2l0X5bMv9bh4lFaXaO1bLtkpJSETIiXoO NTB2t1kSXHTK9Z0YtJUKirHWKzIgkKuX71CfG+CJSiBHiP8pxyZttbOrSOGx8o37Plrj RhEa7Sp3KCBC+XKXHGtXLHDZ04asOXtNEE/n3YtymkJkxYkLF0Gn5M+S2GCnB6kZ+3Go VMJDMck7eSZftThNZFMfAucN08P5GRy+wu3SxFkLsaaSRGNrR8TjxMl4MgUti7EI/d9i Ghtg== X-Forwarded-Encrypted: i=1; AJvYcCUxM+WF8O1iQ1YjeBzF+wfEdE3uBzLcREkSscm4onhnv+KuO2bw/nNqLYT96HfzmEaGhDrVQyOBDp5FpL7NGwqL6vT/SBXQVVxXjAwmYqg+2AaGrn0cBZTtzb5JL/ehRn+eQ7HD//tKJ0zbAB4sLw== X-Gm-Message-State: AOJu0Yziwi1zgOoQigDX7h45DJGH21v+u3kmttKepxJucXOz5sPJajRL l1703uhGFi6HigasLS7UuXMKaMCjy1Bs+P9CPcQJRhI2TqHwTZnw X-Google-Smtp-Source: AGHT+IHEDKX5YUMGycdZtbZwf9LMvNFKsQr+9vx63j501bDOihrYJh6U/YHtgfDh386V6vXcUFkBDQ== X-Received: by 2002:a05:6871:28c:b0:261:7af:719c with SMTP id 586e51a60fabf-26fe5be0376mr5628203fac.35.1723685808695; Wed, 14 Aug 2024 18:36:48 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:48 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 03/10] perf trace: Add trace__bpf_sys_enter_beauty_map() to prepare for fetching data in BPF Date: Thu, 15 Aug 2024 09:36:19 +0800 Message-ID: <20240815013626.935097-4-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Set up beauty_map, load it to BPF, in such format: if argument No.3 is a struct of size 32 bytes (of syscall number 114) beauty_map[114][2] =3D 32; if argument No.3 is a string (of syscall number 114) beauty_map[114][2] =3D 1; if argument No.3 is a buffer, its size is indicated by argument No.4 (of syscall number 114) beauty_map[114][2] =3D -4; /* -1 ~ -6, we'll read this buffer size in BPF */ Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 106 +++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 97076b962688..e7e8c89d9538 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -113,6 +113,7 @@ struct syscall_arg_fmt { bool show_zero; #ifdef HAVE_LIBBPF_SUPPORT const struct btf_type *type; + int type_id; /* used in btf_dump */ #endif }; =20 @@ -926,6 +927,23 @@ static void syscall_arg_fmt__cache_btf_enum(struct sys= call_arg_fmt *arg_fmt, str arg_fmt->type =3D btf__type_by_id(btf, id); } =20 +static int syscall_arg_fmt__cache_btf_struct(struct syscall_arg_fmt *arg_f= mt, struct btf *btf, char *type) +{ + int id; + + if (arg_fmt->type !=3D NULL) + return -1; + + id =3D btf__find_by_name(btf, type); + if (id < 0) + return -1; + + arg_fmt->type =3D btf__type_by_id(btf, id); + arg_fmt->type_id =3D id; + + return 0; +} + static bool syscall_arg__strtoul_btf_enum(char *bf, size_t size, struct sy= scall_arg *arg, u64 *val) { const struct btf_type *bt =3D arg->fmt->type; @@ -3520,6 +3538,83 @@ static int trace__bpf_prog_sys_exit_fd(struct trace = *trace, int id) return sc ? bpf_program__fd(sc->bpf_prog.sys_exit) : bpf_program__fd(trac= e->skel->progs.syscall_unaugmented); } =20 +static int trace__bpf_sys_enter_beauty_map(struct trace *trace, int key, u= nsigned int *beauty_array) +{ + struct tep_format_field *field; + struct syscall *sc =3D trace__syscall_info(trace, NULL, key); + const struct btf_type *bt; + char *struct_offset, *tmp, name[32]; + bool can_augment =3D false; + int i, cnt; + + if (sc =3D=3D NULL) + return -1; + + trace__load_vmlinux_btf(trace); + if (trace->btf =3D=3D NULL) + return -1; + + for (i =3D 0, field =3D sc->args; field; ++i, field =3D field->next) { + struct_offset =3D strstr(field->type, "struct "); + + if (field->flags & TEP_FIELD_IS_POINTER && struct_offset) { /* struct */ + struct_offset +=3D 7; + + /* for 'struct foo *', we only want 'foo' */ + for (tmp =3D struct_offset, cnt =3D 0; *tmp !=3D ' ' && *tmp !=3D '\0';= ++tmp, ++cnt) { + } + + strncpy(name, struct_offset, cnt); + name[cnt] =3D '\0'; + + /* cache struct's btf_type and type_id */ + if (syscall_arg_fmt__cache_btf_struct(&sc->arg_fmt[i], trace->btf, name= )) + continue; + + bt =3D sc->arg_fmt[i].type; + beauty_array[i] =3D bt->size; + can_augment =3D true; + } else if (field->flags & TEP_FIELD_IS_POINTER && /* string */ + strcmp(field->type, "const char *") =3D=3D 0 && + (strstr(field->name, "name") || + strstr(field->name, "path") || + strstr(field->name, "file") || + strstr(field->name, "root") || + strstr(field->name, "key") || + strstr(field->name, "special") || + strstr(field->name, "type") || + strstr(field->name, "description"))) { + beauty_array[i] =3D 1; + can_augment =3D true; + } else if (field->flags & TEP_FIELD_IS_POINTER && /* buffer */ + strstr(field->type, "char *") && + (strstr(field->name, "buf") || + strstr(field->name, "val") || + strstr(field->name, "msg"))) { + int j; + struct tep_format_field *field_tmp; + + /* find the size of the buffer that appears in pairs with buf */ + for (j =3D 0, field_tmp =3D sc->args; field_tmp; ++j, field_tmp =3D fie= ld_tmp->next) { + if (!(field_tmp->flags & TEP_FIELD_IS_POINTER) && /* only integers */ + (strstr(field_tmp->name, "count") || + strstr(field_tmp->name, "siz") || /* size, bufsiz */ + (strstr(field_tmp->name, "len") && strcmp(field_tmp->name, "filen= ame")))) { + /* filename's got 'len' in it, we don't want that */ + beauty_array[i] =3D -(j + 1); + can_augment =3D true; + break; + } + } + } + } + + if (can_augment) + return 0; + + return -1; +} + static struct bpf_program *trace__find_usable_bpf_prog_entry(struct trace = *trace, struct syscall *sc) { struct tep_format_field *field, *candidate_field; @@ -3624,7 +3719,9 @@ static int trace__init_syscalls_bpf_prog_array_maps(s= truct trace *trace) { int map_enter_fd =3D bpf_map__fd(trace->skel->maps.syscalls_sys_enter); int map_exit_fd =3D bpf_map__fd(trace->skel->maps.syscalls_sys_exit); + int beauty_map_fd =3D bpf_map__fd(trace->skel->maps.beauty_map_enter); int err =3D 0; + unsigned int beauty_array[6]; =20 for (int i =3D 0; i < trace->sctbl->syscalls.nr_entries; ++i) { int prog_fd, key =3D syscalltbl__id_at_idx(trace->sctbl, i); @@ -3643,6 +3740,15 @@ static int trace__init_syscalls_bpf_prog_array_maps(= struct trace *trace) err =3D bpf_map_update_elem(map_exit_fd, &key, &prog_fd, BPF_ANY); if (err) break; + + /* use beauty_map to tell BPF how many bytes to collect, set beauty_map'= s value here */ + memset(beauty_array, 0, sizeof(beauty_array)); + err =3D trace__bpf_sys_enter_beauty_map(trace, key, (unsigned int *)beau= ty_array); + if (err) + continue; + err =3D bpf_map_update_elem(beauty_map_fd, &key, beauty_array, BPF_ANY); + if (err) + break; } =20 /* --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 3E76B28DC1; Thu, 15 Aug 2024 01:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685814; cv=none; b=DANN4ArgE1hishkw9zw+0TepYJUe11432EVr+E3zhuC6VVoRpXYMeWyS/k9Nqis8TUOrUvK+1Awpij49UxeOHvldv9RgbH1YP8hjcZf3XxLFOMS3VXmy0qwIwCK/EnJm+1gJUGUU/FQcQ8ZWNOzq9m/PjJyABE6sGd9KF/tvJeo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685814; c=relaxed/simple; bh=c4gO+uQ4Clme1GERd/mFuj0vU9FiRxLFgXlUCt99pm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Wg+BQSseOKO1j2g2Ad0PW3hBEnpBoLd9fvoeJSA7cJWE/gYRqNK4N/qergMiiyedYHPlJqdNOCaoWYYEuVRP1ZhlclZes8S2BrjbCLLsCwJmh3SOiGAp7jQJdUiB3Es+6aorxT3Ex5zwvVDuN29PTgAKXQr+ttT5WjX38e4WkMc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=F39OtrwH; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="F39OtrwH" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-710ffaf921fso297904b3a.1; Wed, 14 Aug 2024 18:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685812; x=1724290612; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9A3SNQz6Q2O70xZMekgjWFxO65DMYvasXErryb0PeBU=; b=F39OtrwH1s09bl+YQx+gXkfAgUCtmbl5qxObEdNqiQVJVBY1h4y75xQTqKzQF7yOfV 0hpu2X1BTWrFYhv+dlY7pWp+PIIQdvRHyCu+LUnf0jnw+2d6TYh1KMwKnkvZZa1h17wX 05h8x6n+vFTKPTxPlgh3fyz/yZcaDJpuCR+ghK/92e8juealZF4huuCxXdKz4P9YyzFl E2QWXq9L3dJIjxXCxbBqI6qRZZeUaRrR0bNs55OtHH/dvSXtvByqleRTtVMKYeHIi0Os En5kprU6mi3SxhUIIerPrgNlCcJlXuLVDa8RqIDm0cRCi8Nl2fehCOM5vUP8jx81VUrF 18Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685812; x=1724290612; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9A3SNQz6Q2O70xZMekgjWFxO65DMYvasXErryb0PeBU=; b=qfc8+kjD/7y0F8Ah74V9g6olqH32e40ldAfEy1yHhunD9zCEX69B0ze1Nki5aMSnv6 wP+WWCndZ3CLy/OqJRwcp6qSY+w4DHpjgZiR8M7f4dY8jlEYco/PK+1gExo7FwQe1ism jHuuwnk3cBMxIdISyxMYbjMevXNEdIiGMFtxDwBr994OWe6+1vNgLSVT4mlNiw5I44ha mX0cwx9N90HwXM5RIXQ7/jybyeZuIHfvJRNh9WDCntvD445P/XF2iUzRj8D9uNGtpmO+ dZoJmRzjUHJhiHx2VF8z7yh53vijYPMsU0/dSXt0HVPA4vgeUHUGViCtiFg+Fd7HwYro +7hg== X-Forwarded-Encrypted: i=1; AJvYcCWypMjRGBxgviQ26qwTbB05h7gItNHcIaIwVvQzSvaCKJZUo7C9xjZwop0dKe2yzTD8fTOpPNmn6rz7+lH9sQSwkmX2T+ZC9Tkl456H7o3h8V/LyXArWjVSP5HIIXSZta3HNVNTEGsRGjxDkJKVwQ== X-Gm-Message-State: AOJu0YxoBmrKv/tnu1o7pEQ5T58MkUY96vsaXmD6ohRggRvZCA1WVvkO LTr6w/GMMkLnda3cW57zkeH7VF8onsnM7gLp7ABq450Y1rxJK5XA X-Google-Smtp-Source: AGHT+IGcpZpxht0aKk1jUzDHexhoN2F8wWo5Apyq7lg/ENnWyXkfqiRQVEpvmtOuI6NzOM39UsALHw== X-Received: by 2002:a05:6a00:138a:b0:708:41c4:8849 with SMTP id d2e1a72fcca58-71276f51c73mr2003989b3a.9.1723685812484; Wed, 14 Aug 2024 18:36:52 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:52 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 04/10] perf trace: Add some string arguments' name in syscall_arg_fmt__init_array() Date: Thu, 15 Aug 2024 09:36:20 +0800 Message-ID: <20240815013626.935097-5-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add them so that we can augment more strings (which is a file path) Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index e7e8c89d9538..84c7398312d8 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -1918,7 +1918,13 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *= arg, struct tep_format_field =20 if (strcmp(field->type, "const char *") =3D=3D 0 && ((len >=3D 4 && strcmp(field->name + len - 4, "name") =3D=3D 0) || - strstr(field->name, "path") !=3D NULL)) + strstr(field->name, "path") || + strstr(field->name, "file") || + strstr(field->name, "root") || + strstr(field->name, "key") || + strstr(field->name, "special") || + strstr(field->name, "type") || + strstr(field->name, "description"))) arg->scnprintf =3D SCA_FILENAME; else if ((field->flags & TEP_FIELD_IS_POINTER) || strstr(field->name, "a= ddr")) arg->scnprintf =3D SCA_PTR; --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) (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 5756038DE5; Thu, 15 Aug 2024 01:36:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685818; cv=none; b=ViLLbM0VR+sfacenHagVBFBX+Xr+SQxVVWsHVUgEBijw6TZXE7Nkq6fTbRLL/WcYbboIEtVIzBofRJ4Is+ndweIByV5GarVRZovWAcSaS1UyjOgvGKoZf0RWRNIa6Cl1ifVUihrrbG5NkzKTUtUdldai5s7U9HAy1O7QxK9MDeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685818; c=relaxed/simple; bh=t9UhZ6X/AY+Tn/50iuq2vVY9/iUqohzuRrnunr+kFvQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TYpXJubZeX5wv73ObWWM/ZcqKka72urjKDLPe974GRlL3kSvHCXZSYXM5PrHgUbtRbLNF1l+jKS4lTx2hJ0QoLW4cAvkQIkcM7LVM+YkTzYpqm/VBEJOaxGTrT8v7lLjpPeOx5Nzn0hhXEtSJriF+37vwGiYmOCiQI4kCim0i/8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fWMF/jx0; arc=none smtp.client-ip=209.85.167.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fWMF/jx0" Received: by mail-oi1-f170.google.com with SMTP id 5614622812f47-3dd16257b7bso181874b6e.1; Wed, 14 Aug 2024 18:36:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685816; x=1724290616; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PpLNXKrjrHLHX+d5UGlOuRxjnFIniqE1exAgXOvBtt4=; b=fWMF/jx0km0HxYtVVtlEz3OuPkFzcflSKEEXlWiDQ+wxSyBaLe5heTMLowlMbvYUhj Ywb5eDdwnuF9W3SN2kX65x5O7w0IBjSCBMLi/DEtPDUaNO8bD6hVh9mTT3F5h9lbi9rK 2b+aTXz0zxiY4cJKuT00lSB5kDnjlhkmoKUvIzgAk9aAGylWZ1PJLGfV7V+QGCTYXy1R z4pe3H0UY6rIVnerEXCxYBtnQzUSXBjlBKPu+JIOmDYm4nRNogn03F8W4K/Utd6EUTjx VBIXFjzguhs95r1+QW8TXVQx3VC+Bc9H9rTLKZ3PNdlV0sT+QuVPycKL3HZ9NU8TlmNd Ydog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685816; x=1724290616; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PpLNXKrjrHLHX+d5UGlOuRxjnFIniqE1exAgXOvBtt4=; b=Ah4YjHoLl16g5GUawBkBYeq1T1eyFhLfLgUN9TPiXHjVlXUuONK3AzIbKJVS1IFgP1 10QCbJ4cdF42J0bM07BRLdXn/aCDIAgImdFWZuHKAteTLXCjU9JeKrJN69Am5KsVSAFW LtezAxAz0J1MQeAtNOPW+Aiu7OyQegOX2gPbTZ7zHNrxgkP5olliLiAQ48Kec2rJYpxt /H7z3+WMfMRqxGfTMXaZeCjSbYi3NM9nE8pcIQk++eidl01ww4kYQs0HuTDpq7i8EUMA //BaI996IoukrXpn7IkHpkwzYPcrSyhzf4utzWQn6bg/wniDh+i6W5Oc7MO7qe+RpDEg 0UwQ== X-Forwarded-Encrypted: i=1; AJvYcCUB73Hc0WUZVJNMVkpGi1d1sqiYlcSQcbpXgNOyGeJkLz91V22UpA7IJoI3H8xt4n8lq7l8B4dxn0iP70fNMB79KbTgB4cfXQbKt72dtmTvqBj/2xBXCzQ1JS6Ll6s9TEDQY+IZLqD2Y77U0CCX8g== X-Gm-Message-State: AOJu0Yw3EGxBqpVuMlRNQ1KkcymgF6rZb2MW+sEAChipQ7duTu6oAdpj IGP8bwWd9pr0f1QmRcBQGS9Tp3hJt0yJ40aDjmERbUks/Vo37jaR X-Google-Smtp-Source: AGHT+IFNM70IsuWw7eVkgcXf9GjQh3p5QegRiBJM+A+o+zKFgmUnOGviA50u478xuqFTb6WLU3RO4Q== X-Received: by 2002:a05:6808:3994:b0:3da:b35d:52e0 with SMTP id 5614622812f47-3dd299922bdmr6165376b6e.43.1723685816340; Wed, 14 Aug 2024 18:36:56 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:56 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 05/10] perf trace: Add a new argument to trace__btf_scnprintf() Date: Thu, 15 Aug 2024 09:36:21 +0800 Message-ID: <20240815013626.935097-6-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Pass the struct syscall_arg, so that we can use the augmented_arg later in the struct augmentation. Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 84c7398312d8..4bde40f91531 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -1007,7 +1007,7 @@ static size_t btf_enum_scnprintf(const struct btf_typ= e *type, struct btf *btf, c } =20 static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= _fmt *arg_fmt, char *bf, - size_t size, int val, char *type) + size_t size, int val, struct syscall_arg *arg, char *type) { if (trace->btf =3D=3D NULL) return 0; @@ -1030,7 +1030,7 @@ static size_t trace__btf_scnprintf(struct trace *trac= e, struct syscall_arg_fmt * #else // HAVE_LIBBPF_SUPPORT static size_t trace__btf_scnprintf(struct trace *trace __maybe_unused, str= uct syscall_arg_fmt *arg_fmt __maybe_unused, char *bf __maybe_unused, size_t size __maybe_unused, int val __mayb= e_unused, - char *type __maybe_unused) + struct syscall_arg *arg __maybe_unused, char *type __maybe_unused) { return 0; } @@ -2284,7 +2284,7 @@ static size_t syscall__scnprintf_args(struct syscall = *sc, char *bf, size_t size, printed +=3D scnprintf(bf + printed, size - printed, "%s: ", field->na= me); =20 btf_printed =3D trace__btf_scnprintf(trace, &sc->arg_fmt[arg.idx], bf += printed, - size - printed, val, field->type); + size - printed, val, &arg, field->type); if (btf_printed) { printed +=3D btf_printed; continue; @@ -2986,7 +2986,7 @@ static size_t trace__fprintf_tp_fields(struct trace *= trace, struct evsel *evsel, if (trace->show_arg_names) printed +=3D scnprintf(bf + printed, size - printed, "%s: ", field->nam= e); =20 - btf_printed =3D trace__btf_scnprintf(trace, arg, bf + printed, size - pr= inted, val, field->type); + btf_printed =3D trace__btf_scnprintf(trace, arg, bf + printed, size - pr= inted, val, NULL, field->type); if (btf_printed) { printed +=3D btf_printed; continue; --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) (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 222D33A1CD; Thu, 15 Aug 2024 01:37:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685822; cv=none; b=e0IhZ/ez3PiLUt7KjejSNnhaG3pSvzSkJF0EzFvK2u8hn1nPUtpGAiLH41R9VzYT0hLMvWAKuVHVk+TgQStbPFqVxHBpn/kgRwAAYDB30zJvwtRONCNk24vnCXT5/rj1VZJDHeWZmnb3BHuOzZ/GVDvHLYrFdPFrodoAIs2D++4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685822; c=relaxed/simple; bh=spdqRIpnQvBqr8T0nyAuAU0TLakdE/R7ILit/w+FSb0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kKBqb3sf4ceZir8hyhxnd1WdxhgPaf9oYb3WTdPNtOjcvjp32dEQ4m2Npg68FnW7EZLuVWt2h7UWF6VRSiwqV4McP8fKquIB9P2+qbGcqaEEB0KUudOqA9aAdSVPFqSAwmo1luWU1o0b7IA2s+Wgi945sAfFYuwWGszS5LjEflc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UWXNV3QR; arc=none smtp.client-ip=209.85.167.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UWXNV3QR" Received: by mail-oi1-f170.google.com with SMTP id 5614622812f47-3db16a98d16so270651b6e.0; Wed, 14 Aug 2024 18:37:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685820; x=1724290620; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yhld+BZizC8iaT2hIGG5ij4d1wS1wRfTndkD3JiwI/U=; b=UWXNV3QRwm8xrJ2FXWkL6hJx1uYdvW044gXNeuUuJ0l7YLOEBegGUNSVCyXJ0ajqnI Cem7LvrGI3t9zoks5ZWGvP/93yVqdJ33ZwDEQUFsBQaIw0WqoHQzTXIkUH8T/uT/vFmr 161ZPH4gBJukwNSU4Jhe8xHw/IaIKR5LNESc92MJsuYr7EJmncg8fr2Qdpn9GfNpelfA jHDczumAQZ2NkOXYZD+JxWHL2bg1anfsvzPECXHt83Mru1Qz67dl0TG10LQ7q7AiU9QJ qzQ2OTp4RypdtsDfRcXT2sZe4mgoQDs5K0aWtIunKDYpd5IOSX2ohk6yW3Jv4wDVt1dO 2RFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685820; x=1724290620; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yhld+BZizC8iaT2hIGG5ij4d1wS1wRfTndkD3JiwI/U=; b=tBDCxFsLRAK0S9xCsdkINfJV2+eURqbHwajnCPMsRgsoY1MksNZYPdEHPgONbwToUc e2ks1Rfwf4YDgQyZC2g29wAnWCeEZCR1YndU8z1U5ROrnLqnxvYxkuX2hbV2t1rpBa0O hnLwMh1TUC1X8T2sKCo+ZDNWCLV0sNFqUItATUaLfAVjniQeAH4Ey25roFUqnGJt+qQc 59DPcN3SHJMfCtN9uRkSCOPbItifrJaq3tmlXcBtDrSv441F/5B2fVXCgNwiPfw14+Po saBtPSAuXn9FM6RWdzgdM3eEcxjuwaUElmc7kpaCVy7750AmYUa+Lu+M1lPXDUezr/DZ qtNA== X-Forwarded-Encrypted: i=1; AJvYcCXen/iI1qJa0scHklHqjfX1nLXWko6OjfCqtqbM9r/GkkF+HHvYNcLYj6JbH4tF0CIMpKr1/XsgQHzLrAv2uHS2K1qxjlQZ5EI0onA4STdn/+KsWlpE2vtbBSLHJymE9CXt1uLrSvqcA7KaHCRVMw== X-Gm-Message-State: AOJu0YwQK1IuXU7AcoaBIWrIDcDmkpWewm3wgCUo3wEscQMSmT3D4BTP YPK609Nw/6TWjVo5gsh5DU1liuZaUqHVyMEodHk9IeZ2dOVsUMLQ X-Google-Smtp-Source: AGHT+IEwMGq9EUkK5CrfBgpPAYU8se8hsLGns+yy5RhuGitVONPoXvgHMMMhf35YHS8RT+kPwizvXQ== X-Received: by 2002:a05:6808:3845:b0:3dd:34d3:7108 with SMTP id 5614622812f47-3dd34d38344mr247931b6e.1.1723685820122; Wed, 14 Aug 2024 18:37:00 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.36.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:36:59 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 06/10] perf trace: Pretty print struct data Date: Thu, 15 Aug 2024 09:36:22 +0800 Message-ID: <20240815013626.935097-7-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use btf_dump API to pretty print augmented struct pointer. set compact =3D true and skip_names =3D true, so that no newline character and argument name are printed. Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 4bde40f91531..e7421128f589 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -1006,6 +1006,55 @@ static size_t btf_enum_scnprintf(const struct btf_ty= pe *type, struct btf *btf, c return 0; } =20 +#define DUMPSIZ 1024 + +static void btf_dump_snprintf(void *ctx, const char *fmt, va_list args) +{ + char *str =3D ctx, new[DUMPSIZ]; + + vscnprintf(new, DUMPSIZ, fmt, args); + + if (strlen(str) + strlen(new) < DUMPSIZ) + strncat(str, new, DUMPSIZ - strlen(str) - 1); +} + +static size_t btf_struct_scnprintf(const struct btf_type *type, struct btf= *btf, char *bf, size_t size, struct syscall_arg *arg, int type_id) +{ + char str[DUMPSIZ]; + int dump_size; + int consumed; + struct btf_dump *btf_dump; + struct augmented_arg *augmented_arg =3D arg->augmented.args; + + LIBBPF_OPTS(btf_dump_opts, dump_opts); + LIBBPF_OPTS(btf_dump_type_data_opts, dump_data_opts); + + if (arg =3D=3D NULL || arg->augmented.args =3D=3D NULL) + return 0; + + memset(str, 0, sizeof(str)); + + dump_data_opts.compact =3D true; + dump_data_opts.skip_names =3D true; + + btf_dump =3D btf_dump__new(btf, btf_dump_snprintf, str, &dump_opts); + if (btf_dump =3D=3D NULL) + return 0; + + /* pretty print the struct data here */ + dump_size =3D btf_dump__dump_type_data(btf_dump, type_id, arg->augmented.= args->value, type->size, &dump_data_opts); + if (dump_size =3D=3D 0) + return 0; + + consumed =3D sizeof(*augmented_arg) + augmented_arg->size; + arg->augmented.args =3D ((void *)arg->augmented.args) + consumed; + arg->augmented.size -=3D consumed; + + btf_dump__free(btf_dump); + + return scnprintf(bf, size, "%s", str); +} + static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= _fmt *arg_fmt, char *bf, size_t size, int val, struct syscall_arg *arg, char *type) { @@ -1023,6 +1072,8 @@ static size_t trace__btf_scnprintf(struct trace *trac= e, struct syscall_arg_fmt * =20 if (btf_is_enum(arg_fmt->type)) return btf_enum_scnprintf(arg_fmt->type, trace->btf, bf, size, val); + else if (btf_is_struct(arg_fmt->type)) + return btf_struct_scnprintf(arg_fmt->type, trace->btf, bf, size, arg, ar= g_fmt->type_id); =20 return 0; } --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) (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 E51B33BBF5; Thu, 15 Aug 2024 01:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685826; cv=none; b=WXiTxvynC17P1/9h3eWh+TeYaMN3rDHnk+ucCXYeOEnC20aPjgFebdTLSYV30XHiFbR+sWly5HiaTUKHxzXbbqgVc0PofIzZDHQetYcOEN+ODi8E465QNqqXP1H9Jgu4nM60RYgGao7TQ0XZ0tL604VMqqGvO4bGR5UlfuTSxKw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685826; c=relaxed/simple; bh=joBJOIKuoTw1RwAeQ8EIoJ4+kmDQJfN5l9AudFa8yWk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=auCfBCCq+rPL8XJypqVX9tpj61HD1n+QDoLY88aFyXCqkoWjwU0TsAxObugxpg5jdJo15YTtVfoh5BtEhdbVp7Lu4CBNcS5pvaJE1l6oyNFs3p8fEe+p8N0HCtrWzobdF0fU/UpbVw6ZsS0ptbKnodA16Ccw5NcPf1pZNkSK4xw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=T8JTTtrf; arc=none smtp.client-ip=209.85.160.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T8JTTtrf" Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-2642cfb2f6aso360057fac.2; Wed, 14 Aug 2024 18:37:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685824; x=1724290624; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P+fqLnPSfwN0MZE2ewKoNtD6/c0sQaornbzo3Qw5EMY=; b=T8JTTtrfvi0r/0VKovSvACKskQ7KvNir822COwKnZA9zvVwIT3tHetACftnesWl4YT w+8vrJYmoQw/a3HCRMjOPxRaS96fL3nbmYuBW8Ij5bmrOaONpGHAqkLMMKbGrNWEjd6A wpJeMOzDGEDApY/BxeZOvlQ87ZMxpmZ/BsoZ7guqsVXrM3aIjA/nxWT9q6ojWS+9FT1g d7lAmRwILc937JcZ4ctkuqbgmK6dF+nhej8t6KeAOQcxl5K6Feka4UDX7i/vk59Z4xND NufMLTp4TgYSAbtVTlRABH3yEc28m1vpPiVXHoPKrJx/jDuLZR5gZnSRuixvrabbX+5l Z2KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685824; x=1724290624; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P+fqLnPSfwN0MZE2ewKoNtD6/c0sQaornbzo3Qw5EMY=; b=nPDB+HJZEWDKUOOPH6/iGVGZl1DKB3OWuUxFHYrL4bsBxLNQ0pCY9TX59db2ww+LNK EK5/kncHqFIIkpcy8qbi9qptrgsVYAripjZ1/vg/qwOA7A+kXZpGSH5pM5+IkrcOQtWB cFRmJfRFsC5j06okg7SyzDUR6sbxQg8qI6HSOI6D7vFDStZBBOMT1TAoEwAKscmYfhe3 N8qCREeeVCkfwqTU/v80Jrl31tJ+KniDPY/WJrrhikpw5hJwxv0me3TvEwVqGs68VaS2 BTES+iKFahv5oVi8tfUxwROMWKBLed+f1HV1ByfeBqhMJkIhGfPT6U6fJ8lCCrLN9GjG fCYA== X-Forwarded-Encrypted: i=1; AJvYcCVsfydILYe7z0bgYWw67N2W28r1OGafyMInr88CM3fVO+nLOXLSP5QAb12smsmOrEjbsgzAbyEvucbYY8aWv/T7GB4eipAdl+rXWZIdaIWNnnF4HKtOkpRqk0xpnRv0nLjaPiqhCee66YGz7k5cLA== X-Gm-Message-State: AOJu0YxDkzmUiseVgAzefuT1BVaAb9293tcGLe9S0PPKZJqyefCTFH1T 24YzIbiJQvUx390P+oaYOh2j3yDfhVze8c8W4ipMjNwdza07tXyMZz6QazxBe3g= X-Google-Smtp-Source: AGHT+IG0Nx6iuVN9IO/WFNOGEpeY0kTmF6qrtcLD66QMpds7EU22JI8fRxeth+VIFrMQRnUWVdfeCA== X-Received: by 2002:a05:6870:b4a3:b0:261:537:8d8 with SMTP id 586e51a60fabf-26fe5c2f2edmr5349026fac.49.1723685823963; Wed, 14 Aug 2024 18:37:03 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.37.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:37:03 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 07/10] perf trace: Pretty print buffer data Date: Thu, 15 Aug 2024 09:36:23 +0800 Message-ID: <20240815013626.935097-8-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Define TRACE_AUG_MAX_BUF in trace_augment.h data, which is the maximum buffer size we can augment. BPF will include this header too. Print buffer in a way that's different than just printing a string, we print all the control characters in \digits (such as \0 for null, and \10 for newline, LF). For character that has a bigger value than 127, we print the digits instead of the character itself as well. Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 48 +++++++++++++++++++++++++++++++++ tools/perf/util/trace_augment.h | 6 +++++ 2 files changed, 54 insertions(+) create mode 100644 tools/perf/util/trace_augment.h diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index e7421128f589..593b0b8724d0 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -65,6 +65,7 @@ #include "syscalltbl.h" #include "rb_resort.h" #include "../perf.h" +#include "trace_augment.h" =20 #include #include @@ -852,6 +853,10 @@ static size_t syscall_arg__scnprintf_filename(char *bf= , size_t size, =20 #define SCA_FILENAME syscall_arg__scnprintf_filename =20 +static size_t syscall_arg__scnprintf_buf(char *bf, size_t size, struct sys= call_arg *arg); + +#define SCA_BUF syscall_arg__scnprintf_buf + static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size, struct syscall_arg *arg) { @@ -1760,6 +1765,47 @@ static size_t syscall_arg__scnprintf_filename(char *= bf, size_t size, return 0; } =20 +#define MAX_CONTROL_CHAR 31 +#define MAX_ASCII 127 + +static size_t syscall_arg__scnprintf_buf(char *bf, size_t size, struct sys= call_arg *arg) +{ + char result[TRACE_AUG_MAX_BUF * 4], tens[4]; + struct augmented_arg *augmented_arg =3D arg->augmented.args; + unsigned char *orig; + int i =3D 0, n, consumed, digits; + + if (augmented_arg =3D=3D NULL) + return 0; + + orig =3D (unsigned char *)augmented_arg->value; + n =3D augmented_arg->size; + + memset(result, 0, sizeof(result)); + + for (int j =3D 0; j < n && i < (int)sizeof(result) - 1; ++j) { + /* print control characters (0~31 and 127), and non-ascii characters in = \(digits) */ + if (orig[j] <=3D MAX_CONTROL_CHAR || orig[j] >=3D MAX_ASCII) { + result[i++] =3D '\\'; + + /* convert to digits */ + digits =3D scnprintf(tens, sizeof(result) - i, "%d", (int)orig[j]); + if (digits + i <=3D (int)sizeof(result) - 1) { + strncpy(result + i, tens, digits); + i +=3D digits; + } + } else { + result[i++] =3D orig[j]; + } + } + + consumed =3D sizeof(*augmented_arg) + augmented_arg->size; + arg->augmented.args =3D ((void *)arg->augmented.args) + consumed; + arg->augmented.size -=3D consumed; + + return scnprintf(bf, size, "\"%s\"", result); +} + static bool trace__filter_duration(struct trace *trace, double t) { return t < (trace->duration_filter * NSEC_PER_MSEC); @@ -1977,6 +2023,8 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *a= rg, struct tep_format_field strstr(field->name, "type") || strstr(field->name, "description"))) arg->scnprintf =3D SCA_FILENAME; + else if (strstr(field->type, "char *") && strstr(field->name, "buf")) + arg->scnprintf =3D SCA_BUF; else if ((field->flags & TEP_FIELD_IS_POINTER) || strstr(field->name, "a= ddr")) arg->scnprintf =3D SCA_PTR; else if (strcmp(field->type, "pid_t") =3D=3D 0) diff --git a/tools/perf/util/trace_augment.h b/tools/perf/util/trace_augmen= t.h new file mode 100644 index 000000000000..57a3e5045937 --- /dev/null +++ b/tools/perf/util/trace_augment.h @@ -0,0 +1,6 @@ +#ifndef TRACE_AUGMENT_H +#define TRACE_AUGMENT_H + +#define TRACE_AUG_MAX_BUF 32 /* for buffer augmentation in perf trace */ + +#endif --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 BD2ED41C85; Thu, 15 Aug 2024 01:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685830; cv=none; b=m7z2VF9EuzHbWoBF0LJRgnlW8fbo6U1w3rgAxxTeaujj2u+5dyjy26qDcmGSxkxyUYfW1e/EeJiCB91Z2oP5pYPfX9FhJroUNAPY/Ly3FLPwNqS0iZc3MO/Z5uJBJtSYGpwU6CkUaDVq5CsNJLtqT37OjfEszOyUswMIz9z+11I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685830; c=relaxed/simple; bh=dXAx1IOj5EFw26EiR6phyEx2pV+x6J1qogFrwbESj0Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nf92k+bdXEsDMbxRKIaIVJs9npWVBmcV8lmI4OvqMvOSt+0h4rpO3f1aFuGHedGV9Q+bN2qn9q1UgfaosMONTpllMnEcz2/ZJuRL8c7JS0n6wZpeShz5gSW/J/jOncYhHx/ZKYWWQc5x/DxKrle4h/ffp9N7r82Qj7u8gbTUyGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HBkXQL8y; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HBkXQL8y" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-710d1de6ee5so398974b3a.0; Wed, 14 Aug 2024 18:37:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685828; x=1724290628; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KMyjLjgcp28DS5DbcvmQBHlVC/BS4wgpfivdvBamMwU=; b=HBkXQL8ybK09W9GosFr5fujuLAAGjjisuEhltUSm0dHs5zhPmDJgvy4OyBMUPXfhVX eefaNVpm9u2SKcxTcdqu8Ccng5SonQtOAsnQPnmI5hhxvH3ZncixZC1+485qU4bvJXuv Ncksd8BR1bt6iIixBkC4l5HRz5gUIGo88t/zMmXaHTGuZQXgaWtBktW+lfrtzR8YhPR4 MPCpXcsJALgouu/2Xd0cBwJSneqV6Kzr/uqsNXKbIpZZHWuxKoJNN4wskZc57edu0Ka8 bg3oy2ZjGJQuOgwuP1aiX5Sb1I/CJTuTEnfIMq+bR3KxULIP1Mlu2IytQPs/E5Hv2+2m o1fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685828; x=1724290628; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KMyjLjgcp28DS5DbcvmQBHlVC/BS4wgpfivdvBamMwU=; b=iF1NAZyMEqH3h9G4+oAbf4z9aSk026LuKcjQESQnzRaQ3i8fuiTQdgLwRnsSu++AQZ U/V1lk6uFRuSXxb7S2HkNkm9ZupdGYVcskc/nKtzgsjtjc4hPZrh5YLSCxKEPkSJiyV2 RoA8vIcpN5Fejy+HzohIJTLtCJe/a/2Qi+NdDK3QHJG8IPJq0FIcPmv1oO8DRl9xulyL Sz5PZy1uU6PBO3CPw65k7W0MRSuHsEINTAgVg9cJad1v9KVJG4ZMm/rNNZ0BxLuUbTR7 Rh9VXW5ef/djedGBht7jJbMIhlA0zstc9KScHVWvM5+hwsHmDyYl4NQij1cFXVt/tt6h dV6w== X-Forwarded-Encrypted: i=1; AJvYcCUtcqojqCKGttfjzMY+NyWT2Mgh+hMXRIInCWQdmKP5GaZjgLwbi/PZmnFb+8+1USZCFgK3f13ADji3T9m8dA29I7mvk5Avh4y5Y9kcqZ18RCRejkxlHvjd/weTLRGi2tYpIi5/4Py6RouvB36H9Q== X-Gm-Message-State: AOJu0YzT7jKTx2drPomrTRS8KWYA7+801VW9SkMa0KhfmZ6xynoNAhIB 9P1ViD7bZlZeMWAR/XDa99Ife454dUkj3VttafPlgHAgNGFh4zmg X-Google-Smtp-Source: AGHT+IFB9mXnEs8+/EZwTUhpDOjqZH2on30/R5i1w/qIhSwvoG6SizfiZEdOIdZ3wD2D/6v6uP99eA== X-Received: by 2002:a05:6a21:150b:b0:1c2:8d91:634 with SMTP id adf61e73a8af0-1c8eaf8b4f5mr6159760637.45.1723685827885; Wed, 14 Aug 2024 18:37:07 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.37.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:37:07 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 08/10] perf trace: Add pids_allowed and rename pids_filtered Date: Thu, 15 Aug 2024 09:36:24 +0800 Message-ID: <20240815013626.935097-9-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add pids_allowed so that we only trace these pids. Rename pids_filtered to pids_filtered_out to prevent confusion. (pids_filtered_out is for reducing the observer effect) We write -p argument as well as workload pid to pids_allowed to leave only the pids that we are interested in. Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 49 ++++++++++++++++++- .../bpf_skel/augmented_raw_syscalls.bpf.c | 39 ++++++++++++--- 2 files changed, 80 insertions(+), 8 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 593b0b8724d0..e7574146165e 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -3922,6 +3922,45 @@ static int trace__init_syscalls_bpf_prog_array_maps(= struct trace *trace) =20 return err; } + +static int trace__set_allowed_pids(struct trace *trace) +{ + int err, pids_allowed_fd =3D bpf_map__fd(trace->skel->maps.pids_allowed); + bool exists =3D true; + struct str_node *pos; + struct strlist *pids_slist =3D strlist__new(trace->opts.target.pid, NULL); + + trace->skel->bss->task_specific =3D false; + + if (pids_slist) { + strlist__for_each_entry(pos, pids_slist) { + char *end_ptr; + int pid =3D strtol(pos->s, &end_ptr, 10); + + if (pid =3D=3D INT_MIN || pid =3D=3D INT_MAX || + (*end_ptr !=3D '\0' && *end_ptr !=3D ',')) + continue; + + err =3D bpf_map_update_elem(pids_allowed_fd, &pid, &exists, BPF_ANY); + if (err) + return err; + + trace->skel->bss->task_specific =3D true; + } + } + + if (workload_pid !=3D -1) { + err =3D bpf_map_update_elem(pids_allowed_fd, &workload_pid, &exists, BPF= _ANY); + if (err) + return err; + + trace->skel->bss->task_specific =3D true; + } + + strlist__delete(pids_slist); + return 0; +} + #endif // HAVE_BPF_SKEL =20 static int trace__set_ev_qualifier_filter(struct trace *trace) @@ -3980,7 +4019,7 @@ static int trace__set_filter_loop_pids(struct trace *= trace) return err; } =20 -static int trace__set_filter_pids(struct trace *trace) +static int trace__set_filtered_out_pids(struct trace *trace) { int err =3D 0; /* @@ -4309,13 +4348,19 @@ static int trace__run(struct trace *trace, int argc= , const char **argv) } } #endif - err =3D trace__set_filter_pids(trace); + err =3D trace__set_filtered_out_pids(trace); if (err < 0) goto out_error_mem; =20 #ifdef HAVE_BPF_SKEL if (trace->skel && trace->skel->progs.sys_enter) trace__init_syscalls_bpf_prog_array_maps(trace); + + if (trace->skel) { + err =3D trace__set_allowed_pids(trace); + if (err) + goto out_error_mem; + } #endif =20 if (trace->ev_qualifier_ids.nr > 0) { diff --git a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c b/tools/= perf/util/bpf_skel/augmented_raw_syscalls.bpf.c index 0acbd74e8c76..c7b9f80239c7 100644 --- a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c +++ b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c @@ -22,6 +22,8 @@ =20 #define MAX_CPUS 4096 =20 +volatile bool task_specific; + /* bpf-output associated map */ struct __augmented_syscalls__ { __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); @@ -72,12 +74,21 @@ struct augmented_arg { char value[PATH_MAX]; }; =20 -struct pids_filtered { +/* Do not trace these PIDs to prevent the observer effect */ +struct pids_filtered_out { __uint(type, BPF_MAP_TYPE_HASH); __type(key, pid_t); __type(value, bool); __uint(max_entries, 64); -} pids_filtered SEC(".maps"); +} pids_filtered_out SEC(".maps"); + +/* Only trace these PIDs, disregard the rest */ +struct pids_allowed { + __uint(type, BPF_MAP_TYPE_HASH); + __type(key, pid_t); + __type(value, bool); + __uint(max_entries, 512); +} pids_allowed SEC(".maps"); =20 /* * Desired design of maximum size and alignment (see RFC2553) @@ -367,18 +378,34 @@ static pid_t getpid(void) return bpf_get_current_pid_tgid(); } =20 -static bool pid_filter__has(struct pids_filtered *pids, pid_t pid) +static inline bool pid_filtered_out__has(struct pids_filtered_out *pids, p= id_t pid) { return bpf_map_lookup_elem(pids, &pid) !=3D NULL; } =20 +static inline bool pid_allowed__has(struct pids_allowed *pids, pid_t pid) +{ + return bpf_map_lookup_elem(pids, &pid) !=3D NULL; +} + +static inline bool task_can_trace(void) +{ + if (pid_filtered_out__has(&pids_filtered_out, getpid())) + return false; + + if (task_specific && !pid_allowed__has(&pids_allowed, getpid())) + return false; + + return true; +} + SEC("tp/raw_syscalls/sys_enter") int sys_enter(struct syscall_enter_args *args) { struct augmented_args_payload *augmented_args; /* * We start len, the amount of data that will be in the perf ring - * buffer, if this is not filtered out by one of pid_filter__has(), + * buffer, if this is not filtered out by one of pid_filtered_out__has(), * syscall->enabled, etc, with the non-augmented raw syscall payload, * i.e. sizeof(augmented_args->args). * @@ -386,7 +413,7 @@ int sys_enter(struct syscall_enter_args *args) * initial, non-augmented raw_syscalls:sys_enter payload. */ =20 - if (pid_filter__has(&pids_filtered, getpid())) + if (!task_can_trace()) return 0; =20 augmented_args =3D augmented_args_payload(); @@ -411,7 +438,7 @@ int sys_exit(struct syscall_exit_args *args) { struct syscall_exit_args exit_args; =20 - if (pid_filter__has(&pids_filtered, getpid())) + if (!task_can_trace()) return 0; =20 bpf_probe_read_kernel(&exit_args, sizeof(exit_args), args); --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (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 A8DED43ABD; Thu, 15 Aug 2024 01:37:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685834; cv=none; b=RS6d0yDdbssRwxbXVE/ah/HqsMMQ3Tjk0BxLQz5Q03vbSBRlePenhR5XL6XwcSXJ/SyYaaY+rvNdWCU18XdkTQQRi7xV9rV3pfZxQBPxbwbwAWPYB8ydOMPOwTsjXfihGaymiYNUC1ar//3TiUmsN3Paa8wzagp4IQBXOQUFEnw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685834; c=relaxed/simple; bh=xxzhKCQXRaMbX2Fn/2LQ9SCl/677hbD30vUhW6gsF/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fm9rPg8VlJJQ7p3uU/9PrefOYceyzsRGNfecgZpgmpMRP9ptyt+2XTDoRmggrshRGbxm/ARdwojZB/Q5hzQZbtBTQFNBMVrSnMcSMkc29cmkOCe+lynFVr/GnEoxIuWyGR5gSDLxGzWtqRP5T3wOxnmgSJbPEsksAhF9osnTPts= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=a4IE2lAM; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="a4IE2lAM" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3db145c8010so276881b6e.3; Wed, 14 Aug 2024 18:37:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685832; x=1724290632; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ncTc6lP7++Cc+HdCfft7z5xIYc9fKy5pzTa2YoxTlfI=; b=a4IE2lAMjk81Jzuie9HhBbXwXKB36myXhdFUBiZHgDEeTbenhkvQiKg8R25xA4GPnP TUcaYoUnsqppRSkvlddbd92/jkpZAdn51S6gShhhTtWAmJTrOf/fXSUQ4cd3IYWPd7hA SFDT1qpOSAWduboXOwRh4+4fEkLiTAPbtLY5O9/59brjBb+IzPARaFdjvzmJ3AA5TAvP /F9AcOZlzGsUg2LbffUKgF1qI4z6pS7DUs4BzJaw4T5Z6KMSkM5SWlg6l2vqRnru2+GD A5TcAJvjhveK/eBUkAjGxnUO3BX0nNWzJV1PG3Td2qln04r3Gd7DhYIgrJgCcswHPeCV /RFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685832; x=1724290632; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ncTc6lP7++Cc+HdCfft7z5xIYc9fKy5pzTa2YoxTlfI=; b=qVv5lWD1tapoSn1BiVKqhNqbRLFI3qU6gQ9MyX9Pa1wiJ5fVi+x/HoPEUM7X26gw7/ 02UOjIKbjimr25kLWenT79nV6Y8dCviJ/9dejjeJN+NvXoxDnDenRm+PrO/tLd9L33bx Pz8Ctk3SkMSCjBUXpDEdnEqCmgxHrMBOteJccuXP0LqntYZkcUjQhG+3DxUtMtsmjl2L 32zeTyg06t1TxNxhPNaa3E8xjtROck7Ow+pjZ71PEduI0vFRSVfyHVgEEeB54GVkI+Oi ZcDa4+CfUdnFXn62McIfeZR48OPIYnaEMCpCJEvhc3OR+cTQgpRkZFWB2eSTvcgr79A9 KJkg== X-Forwarded-Encrypted: i=1; AJvYcCVQwdBDwx0fIdxSQi+WTUhgno+46Sjwde40F0vgiyC5pf1LepSanUi2PvOhpp2xhWIuzNIO/EoDcV1XlT0xt7Fe7u1PmyMfB9D2GCCm9GxDMIPPxAxEwJizHcoYiqgPcnGSRfIfYj9E3Uta5HUgRg== X-Gm-Message-State: AOJu0YyRzWTPeISUjtnPGpoMdOe3T+1a0X7lr1VeM7rQqXKiHccf/hkc HM0+HzigFJ7jGaw+EP3PE6SOFT2WBq8QUTgLb5bxyH45aI9Ajum4 X-Google-Smtp-Source: AGHT+IHHEA3KWK7ZOw21EV+fqQNDddcFqMeUxyBqceNCIUnQxWubCiUbYNCxCfK6FXWcowCjMlhVWg== X-Received: by 2002:a05:6870:96a5:b0:260:ee13:e665 with SMTP id 586e51a60fabf-26fe5bb9896mr5677248fac.37.1723685831713; Wed, 14 Aug 2024 18:37:11 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.37.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:37:11 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 09/10] perf trace: Collect augmented data using BPF Date: Thu, 15 Aug 2024 09:36:25 +0800 Message-ID: <20240815013626.935097-10-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Include trace_augment.h for TRACE_AUG_MAX_BUF, so that BPF reads TRACE_AUG_MAX_BUF bytes of buffer maximum. Determine what type of argument and how many bytes to read from user space,= us ing the value in the beauty_map. This is the relation of parameter type and its cor= res ponding value in the beauty map, and how many bytes we read eventually: string: 1 -> size of string (till null) struct: size of struct -> size of struct buffer: -1 * (index of paired len) -> value of paired len (maximum: TRACE_A= UG_ MAX_BUF) After reading from user space, we output the augmented data using bpf_perf_event_output(). If the struct augmenter, augment_sys_enter() failed, we fall back to using bpf_tail_call(). I have to make the payload 6 times the size of augmented_arg, to pass the BPF verifier. Signed-off-by: Howard Chu --- .../bpf_skel/augmented_raw_syscalls.bpf.c | 114 +++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c b/tools/= perf/util/bpf_skel/augmented_raw_syscalls.bpf.c index c7b9f80239c7..d665af449b1b 100644 --- a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c +++ b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c @@ -7,6 +7,8 @@ */ =20 #include "vmlinux.h" +#include "../trace_augment.h" + #include #include =20 @@ -135,6 +137,25 @@ struct augmented_args_tmp { __uint(max_entries, 1); } augmented_args_tmp SEC(".maps"); =20 +struct beauty_payload_enter { + struct syscall_enter_args args; + struct augmented_arg aug_args[6]; +}; + +struct beauty_map_enter { + __uint(type, BPF_MAP_TYPE_HASH); + __type(key, int); + __type(value, __u32[6]); + __uint(max_entries, 512); +} beauty_map_enter SEC(".maps"); + +struct beauty_payload_enter_map { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __type(key, int); + __type(value, struct beauty_payload_enter); + __uint(max_entries, 1); +} beauty_payload_enter_map SEC(".maps"); + static inline struct augmented_args_payload *augmented_args_payload(void) { int key =3D 0; @@ -147,6 +168,11 @@ static inline int augmented__output(void *ctx, struct = augmented_args_payload *ar return bpf_perf_event_output(ctx, &__augmented_syscalls__, BPF_F_CURRENT_= CPU, args, len); } =20 +static inline int augmented__beauty_output(void *ctx, void *data, int len) +{ + return bpf_perf_event_output(ctx, &__augmented_syscalls__, BPF_F_CURRENT_= CPU, data, len); +} + static inline unsigned int augmented_arg__read_str(struct augmented_arg *augmented_arg, = const void *arg, unsigned int arg_len) { @@ -399,6 +425,91 @@ static inline bool task_can_trace() return true; } =20 +static int augment_sys_enter(void *ctx, struct syscall_enter_args *args) +{ + bool augmented, do_output =3D false; + int zero =3D 0, size, aug_size, index, output =3D 0, + value_size =3D sizeof(struct augmented_arg) - offsetof(struct augment= ed_arg, value); + unsigned int nr, *beauty_map; + struct beauty_payload_enter *payload; + void *arg, *payload_offset; + + /* fall back to do predefined tail call */ + if (args =3D=3D NULL) + return 1; + + /* use syscall number to get beauty_map entry */ + nr =3D (__u32)args->syscall_nr; + beauty_map =3D bpf_map_lookup_elem(&beauty_map_enter, &nr); + + /* set up payload for output */ + payload =3D bpf_map_lookup_elem(&beauty_payload_enter_map, &zero); + payload_offset =3D (void *)&payload->aug_args; + + if (beauty_map =3D=3D NULL || payload =3D=3D NULL) + return 1; + + /* copy the sys_enter header, which has the syscall_nr */ + __builtin_memcpy(&payload->args, args, sizeof(struct syscall_enter_args)); + + /* + * Determine what type of argument and how many bytes to read from user s= pace, using the + * value in the beauty_map. This is the relation of parameter type and it= s corresponding + * value in the beauty map, and how many bytes we read eventually: + * + * string: 1 -> size of string + * struct: size of struct -> size of struct + * buffer: -1 * (index of paired len) -> value of paired len (maximum: TR= ACE_AUG_MAX_BUF) + */ + for (int i =3D 0; i < 6; i++) { + arg =3D (void *)args->args[i]; + augmented =3D false; + size =3D beauty_map[i]; + aug_size =3D size; /* size of the augmented data read from user space */ + + if (size =3D=3D 0 || arg =3D=3D NULL) + continue; + + if (size =3D=3D 1) { /* string */ + aug_size =3D bpf_probe_read_user_str(((struct augmented_arg *)payload_o= ffset)->value, value_size, arg); + /* minimum of 0 to pass the verifier */ + if (aug_size < 0) + aug_size =3D 0; + + augmented =3D true; + } else if (size > 0 && size <=3D value_size) { /* struct */ + if (!bpf_probe_read_user(((struct augmented_arg *)payload_offset)->valu= e, size, arg)) + augmented =3D true; + } else if (size < 0 && size >=3D -6) { /* buffer */ + index =3D -(size + 1); + aug_size =3D args->args[index]; + + if (aug_size > TRACE_AUG_MAX_BUF) + aug_size =3D TRACE_AUG_MAX_BUF; + + if (aug_size > 0) { + if (!bpf_probe_read_user(((struct augmented_arg *)payload_offset)->val= ue, aug_size, arg)) + augmented =3D true; + } + } + + /* write data to payload */ + if (augmented) { + int written =3D offsetof(struct augmented_arg, value) + aug_size; + + ((struct augmented_arg *)payload_offset)->size =3D aug_size; + output +=3D written; + payload_offset +=3D written; + do_output =3D true; + } + } + + if (!do_output) + return 1; + + return augmented__beauty_output(ctx, payload, sizeof(struct syscall_enter= _args) + output); +} + SEC("tp/raw_syscalls/sys_enter") int sys_enter(struct syscall_enter_args *args) { @@ -427,7 +538,8 @@ int sys_enter(struct syscall_enter_args *args) * "!raw_syscalls:unaugmented" that will just return 1 to return the * unaugmented tracepoint payload. */ - bpf_tail_call(args, &syscalls_sys_enter, augmented_args->args.syscall_nr); + if (augment_sys_enter(args, &augmented_args->args)) + bpf_tail_call(args, &syscalls_sys_enter, augmented_args->args.syscall_nr= ); =20 // If not found on the PROG_ARRAY syscalls map, then we're filtering it: return 0; --=20 2.45.2 From nobody Sun Feb 8 05:29:52 2026 Received: from mail-oi1-f174.google.com (mail-oi1-f174.google.com [209.85.167.174]) (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 7C12547A4C; Thu, 15 Aug 2024 01:37:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685838; cv=none; b=FRyRfNYrhxCZWWzUAgH/uVRD4Kfx/RdgDv2+CzQwmRXPNL+yscuhSES9UbKYv4fP+J7dl4AGLlB6ixNjD1iuFW5O4gW+MK5bQLBVZn/oNZljruo1mQyJvXqRt/F4H+K+lGdwVxhmBKqYIFl3TK2wjtA02Pv03MqJrBZqNSaSq0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1723685838; c=relaxed/simple; bh=FAra7IslueJ2M3LeoV4wY0d8qZzY2HkcWrqATM3x3RI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=riZ3F6KbyfhtI94CrQyMtA25WJn37qOzYehfCgRpuYSkpGw1o1OkrguTwZLZU77Qit9jQS3YS9FFZJ2a4vmI0QgDMRrjJqpgPpYJNlTMEJq1fmQU0VgOg2SxmAvqE2dUS6p6n+4A7om/Uf84IzjSOE5ktCG7MVlhv6ynPo8sCwQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A6Rvvufa; arc=none smtp.client-ip=209.85.167.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A6Rvvufa" Received: by mail-oi1-f174.google.com with SMTP id 5614622812f47-3db14cc9066so304838b6e.3; Wed, 14 Aug 2024 18:37:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723685835; x=1724290635; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dMGaOVIVwJJwP5Xk416IMkcEFAeT/3CwfvbFdC0BmwM=; b=A6RvvufaW/f4PZepkmsF4PYJH9UBInYC2obMOdsKgwd6mn/TRGX12AxSQHMiAHGqT7 nT4u4jXLpZUaCm4gh5n5iBLhplDsU/C9wiGgi+HaGnTEEL3SRgpGbB8mLlEe4Bc2O6N+ eyetqS/gLSv/UlODOAuYgvjdvScF16+KFg0Qww12ainr2xmAamMnw/HCPi7yWzcP0fl7 JnKsAL5WhBYcFwI6P9KgFYokgCZRrW9pXSzWoGrZ12FMnM2z9XtRVydeQv8fXqASsE26 FGMpM/mJ7a4z1THdEYEyL0+vncIUKPAfNpxuotn7FJeJSiIJZHnFt6mZZjugwg0ig9Yx 9OSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723685835; x=1724290635; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dMGaOVIVwJJwP5Xk416IMkcEFAeT/3CwfvbFdC0BmwM=; b=FHHj6CVlKkj1IprWf3epbGtzvvu5dwlz9FwaJgTJMgdrwvMHIj0y+9md9vO+jTQDGm UsOKyUZkreX07V+V/HHy7SddP1DgWJTLPAwSwOiQ1u1LgKafiIVQfXI4dGqZ3BeCFwqC bKA4svfK9iP6psCJtdKdwFnaScIq/O9vTBVxSv1ylE51O5aDQAuRdI/MrAK8CN1tCfxk o5pRg3+2g145PYvphMqwBY/CJtEyL8PZA7DMKvUW+MfkSsitjYSpXEDbLGCdUKRsWuiA bkBL6wZhfN90DiRAGfhPIuK0TE5uJ1RBSL0Zj1y6B8OLPJGjSx1Wi0t2tknCu9d/wZJm a6Qg== X-Forwarded-Encrypted: i=1; AJvYcCUqPmENO9HXCgW6DFTyRQve+/RhqkAcJZ+ARBYS3HZzfPctkdmI055gRnr/vkHuWwbHhVJxEP2WBhMWQea+QKHqa1CfffVQEigYcwwg787bj37nfCudPdSYhAeZGGdcc686CZAWR72vGqZtsseIhA== X-Gm-Message-State: AOJu0YyxqKMQo+NMtmGkeVzckiN10U3tItcZM0pXa64vsgEotkrQSgVJ 9CSyV3D0f+4kyOYxjAHyR4H9olNjiKzDnG1+xjqI+EYUG4olKWAZWCLrf876paA= X-Google-Smtp-Source: AGHT+IF3VFR6FbD1wRel2opwl5OqQ6FBZmTPd0eL8xF7JXvyUiVAaim/4wAUmzJ69PcagK8hNAu5BA== X-Received: by 2002:a05:6870:bac8:b0:268:a074:39cf with SMTP id 586e51a60fabf-26fe59dd845mr5141614fac.8.1723685835543; Wed, 14 Aug 2024 18:37:15 -0700 (PDT) Received: from localhost.localdomain ([120.229.49.183]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7127aef412bsm196842b3a.123.2024.08.14.18.37.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Aug 2024 18:37:15 -0700 (PDT) From: Howard Chu To: acme@kernel.org Cc: adrian.hunter@intel.com, irogers@google.com, jolsa@kernel.org, kan.liang@linux.intel.com, namhyung@kernel.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 10/10] perf trace: Add general tests for augmented syscalls Date: Thu, 15 Aug 2024 09:36:26 +0800 Message-ID: <20240815013626.935097-11-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240815013626.935097-1-howardchu95@gmail.com> References: <20240815013626.935097-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In this test, augmentation for: * string * buffer * struct Is tested. Please use this command to test it out: perf test "perf trace general tests" Signed-off-by: Howard Chu --- tools/perf/tests/shell/trace_btf_general.sh | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100755 tools/perf/tests/shell/trace_btf_general.sh diff --git a/tools/perf/tests/shell/trace_btf_general.sh b/tools/perf/tests= /shell/trace_btf_general.sh new file mode 100755 index 000000000000..9c5e9d321b42 --- /dev/null +++ b/tools/perf/tests/shell/trace_btf_general.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# perf trace general tests +# SPDX-License-Identifier: GPL-2.0 + +err=3D0 +set -e + +. "$(dirname $0)"/lib/probe.sh +skip_if_no_perf_trace || exit 2 + +file1=3D$(mktemp /tmp/file1_XXXXX) +file2=3D$(echo $file1 | sed 's/file1/file2/g') + +buffer=3D"this is a buffer for testing" + +trace_test_string() { + echo "Testing perf trace's string augmentation" + if ! perf trace -e renameat* --max-events=3D1 -- mv ${file1} ${file2} 2>= &1 | grep -q -E "renameat[2]*.*oldname: \"${file1}\".*newname: \"${file2}\"= .*" + then + echo "String augmentation failed" + err=3D1 + fi +} + +trace_test_buffer() { + echo "Testing perf trace's buffer augmentation" + if ! perf trace -e write --max-events=3D1 -- echo "${buffer}" 2>&1 | gre= p -q -E ".*write.*buf: \"${buffer}.*\".*" + then + echo "Buffer augmentation failed" + err=3D1 + fi +} + +trace_test_struct() { + echo "Testing perf trace's struct augmentation" + if ! perf trace -e clock_nanosleep --max-events=3D1 -- sleep 1 2>&1 | gr= ep -q -E ".*clock_nanosleep\(rqtp: \{1,\}, rmtp: \{1,\}\).* =3D 0" + then + echo "Struct augmentation failed" + err=3D1 + fi +} + +cleanup() { + rm -rf ${file2} +} + +trace_test_string + +if [ $err =3D 0 ]; then + trace_test_buffer +fi + +if [ $err =3D 0 ]; then + trace_test_struct +fi + +cleanup + +exit $err --=20 2.45.2