From nobody Fri Dec 19 16:21:31 2025 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.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 9D999E555; Sat, 24 Aug 2024 16:33:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517208; cv=none; b=ffD6997/SVlV7+yAuiyQeBVn4TDzdM8S02B4nHSC8N0E+0B4R8Dyp+G4PJewIHTdbaAUHQ6ZZpRGzvEgyVnU5ZHBvB1eSPG8N9tFv5vmJrRqwauZDFKUnrK1XaSquZdooHjQm3OmfVGoA0+ztqI2S9tzRxWzFmaL6zMWiivHz5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517208; c=relaxed/simple; bh=0XSPuBJyr7MI7i2ztzRbQfVkoE+7lpYJw/RBOzLBlCs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OIXoJ2BFsexN/MezUmbipsCFKEPoe/bS963a8T+Akfq48PuVMkpI5Kx69WdH2A3jZPcBe7wnY6yjBNcwso4bbxW8M3wXg+XKlZO1WUohqFHjpZO4SVHQ6mAmfdjfExlT9OQeAMKSUpE6k1w/XxWP085bl9g/S5GoVscbhHT49e4= 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=cT1tK8rr; arc=none smtp.client-ip=209.85.215.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="cT1tK8rr" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-7bcf8077742so2078384a12.0; Sat, 24 Aug 2024 09:33:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517206; x=1725122006; 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=C85KqAAAhN18wKRLjBvwUf/+LFGPqVcOgeiugyv8dVo=; b=cT1tK8rrG4ZeK8eGVkj2QOYgqTqPpAqOl3BGWIP07Sryp+id2JQUwVc1ugnK99bNFe ew9CeNQo6iERdQ4ma7wmwx0r+fm3LX/yVegGIzbHn0qVxRYoAy7siN//TUAnO2CphOUZ rtQc/Bbnb3QFJzDG8C1ZNfxLelchOmDOhrSGfR77K55VTE/lDe3icJ62riNmqPzrOBNT IBAWwbR82YFQ1EVJ+g2VLsf0ZuqW2luuhpGNIZnTWILeLVH2gawUjVXvJs3zDZ0IawVu SGDxZV6OrrUvXHik0M4bxhGr01JkLNhf1dqOyWHVlwffw3N49B2HRQ0KEFRC9mrBjTYu 7KCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517206; x=1725122006; 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=C85KqAAAhN18wKRLjBvwUf/+LFGPqVcOgeiugyv8dVo=; b=Ju8Qk7ctOqS4moH6cMVyjdnEyOvxvFrmKTow9eoud9kj++Bj4wpbeVBCX+sPjerMnF qDd35FMBJKZ2UA+vIloQbB+W35IUIfMFxZZ3lvJ2EPy/fiqBq32hXQP/bIXIizh10FRs v3jWFe5wjX9rBRDinZMs0UBqAbstrGWHh+zn1FyDbdIEHLzTWp/SOpDz2Wv2ZttXlNRG qDiuw7gj99MfAuav66DJJH28ID5CK7swodWOY/sqlWuUMvnd5cBNdHDzikkhe6GN1zpJ GGh/PcuHO3duSPri7hdnYjosq4fKGUYpUODLcqiU6q3masSy1xp34rg9u23i4QL7ydje hxiQ== X-Forwarded-Encrypted: i=1; AJvYcCUQzallG5qhyjM0r55qwzhgQSenvy7ansqe4dSv3B+pDmVFYoH+gB9FtjqWo6UdLeFIJYSaff6oGV6gbfo6hU4cJg==@vger.kernel.org, AJvYcCUULgaKT5NKj4kEtbu2Qf0IzJyRIc1usjzyZQh+gfy0dceIYCK4Kn0NAbLHzdIGOjoAClzyDdIN9kHHYIQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxm/x3kyFgdiSpws+zwfhbKyqicNjbPHUTWMzE+uwFnU/0+38Qn mVFHf2znjXP4lAeHrtsOxZXRLge6CcgAQohWaY101jXr/lgy6se7 X-Google-Smtp-Source: AGHT+IF9mdrAgIZYcoAltJEvEmFjhJxhqOkAPuFza4sAbQvkO/TxJ0n84w202A2CYS3sAwnTG5qrQA== X-Received: by 2002:a17:90a:f08a:b0:2d3:ce3d:84d9 with SMTP id 98e67ed59e1d1-2d646bcd396mr6230537a91.7.1724517205542; Sat, 24 Aug 2024 09:33:25 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:25 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 1/8] perf trace: Fix perf trace -p Date: Sun, 25 Aug 2024 00:33:15 +0800 Message-ID: <20240824163322.60796-2-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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 trace -e open -p 3792392 ? ( ): ... [continued]: open()) =3D -1 ENOENT (No such file o= r directory) ? ( ): ... [continued]: open()) =3D -1 ENOENT (No such file o= r directory) We can see there's no output. After: $ perf trace -e open -p 3792392 0.000 ( 0.123 ms): a.out/3792392 open(filename: "DINGZHEN", flags: WR= ONLY) =3D -1 ENOENT (No such file or directory) 1000.398 ( 0.116 ms): a.out/3792392 open(filename: "DINGZHEN", flags: WR= ONLY) =3D -1 ENOENT (No such file or directory) Reason: bpf_perf_event_output() will fail when you specify a pid in 'perf trace' (E= OPNOTSUPP). 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 (open.c): #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: make open perf trace: perf trace -e open Signed-off-by: Howard Chu Tested-by: Arnaldo Carvalho de Melo Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/r/20240815013626.935097-2-howardchu95@gmail.c= om Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index ef58a7764318..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); --=20 2.45.2 From nobody Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 731131EA80; Sat, 24 Aug 2024 16:33:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517209; cv=none; b=m3L+MDkhTmynSAgvHn+3VBDcjXStaXzE5ArqZEu/i6gY8B3wbZKY0W75g7/rv+rIx9B5AfO7yb2vtss92lHgGoQxDNElVxlE6LQy1ejB2R+OW4ThMUdUprfmjszxN4WJ+4eq8YKr8aUURtr8ItM29JcuggIvIyyEZJWdSaEodfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517209; c=relaxed/simple; bh=K1AcK+9B/Tb73ATtysp3FqULVVAazCOHSIcyqd7KzdA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jLoEv5HqxYWFZa5sti1ocO/t7p4DRaYp+rKmP7ekRy2etXyKUpwDJmzLYrsHGNOPX2sCdAwa/fqJIRI02jFtBBBRLifgN/HwfkfFAhtWi8gMkP7zqTLZLKffV5qRh5KqpmaZwrJqQoKDbShyoFGz5WpVgqK0a25H5FmWl+I+ukQ= 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=Hrg02yrd; arc=none smtp.client-ip=209.85.216.51 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="Hrg02yrd" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-2d439583573so2140603a91.3; Sat, 24 Aug 2024 09:33:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517207; x=1725122007; 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=6/7R6ApBvV0rZZ+MrCemqX674AF4jV7exYsBY/ANicw=; b=Hrg02yrdOZJTbHs17+S2u2rCeIoLHGWdwVFVALW+0XH78Ig6IzV2mXBLMPoM/YjnDd uHltg7jKGV0cYpvykvqPuqAhsDRpuBWTV8s/xNm6v3nQ2NB1bmdFUNTgFi9PhnecFVza 9ZFo7yhIhr8Vrpea2Xyqopzj9QyWAk/krJ8tlNbF4n3iAU3IVAL1ZRLrZwbeSkcGHQWL NywNdrRJHH+jit2VgSSy2IFhsIJ40vLeS5QzBEineWWv18XJW3AXlKwJ87IOA0LglsYm ALI3QbgrtugygqFE+/e4R2Trx6c6DqIX+cl7Eu8o/WWj6CSDBqdjBmKSIFYxfh+snY98 AZcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517207; x=1725122007; 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=6/7R6ApBvV0rZZ+MrCemqX674AF4jV7exYsBY/ANicw=; b=gvmklJrA7bkgyxSOqKvGQSFdPt6+8uaVvCEpqzXHgQHy4m8qTj55A1zLEhUkk4KFE2 j/ANcAN1wWTrQXxF+8J8V8W0gNyUhxGkDf1lY0f5IvB3jyySSt8sfYDKUAXn+vx3j10v AaPCnDJhxoDvDeUdrU79EqHGk0DUJPvtss2ZYBonnEFGVuIrPMT3oa1hT1NVeLsArl5V lcoWLYcHHLuuQM8bRQka1E4X6eR9y4gewjcH5vX1GcA9J8PbMBQZjH9KZE7x1I40GXON x8wxh9iovGvaRJMpLUOmI/6+qSK1/BQCs8Ggl3uBQw8kNk8XWOdZkkGe5mVQemrdE1Kx 3KIA== X-Forwarded-Encrypted: i=1; AJvYcCWePNQsF2uj9YJ4NCPNbYlaX3Bz5ggl4tGzXyPYWBRAulijS+tTGoheUIr5zn/n0a1a4WTlzffUtyOw1zPO/tFGxw==@vger.kernel.org, AJvYcCXzFw+/9bp4C5UuMOpJPO0d1oBd06HknDN03FsDaFCunCS0tF1wqvDsvcLDDWmBl2fPpEj/L3BIfu8wEmQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxyG3JppU6vF7/FWg6rANZ9SGCQkYdoTup2PPMryZL4MSR3AOa0 6cUCqmTksIAJ+CWej2bj+i/9d3tcG9YeFdD6dCKm04kd+XmsjNEM X-Google-Smtp-Source: AGHT+IEqnVMm+q8IXiFX97RA6vBRsMH9hMecq5xPM3krYiBRU1IYhIyuqw93bvvcTH37ogLvLrWmTQ== X-Received: by 2002:a17:90a:c718:b0:2d3:d066:f58b with SMTP id 98e67ed59e1d1-2d646bae055mr5596345a91.12.1724517206621; Sat, 24 Aug 2024 09:33:26 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:26 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 2/8] perf trace: Add trace__bpf_sys_enter_beauty_map() to prepare for fetching data in BPF Date: Sun, 25 Aug 2024 00:33:16 +0800 Message-ID: <20240824163322.60796-3-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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 */ Committer notes: Moved syscall_arg_fmt__cache_btf_struct() from a ifdef HAVE_LIBBPF_SUPPORT to closer to where it is used, that is ifdef'ed on HAVE_BPF_SKEL and thus breaks the build when building with BUILD_BPF_SKEL=3D0, as detected using 'make -C tools/perf build-test'. Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/r/20240815013626.935097-4-howardchu95@gmail.c= om Signed-off-by: Arnaldo Carvalho de Melo --- 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 d6ca541fdc78..c26eab196623 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 @@ -3446,6 +3447,23 @@ static int trace__set_ev_qualifier_tp_filter(struct = trace *trace) } =20 #ifdef HAVE_BPF_SKEL +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 struct bpf_program *trace__find_bpf_program_by_title(struct trace *= trace, const char *name) { struct bpf_program *pos, *prog =3D NULL; @@ -3521,6 +3539,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; @@ -3625,7 +3720,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); @@ -3644,6 +3741,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 Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 AEBE517B51D; Sat, 24 Aug 2024 16:33:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517210; cv=none; b=nNYab0uNEbFX4XM3VankYTwm9ZFrkQcRz/LgfzVtWas6sicLzR3NROPlpzttwn8LstrNTVYTb2lNrZfZdGTSzrMu3F96JtFcPopsjhbooosqLFX6ZOk4pzludbCJkuIZZkq7oI0gkTtS7PnII+zQkajmq5XnZMOj1+yuOv+8ErA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517210; c=relaxed/simple; bh=vfIbeHWg9LvSoCfaF62tZn/mEA/ztgIgvgTP3b0RYnw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D4KTWpIVuaBB5YcL2NukAZk/SBwkVbKNnbHb3AH/BPz6gkiz7X5rw4DkwNDTtvgC4z14wBp3utYM7AVR2WMRjFPXFfYWfs0f2DS3H9bUBcwuxpEZ6KWE+Fph5kwZGUHIY4zndCt9TSo97B396ligDUIhxxGXqXLgUDmckGwJw78= 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=jQ2PpgEC; arc=none smtp.client-ip=209.85.216.52 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="jQ2PpgEC" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-2d3d58d6e08so2259714a91.3; Sat, 24 Aug 2024 09:33:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517208; x=1725122008; 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=MuI8fTyx4ROJVsLT0k9C5F+jin8bf5xIeZC53S2elNw=; b=jQ2PpgECciSesOfoWAApH7tzzDy3FAvfmoNXHO9l3fZFUv/d0WIU0DmYoDkv2YPENJ 70jaso4uaqhNsEDkWO6ndcDb9eceUl+OrYRBeW6gu409P2KkhGFgmpoENn01jYWZG5U2 btjVUs2gSn2p0pKBfD515jdAtcXvo09czlByKj/dActJSQEDhMS9U1iXU+2tXkqTYpq4 fKq3YF4COSj3AkVriiTn/nBHyVVfMy4gKkIWySxlvZSfpqwaNZ+dX3vaE7BpGH50WmQO K9v0a81VL0av+9udyAsNZTr0aqrU08dadjNuE+CmxtXezNhbGzRZgGp7Zti42ESRY83c xHnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517208; x=1725122008; 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=MuI8fTyx4ROJVsLT0k9C5F+jin8bf5xIeZC53S2elNw=; b=Df+omNocmWJmQisqdd2037wPJj2enZryF9zmgxdi79Fm0NUNGFaGzjTPncWQL5/w6K awSA7BxOswaYpR1bqMpClU+fqSgOCSc+CT1dB7PzPcMRrPGnixSohwCCp6X4GkF7Nwn3 HvWdcVO3L3LVG2BJX3r5i/Vnoe9P7eNXj8EbjukEmP1KPePt87nCCT3rEfJzpQedK5xF zxyGAvyOY8UMmJgpq5PN2tmzj3nimVclTedOQSadLSuYwTCme4UOMfWROyhyOl038K9k UQIhT3IzD6ofFUc3iY5yNpznvcgJBc6rxgm4sBgD9082OTZDX2HEftLfKMdcLDCNSzUu ZTCA== X-Forwarded-Encrypted: i=1; AJvYcCV5uqYgL7ZCBxLMQgwZs88CV0025wgwMCPjQKJSu4DYY9xNTElYGH+fNrLq2DqnDo2KTnQzZGEDmLSisrJe4sUeqQ==@vger.kernel.org, AJvYcCVf8z07ARkVdkLQvdQGVsMqnxoQUt5AbG2ay6CoDNIsxNB98o/vTSll7MIqoFy84WAX0zfDWfdlIAo5Rdo=@vger.kernel.org X-Gm-Message-State: AOJu0YyLUsCJ7Y+mJCslXAcvXiwH0CzEQQk70iK3laXK3RWKbwdo7Trr DNmOhOI/tLOyvYuNsCBAxDMm5zxLzrtSiM/vtOl44PsWrIpM2J+0OO+k0qHe X-Google-Smtp-Source: AGHT+IHykCcgK4aJNNKNvdAFv1h9ABJXIoFYs3GKThGyLFnKO4iF6iu/5Jamog06OJrlLDTnBeykOA== X-Received: by 2002:a17:90a:fe94:b0:2d3:b9bb:5575 with SMTP id 98e67ed59e1d1-2d646d30147mr5997946a91.29.1724517207694; Sat, 24 Aug 2024 09:33:27 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:27 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 3/8] perf trace: Pass the richer 'struct syscall_arg' pointer to trace__btf_scnprintf() Date: Sun, 25 Aug 2024 00:33:17 +0800 Message-ID: <20240824163322.60796-4-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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" From: Arnaldo Carvalho de Melo Since we'll need it later in the current patch series and we can get the syscall_arg_fmt from syscall_arg->fmt. Based-on-a-patch-by: Howard Chu Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/lkml/Zsd8vqCrTh5h69rp@x1 Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Howard Chu --- tools/perf/builtin-trace.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index c26eab196623..43b1f63415b4 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -990,9 +990,11 @@ static size_t btf_enum_scnprintf(const struct btf_type= *type, struct btf *btf, c return 0; } =20 -static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= _fmt *arg_fmt, char *bf, +static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= *arg, char *bf, size_t size, int val, char *type) { + struct syscall_arg_fmt *arg_fmt =3D arg->fmt; + if (trace->btf =3D=3D NULL) return 0; =20 @@ -1012,7 +1014,7 @@ static size_t trace__btf_scnprintf(struct trace *trac= e, struct syscall_arg_fmt * } =20 #else // HAVE_LIBBPF_SUPPORT -static size_t trace__btf_scnprintf(struct trace *trace __maybe_unused, str= uct syscall_arg_fmt *arg_fmt __maybe_unused, +static size_t trace__btf_scnprintf(struct trace *trace __maybe_unused, str= uct syscall_arg *arg __maybe_unused, char *bf __maybe_unused, size_t size __maybe_unused, int val __mayb= e_unused, char *type __maybe_unused) { @@ -2261,7 +2263,7 @@ static size_t syscall__scnprintf_args(struct syscall = *sc, char *bf, size_t size, if (trace->show_arg_names) 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, + btf_printed =3D trace__btf_scnprintf(trace, &arg, bf + printed, size - printed, val, field->type); if (btf_printed) { printed +=3D btf_printed; @@ -2964,7 +2966,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, &syscall_arg, bf + printed, = size - printed, val, field->type); if (btf_printed) { printed +=3D btf_printed; continue; --=20 2.45.2 From nobody Fri Dec 19 16:21:31 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 7BA9D17BED2; Sat, 24 Aug 2024 16:33:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517211; cv=none; b=h+eu540LqpNw2c2OFk2ud6L7lFjmcpsW2xaaEtcogHTzymxkEKRLaeE2AfsjTcwAZeSWB1RMcTno2591BSC/mN+IcBpIjFVNPUHl8S5hHdHELX1FM6WMZ4GUzhrxr967eHMY4ulWkDRaY+aiqoSy58sWrMcoPMY8LuTs3NVj4so= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517211; c=relaxed/simple; bh=DhvbL1P1QdBR+sRLyNlNmk0DRBaHP202JuLTh7457Jg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XfW4lIXdg+02gyGDJKyZnA7a6sF6ZNgyxidiIJLpvyNJ/OGIAm9i7jjwHG0yqCKZ6cJhIwIgdHxexzgKK1bRUalg0Lygb1Xvs+y7Vw5JSFY8sLi6GCXvcTZQ+7B8yNvcH37MnctJjtTAJe3MlT4ri+dehrA/Rro4AXrpt7qZV2E= 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=Q//a0wS0; arc=none smtp.client-ip=209.85.210.173 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="Q//a0wS0" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-7142a30e3bdso2910123b3a.0; Sat, 24 Aug 2024 09:33:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517209; x=1725122009; 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=QiGTpTFrW930dnsO08eww04nlYiG3CY1GeWlH+yxrak=; b=Q//a0wS0GW3g+V6jYtQ06US4De5WBg0QeBWZm1Q0C6Qg5/luzqUZk+cTwjyswCh6rM iSGS8meJMdnByMTy1KxccnFzdT4i6NfIO+GXn7Y+ms+qWmvCgwC5v8v3ocSAS4AzPlO0 XsZhCnm82iFTj1MiaPvkFU4qdB7B1+NvrnMDoZGys26/fF0ON6EzCCAiePLFZXTjx1gU f7ZAekFcGWudEOFg7Z1PyPtDAXOY87DRzsvUspI0JnIDgfBUpnTUrBdpXLFumv+SBhDH YljT2JSGo19RHinUHTvknD+qLHJfrcTlVX8N8F3/nkxfq/PNofc6M4SIB7Vh4JrzqIlS f0dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517209; x=1725122009; 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=QiGTpTFrW930dnsO08eww04nlYiG3CY1GeWlH+yxrak=; b=r90EPTrO9FVcDfeXrt/Ob07afdRvPH1bPUgU9jgCjHAyBZbHyXPGwsoLnz/0ThzUxZ Bqs3knObXcf5CyqlBea0zaASO4Ie8Ze+Q56IZ5lzdp+rwqEu4dNBWEMZbsWdDPJDpd8q U7jrGrhqT3fP6F85vi49rNhBJHS/CQCGz38rCJ0/FPaWMTz1G1Uo9Xc5dKzqlvPE9Ib8 5V8AoSaPIr/W/cePPFbz3OyLYNgmOCbEVI7fendA8fN6YTe67g3PReBsSn3/AvT49geq 0Bn4NtEULY68dJOCVpkFsyjKnHd6T5/P+BatarebZdwH70+Xd2LW8R6QuepLj6dZYElj 9glg== X-Forwarded-Encrypted: i=1; AJvYcCWK9VwdGxWmHmmVhvvLTUMJQtXfTOjvB2vfFHTuAslssgRGib3BWs3IFS8lhVmf70QfxAxoPCUZkrnrlYE=@vger.kernel.org, AJvYcCWuENnUHTZGu5O5YX2aMHxl2bKgQq2LeBuziRTfEu550tdPQfBDrHtUVwbM9Fy+dRRMPklV1m975QD0Kbn9rL0HpA==@vger.kernel.org X-Gm-Message-State: AOJu0YzRXQ3KOgzmmA6cbWRQzK88oR38KnBfsaS4I9E3kMTW2L3zUQYr JlxfikZo7x1z2dtzlGr/JIhBDMPYdX73hel5DmBTZJ/kIodIOcPF X-Google-Smtp-Source: AGHT+IEZCltjk7dbDEj3mX13JhOKjxJqj7mTtabsH2y6E6bCqxovXsICCmbmERO3ZVSEIfyWYS73nw== X-Received: by 2002:a17:90a:ad82:b0:2c8:f3b5:7dd1 with SMTP id 98e67ed59e1d1-2d644ab7f2bmr9597234a91.16.1724517208749; Sat, 24 Aug 2024 09:33:28 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:28 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 4/8] perf trace: Pretty print struct data Date: Sun, 25 Aug 2024 00:33:18 +0800 Message-ID: <20240824163322.60796-5-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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 the arg->augmented.args to arg->augmented.args->value to skip the header for customized pretty printers, since we collect data in BPF using the general augment_sys_enter(), which always adds the header. Use btf_dump API to pretty print augmented struct pointer. Prefer existed pretty-printer than btf general pretty-printer. set compact =3D true and skip_names =3D true, so that no newline character and argument name are printed. Committer notes: Simplified the btf_dump_snprintf callback to avoid using multiple buffers, as discussed in the thread accessible via the Link tag below. Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/r/20240815013626.935097-7-howardchu95@gmail.c= om Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-trace.c | 65 +++++++++++++++++++++-- tools/perf/trace/beauty/perf_event_open.c | 2 +- tools/perf/trace/beauty/sockaddr.c | 2 +- tools/perf/trace/beauty/timespec.c | 2 +- 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 43b1f63415b4..048bcb92624c 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -990,6 +990,54 @@ static size_t btf_enum_scnprintf(const struct btf_type= *type, struct btf *btf, c return 0; } =20 +struct trace_btf_dump_snprintf_ctx { + char *bf; + size_t printed, size; +}; + +static void trace__btf_dump_snprintf(void *vctx, const char *fmt, va_list = args) +{ + struct trace_btf_dump_snprintf_ctx *ctx =3D vctx; + + ctx->printed +=3D vscnprintf(ctx->bf + ctx->printed, ctx->size - ctx->pri= nted, fmt, args); +} + +static size_t btf_struct_scnprintf(const struct btf_type *type, struct btf= *btf, char *bf, size_t size, struct syscall_arg *arg) +{ + struct trace_btf_dump_snprintf_ctx ctx =3D { + .bf =3D bf, + .size =3D size, + }; + struct augmented_arg *augmented_arg =3D arg->augmented.args; + int type_id =3D arg->fmt->type_id, consumed; + struct btf_dump *btf_dump; + + 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; + + dump_data_opts.compact =3D true; + dump_data_opts.skip_names =3D true; + + btf_dump =3D btf_dump__new(btf, trace__btf_dump_snprintf, &ctx, &dump_opt= s); + if (btf_dump =3D=3D NULL) + return 0; + + /* pretty print the struct data here */ + if (btf_dump__dump_type_data(btf_dump, type_id, arg->augmented.args->valu= e, type->size, &dump_data_opts) =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 ctx.printed; +} + static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg= *arg, char *bf, size_t size, int val, char *type) { @@ -1009,6 +1057,8 @@ static size_t trace__btf_scnprintf(struct trace *trac= e, struct syscall_arg *arg, =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); =20 return 0; } @@ -2222,6 +2272,7 @@ static size_t syscall__scnprintf_args(struct syscall = *sc, char *bf, size_t size, .show_string_prefix =3D trace->show_string_prefix, }; struct thread_trace *ttrace =3D thread__priv(thread); + void *default_scnprintf; =20 /* * Things like fcntl will set this in its 'cmd' formatter to pick the @@ -2263,11 +2314,15 @@ static size_t syscall__scnprintf_args(struct syscal= l *sc, char *bf, size_t size, if (trace->show_arg_names) printed +=3D scnprintf(bf + printed, size - printed, "%s: ", field->na= me); =20 - btf_printed =3D trace__btf_scnprintf(trace, &arg, bf + printed, - size - printed, val, field->type); - if (btf_printed) { - printed +=3D btf_printed; - continue; + default_scnprintf =3D sc->arg_fmt[arg.idx].scnprintf; + + if (default_scnprintf =3D=3D NULL || default_scnprintf =3D=3D SCA_PTR) { + btf_printed =3D trace__btf_scnprintf(trace, &arg, bf + printed, + size - printed, val, field->type); + if (btf_printed) { + printed +=3D btf_printed; + continue; + } } =20 printed +=3D syscall_arg_fmt__scnprintf_val(&sc->arg_fmt[arg.idx], diff --git a/tools/perf/trace/beauty/perf_event_open.c b/tools/perf/trace/b= eauty/perf_event_open.c index 01ee15fe9d0c..632237128640 100644 --- a/tools/perf/trace/beauty/perf_event_open.c +++ b/tools/perf/trace/beauty/perf_event_open.c @@ -76,7 +76,7 @@ static size_t perf_event_attr___scnprintf(struct perf_eve= nt_attr *attr, char *bf =20 static size_t syscall_arg__scnprintf_augmented_perf_event_attr(struct sysc= all_arg *arg, char *bf, size_t size) { - return perf_event_attr___scnprintf((void *)arg->augmented.args, bf, size,= arg->trace->show_zeros); + return perf_event_attr___scnprintf((void *)arg->augmented.args->value, bf= , size, arg->trace->show_zeros); } =20 static size_t syscall_arg__scnprintf_perf_event_attr(char *bf, size_t size= , struct syscall_arg *arg) diff --git a/tools/perf/trace/beauty/sockaddr.c b/tools/perf/trace/beauty/s= ockaddr.c index 2e0e867c0c1b..6ecebf776899 100644 --- a/tools/perf/trace/beauty/sockaddr.c +++ b/tools/perf/trace/beauty/sockaddr.c @@ -47,7 +47,7 @@ static size_t (*af_scnprintfs[])(struct sockaddr *sa, cha= r *bf, size_t size) =3D { =20 static size_t syscall_arg__scnprintf_augmented_sockaddr(struct syscall_arg= *arg, char *bf, size_t size) { - struct sockaddr *sa =3D (struct sockaddr *)arg->augmented.args; + struct sockaddr *sa =3D (struct sockaddr *)arg->augmented.args->value; char family[32]; size_t printed; =20 diff --git a/tools/perf/trace/beauty/timespec.c b/tools/perf/trace/beauty/t= imespec.c index e1a61f092aad..b14ab72a2738 100644 --- a/tools/perf/trace/beauty/timespec.c +++ b/tools/perf/trace/beauty/timespec.c @@ -7,7 +7,7 @@ =20 static size_t syscall_arg__scnprintf_augmented_timespec(struct syscall_arg= *arg, char *bf, size_t size) { - struct timespec *ts =3D (struct timespec *)arg->augmented.args; + struct timespec *ts =3D (struct timespec *)arg->augmented.args->value; =20 return scnprintf(bf, size, "{ .tv_sec: %" PRIu64 ", .tv_nsec: %" PRIu64 "= }", ts->tv_sec, ts->tv_nsec); } --=20 2.45.2 From nobody Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 D8643185E7B; Sat, 24 Aug 2024 16:33:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; cv=none; b=uRMHYym/wuUC7PvXZOX7sPf+7G9wqc3l4q+8LnFHo0GcsKiIp5LQetFLhrneqJmLzXnHpaxAh59WxXGDhadpBNKmIRKBGCezJPfvdBVWPD6ak2onBo0ihbwkO/Z1+HsR/EhKf4dj/+mGkAKqlLnYMigQ/s73VguWPXiMzZnIegc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; c=relaxed/simple; bh=bk683qJ2DYWOMbFVTIb1SnYRPjP4cgf87rQGoMsqAPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KUHUj15WNjxOTdbgBupy8VVy2Xxou8NmfNMgFfFJSlVNTGvmUGpg/VXcFYe27SEelwGb5x7m9+CZ7N2dGkIC7HFehDFRLvIuY6tt//M+Ord4mQhBgNj4YHIamnJKU68jlPRLvZ7Uw7cNOU1qFFe5OiYXUrNkmCvdivu8ay5Foxo= 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=P6mt9Dnn; arc=none smtp.client-ip=209.85.216.46 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="P6mt9Dnn" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2d3d662631aso2266015a91.1; Sat, 24 Aug 2024 09:33:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517210; x=1725122010; 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=UaRuGKTP9IsE4307qeohX5bW/qRe0+n76G/9u+rihkI=; b=P6mt9DnnnTclDzdxKDnnQJwiqLQUo4hI+/zV4JZ+gf0gB2NMcIAgpIoGoaCE66CAi+ Dp9fxZKE3A3UwhiK3LkpUICvjiRe69x4CRsLJmHSvv3iqhEprm5vJzAyyzaCdpiHimKQ cCCPrXzQFFC5pUbaN8qqR9JMfAOfy7gyCcXAjEHpB3T27YL/I8g3A7jKGGO38LlwaQFS wZXK+jkOtkET1OgjwzNGh4Z6eve3uFiLmtWJ5K1JqCnxmEWnN0CD/77QFeNigZEl/MaM 119Z/SAE7hhHgyKpm9W1GjJc/8rtrIofGor83435kVmtKe/rMxmutQcvCGeRvNIBOzlM Ho4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517210; x=1725122010; 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=UaRuGKTP9IsE4307qeohX5bW/qRe0+n76G/9u+rihkI=; b=pYEkb5GGK33igrofraMo3kyemhYr+t9Y+AMCKOWR0pnnvFVZCvY9VerUMVxE67wylp zq76899eJj9ySgPIvPW2N1/y/BghiGSynitB1j8TGY/l4yPHyRROC3p7CPUD4Tk6ZeW6 Go1Z8xlIqhB12MvH6gYEtSRH2hxJioojlQhkjVGUxSDaFaAiG/CI/9u68CG3hPJZ4Ck9 86K1AztBf1QZrvLt1DKvsg8xKV8hRvwxZcCJfZXFUcgvh+GKFxjVN2FHvrZfbvRS7f8/ CaryqJbFnsK6IhXDZwc5e61nHU3JJS82shwGGXJfD3m2v5cgQlgyiuilqQOgZ7nTxJjt jjRQ== X-Forwarded-Encrypted: i=1; AJvYcCUuIXTINUSKJghB6cONLTEJ0uREA0OfSsrGPynHoy83qOwdJ5e//PS3B8hVPMesB+acKqQjUuEZPhJg7kg=@vger.kernel.org, AJvYcCV1eJfCzwka4dHCdII5rNnZRNxS7B9Wc60MJwBPBZIXbTYo2cy18a0JJyGarL+asVsVfM1bKS4v/lMO0GBf7ACl5A==@vger.kernel.org X-Gm-Message-State: AOJu0YzEG6WqKHNzmThiMdxq8x7rUDhFsnhls08uGseZlIs2RidaaA51 v4fpT49GZW+plTHHjAhAkILGvzyNdnv1iPS78amq3RaufnHgEYJX X-Google-Smtp-Source: AGHT+IFgR0seSynDGiVKQt7sR4u3KEOmbA4drCXHG2wBXhb8pk/+BpDjhaktjYX/oEkkPZutZVAPmQ== X-Received: by 2002:a17:90b:115:b0:2d3:dcc1:f98f with SMTP id 98e67ed59e1d1-2d646bf282bmr6030596a91.10.1724517209816; Sat, 24 Aug 2024 09:33:29 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:29 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 5/8] perf trace: Pretty print buffer data Date: Sun, 25 Aug 2024 00:33:19 +0800 Message-ID: <20240824163322.60796-6-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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. Committer notes: Simplified the buffer scnprintf to avoid using multiple buffers as discussed in the patch review thread. Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/r/20240815013626.935097-8-howardchu95@gmail.c= om Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-trace.c | 33 +++++++++++++++++++++++++++++++++ tools/perf/util/trace_augment.h | 6 ++++++ 2 files changed, 39 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 048bcb92624c..470d74e3f875 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) { @@ -1745,6 +1750,32 @@ 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) +{ + struct augmented_arg *augmented_arg =3D arg->augmented.args; + unsigned char *orig =3D (unsigned char *)augmented_arg->value; + size_t printed =3D 0; + int consumed; + + if (augmented_arg =3D=3D NULL) + return 0; + + for (int j =3D 0; j < augmented_arg->size; ++j) { + bool control_char =3D orig[j] <=3D MAX_CONTROL_CHAR || orig[j] >=3D MAX_= ASCII; + /* print control characters (0~31 and 127), and non-ascii characters in = \(digits) */ + printed +=3D scnprintf(bf + printed, size - printed, control_char ? "\\%= d" : "%c", (int)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 printed; +} + static bool trace__filter_duration(struct trace *trace, double t) { return t < (trace->duration_filter * NSEC_PER_MSEC); @@ -1956,6 +1987,8 @@ syscall_arg_fmt__init_array(struct syscall_arg_fmt *a= rg, struct tep_format_field ((len >=3D 4 && strcmp(field->name + len - 4, "name") =3D=3D 0) || strstr(field->name, "path") !=3D NULL)) 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 Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 D85E0185E53; Sat, 24 Aug 2024 16:33:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; cv=none; b=kqY7A1avMOHzKlcqYbIXCL7jiRGWcfaSlleuqQh7YiE5GXjAZCv0oPpVv4KF3SgMAoqd3JUb1bdnmxmSm1brhzNhXhRSNwRVARfuG+Y9HvXW3jgDO4xg9rmtcT/832G1/5IXQ7Ezia++fti49uSWfiRRb8CSOVaohMlDTi75xAQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; c=relaxed/simple; bh=s3ocW7p8o8fMIFld2ntXVxBjJaRPHURemAYfEmJpX4M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NFvLAdwA/KRDiwpwROZJEeY30TH7IW6uuNCsUqN24CrtlyWePDf2CjTzNiHPYwk7LJJPXeT/BHnUA839yArJjKEKeR1sQqEyMcc7oSE3rZReSdeuWIeuYwMl1/Qraj/biEiEsGjukvTYjKaQ6/5ZUm1m+FWQ2KWCZxDXvgvhVoY= 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=XtlcDwKG; arc=none smtp.client-ip=209.85.216.46 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="XtlcDwKG" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2d3c5f769d6so2022634a91.3; Sat, 24 Aug 2024 09:33:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517211; x=1725122011; 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=vXkhCNs+00zgE+sU2FTtlRZdxAHRx5jTB0KnVpppN/I=; b=XtlcDwKGpUq7u/bDWbf3CdvHMydpuxU1vICc3fHrv8GUC3EaNh6GXTa4IrEhrX52Tz lpQbdJ7UwSIX/KfZgyzD6WxBQe5QAj2nc1OSX09s82x10YYaJMKbeVaGMy/mHVYWstYs C1Qe9mrcADeEQBd6qU5Oh8Oc1EmFXk1s3J7nwxXBeCTEolBxxWWod+OQFrK9JxyZvWHH n353qrgeQ7dPxZyv7LDgpmSSYkGqkFUdkcjTdkl42KWAt7jmBfdZFDbTYHBGntN8sXx7 02ltsKKgCZkxD9TGxoiHP+1lkV0sZUg883hmVQf44i9+HvxG0oMPSP2sEwAeIQeKXvc5 GZHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517211; x=1725122011; 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=vXkhCNs+00zgE+sU2FTtlRZdxAHRx5jTB0KnVpppN/I=; b=vPwmrDJo9P4pV+sIr72VYROymlq4d8Gsj3ChakYueCTNuu2EyVAHD12S7XOZEXRl1n sRdp2TIqWFZc2aLa18w1qVwiH3Ip9WbAQlDw3qtZw0nPip7MudOdJhTpLFA3SSeCfbNF JFEPLB9NkFsuvlXGvavey5q7p7fca/2e2ltjPPWB+nV5/cYZRddsY24iSQmU08R4iTDS dGKdlDcOYt/IqkiYrquBRqj9owIF8SeNI6VOJ1jWmGP6rcE10m2FCjdxpRuo5IZ+VCO0 5IkZXSlE/NjlC1UkFtNQY1KnACBnh8SAzsf0wfKHtsOD+1rKqC2HyPj20vAVXxUXQzCt /Jyw== X-Forwarded-Encrypted: i=1; AJvYcCVKYdDG09UAtoouOZBKvbPV2HUVDshIQFu6U/XXEelYZ7Qe8eV2Or44G2obCYCtBJ03Y7k/6Vwot7nSVbO/7YqBZA==@vger.kernel.org, AJvYcCX8kJm3Hi+y6LTzPHECFkSwex8mP1gtbQAQWtdFhSZRM82vqQAersHP/Yj4AdoHuYH/tzrLsYIZuyYJp6s=@vger.kernel.org X-Gm-Message-State: AOJu0YzfwzD+YKma5lJu0rpmemVN/3XFGn3uNZze+oTTCJl37KKv7CVg aDEaPYcNHoUToTVx1me92LMkgd9IosSp7Fxhvo2Xgb/J4c7mSj0w X-Google-Smtp-Source: AGHT+IGTfJT+1rBShA36qvM8tH5+R+Ak5XJKKwn2ncKhwZHu9PI4PT7NCJFWKn6dK7cj2KprjelctQ== X-Received: by 2002:a17:90a:ac17:b0:2d3:b8eb:9c3c with SMTP id 98e67ed59e1d1-2d646b9083cmr5042254a91.2.1724517210891; Sat, 24 Aug 2024 09:33:30 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:30 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 6/8] perf trace: Collect augmented data using BPF Date: Sun, 25 Aug 2024 00:33:20 +0800 Message-ID: <20240824163322.60796-7-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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. Committer notes: It works, but we need to wire it up to the userspace specialized pretty printer, otherwise we get things like: root@number:~# perf trace -e connect ssh localhost 0.000 ( 0.010 ms): :784442/784442 connect(fd: 3, uservaddr: {2,}, ad= drlen: 16) =3D 0 0.016 ( 0.006 ms): :784442/784442 connect(fd: 3, uservaddr: {10,}, a= ddrlen: 28) =3D 0 0.033 ( 0.096 ms): :784442/784442 connect(fd: 3, uservaddr: {10,}, a= ddrlen: 28) =3D 0 root@localhost's password: 71.292 ( 0.037 ms): ssh/784442 connect(fd:= 4, uservaddr: {1,{['/','v','a','r','/','r','u','n','/','.','h','e','i','m'= ,],},}, addrlen: 110) =3D 0 72.087 ( 0.013 ms): ssh/784442 connect(fd: 4, uservaddr: {1,{['/','v'= ,'a','r','/','r','u','n','/','.','h','e','i','m',],},}, addrlen: 110) =3D 0 root@number:~# When we used to have: root@number:~# perf trace -e connect ssh localhost 0.000 ( 0.011 ms): ssh/786564 connect(fd: 3, uservaddr: { .family: I= NET, port: 22, addr: 127.0.0.1 }, addrlen: 16) =3D 0 0.017 ( 0.006 ms): ssh/786564 connect(fd: 3, uservaddr: { .family: I= NET6, port: 22, addr: ::1 }, addrlen: 28) =3D 0 0.263 ( 0.043 ms): ssh/786564 connect(fd: 3, uservaddr: { .family: I= NET6, port: 22, addr: ::1 }, addrlen: 28) =3D 0 63.770 ( 0.044 ms): ssh/786564 connect(fd: 4, uservaddr: { .family: L= OCAL, path: /var/run/.heim_org.h5l.kcm-socket }, addrlen: 110) =3D 0 65.467 ( 0.042 ms): ssh/786564 connect(fd: 4, uservaddr: { .family: L= OCAL, path: /var/run/.heim_org.h5l.kcm-socket }, addrlen: 110) =3D 0 root@localhost's password: That is closer to what strace produces: root@number:~# strace -e connect ssh localhost connect(3, {sa_family=3DAF_INET, sin_port=3Dhtons(22), sin_addr=3Dinet_ad= dr("127.0.0.1")}, 16) =3D 0 connect(3, {sa_family=3DAF_INET6, sin6_port=3Dhtons(22), sin6_flowinfo=3D= htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=3D0}, 28) = =3D 0 connect(3, {sa_family=3DAF_INET6, sin6_port=3Dhtons(22), sin6_flowinfo=3D= htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=3D0}, 28) = =3D 0 connect(4, {sa_family=3DAF_UNIX, sun_path=3D"/var/run/.heim_org.h5l.kcm-s= ocket"}, 110) =3D 0 connect(4, {sa_family=3DAF_UNIX, sun_path=3D"/var/run/.heim_org.h5l.kcm-s= ocket"}, 110) =3D 0 root@localhost's password: Signed-off-by: Howard Chu Tested-by: Arnaldo Carvalho de Melo Cc: Adrian Hunter Cc: Ian Rogers Cc: Jiri Olsa Cc: Kan Liang Cc: Namhyung Kim Link: https://lore.kernel.org/r/20240815013626.935097-10-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- .../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 0acbd74e8c76..f29a8dfca044 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 @@ -124,6 +126,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; @@ -136,6 +157,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) { @@ -372,6 +398,91 @@ static bool pid_filter__has(struct pids_filtered *pids= , pid_t pid) return bpf_map_lookup_elem(pids, &pid) !=3D NULL; } =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) { @@ -400,7 +511,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 Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 D5D87185B7E; Sat, 24 Aug 2024 16:33:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; cv=none; b=tQCmZ4kDcMeAtsQ8rJzJXGkEBtzCIdUbm6VhB2vY3LijTHFWpdc/ZDFZ5aPQwBWkqv+zecLrQ2vPR2hz5Z8YuAnwvYNBFIAqbjolIGrIgRzpyLd1bvkQRZ3/QxaoGWNPwxdT0Kpa6GNPR+1qvt8EHinnWysJPB7wL9IxZSUdpSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517214; c=relaxed/simple; bh=kOaFaDR+DhlmRt4+1xw22YBHxgGeGE1RqeYgr19yVnc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZfRO9GbzJG+lMnNBmdLxgdD5qV4Etr9IZ7fHmIkyYzOtMSGOk7B0QsFsvV7fLL0ezLJ8fSXMhp2JqEmFoZJCmTtE6TofRsqnBPjf00xd2a0kxvIq5x549e/xLnWXD08DbAl/Iy6rmTR7GjdH9EyJhBq5FSyhlJDBWytvNUKEBWM= 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=fPBg2AIH; arc=none smtp.client-ip=209.85.216.50 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="fPBg2AIH" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2d3dacaccfaso2038098a91.0; Sat, 24 Aug 2024 09:33:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517212; x=1725122012; 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=iMBnSHxXkm746u32J0TUWktc3i+DQ1/O7EpofHyk9PU=; b=fPBg2AIHzuwsLzbrlzZFWjf32GV8lYWVsHP4L0lv2O2kV6mNqK/BOMg71QwHsSzy8/ O6BoB/5qCmzq87ynhap38zdhl6tGUgtkrcCNohz2ElBDAC7PTL8B5a2/IWPnAVmk8YG1 jC1HBTkEFwzU1qN+uxNJ7M2JrQqjnEysSiPE92H/uZmCTQrE9QW5ye+uy6TSwBRlJWTE dDIwVg4HHXV8DczsDL1j5tRHHf/sLIZtq5uITWYI7aqYSiIVMrnuHAKCr3834G0YH85p hDMmmZVL7/qVccuh2Zk6kgOwlmXuVgtxqybgipo5B6Tb5NxCho3GRyfeUlPeSnVqefNC icTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517212; x=1725122012; 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=iMBnSHxXkm746u32J0TUWktc3i+DQ1/O7EpofHyk9PU=; b=Ue+J50Kv/CTfbD+LrzmhIQO6K9xpZOr3hzs+3fwBmt5Y9UTfullX6eMsfby82gPL5S x5Ar8v9/Ns7oAoR77ia+ZlOZm12O+Iu8hTM8W6Dl1nWyRjshkgjiU+Z2k24z2k3a6Dtd v5L0jTcN9/L35827wwqPEQIolZBy1pWsQlNpxxMJiuG/9FHRvM/rRHtgacYqwPNyH8ix qs5yc3XfmWDYo1CY6k7Ds2kYGHw04EVWN+ZKuWtvyEAYfhOOJVAHYDXXK9Q2SOZPoYxi 5qS06zDAbCZZqfrdepMpvpqD49T5EmGq2uVjmP2QcS38zBt2naP4BZUE0yvSro5YOXKQ kNXQ== X-Forwarded-Encrypted: i=1; AJvYcCUTU/lTm3AAuNlP3kDt7Ac3SGXy/XihnrowJ5y69P40wkMCJbvYrUxvqG6HaJM4WpjigTXwmEeqt80nfA8=@vger.kernel.org, AJvYcCWhej27VDSyay+ezCwAd88Du4/47E3w07pD6ILYNalGOqxz9Z2UcCAepVqVBPXF8zpmQVytdwGyDwKiKADqGAR7+w==@vger.kernel.org X-Gm-Message-State: AOJu0Yx80SFwPf3c2mE4ERjQZJ6Hpl6mwObuHeySn1es46GPwbSGJ+08 t3b0FhWG3//v7TfMIgu7LNsE2vutiwzFaOfl+uLSvUAuU7j/AOCY X-Google-Smtp-Source: AGHT+IFNmWvjqJh7TIaO12e+QxSBbkf82H0IIQr6osSp4N6WTXUZJ0tyEQgxkJtQnMq3GGlJXOm5hg== X-Received: by 2002:a17:90b:438f:b0:2c9:64fb:1c7e with SMTP id 98e67ed59e1d1-2d646bbb1ccmr5728528a91.14.1724517211971; Sat, 24 Aug 2024 09:33:31 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:31 -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, Arnaldo Carvalho de Melo Subject: [PATCH v3 7/8] perf trace: Add --force-btf for debugging Date: Sun, 25 Aug 2024 00:33:21 +0800 Message-ID: <20240824163322.60796-8-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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" If --force-btf is enabled, prefer btf_dump general pretty printer to perf trace's customized pretty printers. Mostly for debug purposes. Signed-off-by: Howard Chu Suggested-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-trace.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 470d74e3f875..115f8dffb272 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -205,6 +205,7 @@ struct trace { bool show_string_prefix; bool force; bool vfs_getname; + bool force_btf; int trace_pgfaults; char *perfconfig_events; struct { @@ -2349,7 +2350,9 @@ static size_t syscall__scnprintf_args(struct syscall = *sc, char *bf, size_t size, =20 default_scnprintf =3D sc->arg_fmt[arg.idx].scnprintf; =20 - if (default_scnprintf =3D=3D NULL || default_scnprintf =3D=3D SCA_PTR) { + if (trace->force_btf || + (default_scnprintf =3D=3D NULL || + (default_scnprintf =3D=3D SCA_PTR && strstr(field->type, "struct")= ))) { btf_printed =3D trace__btf_scnprintf(trace, &arg, bf + printed, size - printed, val, field->type); if (btf_printed) { @@ -5153,6 +5156,8 @@ int cmd_trace(int argc, const char **argv) OPT_INTEGER('D', "delay", &trace.opts.target.initial_delay, "ms to wait before starting measurement after program " "start"), + OPT_BOOLEAN(0, "force-btf", &trace.force_btf, "Prefer btf_dump general pr= etty printer" + "to customized ones"), OPTS_EVSWITCH(&trace.evswitch), OPT_END() }; --=20 2.45.2 From nobody Fri Dec 19 16:21:31 2025 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 C3DDE1865FF; Sat, 24 Aug 2024 16:33:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517215; cv=none; b=ZTp/+s5LQsQrdYmei5yjoq69W3qRa3FitxaqTrG52DJlYZ/LXie57xPYGThnr/yi/UM7rL2eEpu6EquKXs8F3nSrogk49RRyIm+KISRhGobg0aKJb4eojc46y8VsuM6nsra1Ayfq3jNcJ9+WWNtU1o/bZZUvzFXQH+eoi/hmnfk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724517215; c=relaxed/simple; bh=gcLi01rczSi1pkKRDBQ6xxxxrZMo7LjOc717hx9S8po=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kaTwMUlmuU+mVBiv7PxCd9WVMEBbhXFSxnEj/luOZ0nxa0Wfo/SLM5C5/3SSk3VSmmNDk4oKxl/A/52+EZOFkcubO9qZYEIM1NfIPQ6IbOonwdIh/kgP1/WYVKYg+obDagAbJI710qi7iE+mfPDFrPkeN1NngxZsbcvBzZPDx/o= 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=ntWpqYEf; arc=none smtp.client-ip=209.85.216.42 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="ntWpqYEf" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2d427fb7c92so2182801a91.1; Sat, 24 Aug 2024 09:33:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724517213; x=1725122013; 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=vEYfaiWN5qgCnRZpAGUw8130UenZvpr/yXa584v7XJA=; b=ntWpqYEfH/QCikOET5sK15c+VuOde29wE4XOxHb2qXk1wYxdPSHT70ow/tQAGqcdzK JWdrV61TPq9TbrysDKzm0IEyrm05Zv41JbNPvUlCG5BUjOLj0klPmgYsZebpXRMLDzI7 svS2g+TyuZQDtxDLwWV5QqkDk1FcLxbKdL3I1LMfRuXGjwgjGPHCt+CTXGOxHPn/x4Uy rCprL+Y+kQbWHd5My/v/Mn/DklapTUf1CwIV5ZfYJ3wgrOWI7KUkPqZlUeCtnwpIDXV9 djzvxvTU0DOauATKL6rSLBQx0Wzue3cgeWjrJNnEXnYm3TWjKkQm1yiUOyLmEWT4ZeeS YWbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724517213; x=1725122013; 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=vEYfaiWN5qgCnRZpAGUw8130UenZvpr/yXa584v7XJA=; b=YCrgPAYv5z26+V7CIgo1zZYipgCbTZL2y9sBF3YyY6bP6EZnSXCYNNIOIVt7F123JX pO2Hm6jJm9fkaDR2IcaxAysAah+2bgvkDzi480hGvsrbgvL/pMrCIaXf/t5XFfd6H9li EWNT9RSzD8NH5si8wIhXvFdOmWM228J5gtLyD4+PM/QGoc8Vkk4acoGtI6EMp4idnfQ0 BTIthDb05p8kZpd2LYut5b1xvfA87z2AUWXyBv+7TQprx+HqYl/vu1N0qblmO6vunnhq 6XMlKB+x9Nf/iysZDkE7j5JxCwX0ZVtoyNPEDyZjSXMlc7DHCIhkNKf3epgoM5NyCqOI DHuA== X-Forwarded-Encrypted: i=1; AJvYcCUZsOA3w2BEDPeTccOwL0J0Jxgvizf2eW7OGCiGSBIL/e7pmLHq/ObdxXKLBSs7aZwKxO/WzJmL1hBr7SiqkXP0ng==@vger.kernel.org, AJvYcCV7sjsVfBXWn7N2WPewjQGGH80WABBMaDbVxyENtiLpjTfAUXQUNXFsrn6bOUc3vTaX7U+RP7Je/9B1bok=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3Pe3NvDrdHQxulQRy6k57hNFLa1HmsbeyWdiVnip7wL/rKBcD UmnEmbAZT6ln+EOsK3xezd+NppULVBZ3oG0CoEu6CE9EgyDzgF57 X-Google-Smtp-Source: AGHT+IH9SmN+mw3f0MoP2XjW8DrH+FyJXhlhjjKJkEVNz2e6/WEj35Le79bQCWCPaPpxUV5PXhdSSA== X-Received: by 2002:a17:90a:c713:b0:2c8:ea7b:8891 with SMTP id 98e67ed59e1d1-2d646d26884mr5566573a91.29.1724517212985; Sat, 24 Aug 2024 09:33:32 -0700 (PDT) Received: from localhost.localdomain (104-58-203-241.lightspeed.sntcca.sbcglobal.net. [104.58.203.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d613941ee7sm6376216a91.24.2024.08.24.09.33.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Aug 2024 09:33:32 -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 v3 8/8] perf trace: Add general tests for augmented syscalls Date: Sun, 25 Aug 2024 00:33:22 +0800 Message-ID: <20240824163322.60796-9-howardchu95@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240824163322.60796-1-howardchu95@gmail.com> References: <20240824163322.60796-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: perf test "perf trace general tests" Signed-off-by: Howard Chu Suggested-by: Ian Rogers --- tools/perf/tests/shell/trace_btf_general.sh | 67 +++++++++++++++++++++ 1 file changed, 67 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..0b4ea8462390 --- /dev/null +++ b/tools/perf/tests/shell/trace_btf_general.sh @@ -0,0 +1,67 @@ +#!/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" + +trap cleanup EXIT TERM INT HUP + +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 test 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 test failed" + err=3D1 + fi +} + +trace_test_struct_btf() { + echo "Testing perf trace's struct augmentation" + if ! perf trace -e clock_nanosleep --force-btf --max-events=3D1 -- sleep= 1 2>&1 | grep -q -E ".*clock_nanosleep\(rqtp: \{1,\}, rmtp: \{1,\}\).* =3D= 0" + then + echo "BTF struct augmentation test failed" + err=3D1 + fi +} + +cleanup() { + rm -rf ${file1} ${file2} +} + +trap_cleanup() { + echo "Unexpected signal in ${FUNCNAME[1]}" + cleanup + exit 1 +} + +trace_test_string + +if [ $err =3D 0 ]; then + trace_test_buffer +fi + +if [ $err =3D 0 ]; then + trace_test_struct_btf +fi + +cleanup + +exit $err --=20 2.45.2