* [PATCH v1 1/4] perf header: In pipe mode dump features without --header/-I
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
@ 2025-06-07 6:12 ` Ian Rogers
2025-06-07 6:12 ` [PATCH v1 2/4] perf header: Allow tracing of attr events Ian Rogers
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Ian Rogers @ 2025-06-07 6:12 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, James Clark, Zhongqiu Han,
Yicong Yang, linux-perf-users, linux-kernel, bpf
In pipe mode the header features are contained within events. While
other events dump details the header features only dump if --header or
-I are passed, which doesn't make sense as in pipe mode there is no
perf file header. Make the printing of the information conditional on
dump_trace as with other events.
Before:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE
```
After:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE, # perf version : 6.15.rc7.gad2a691c99fb
```
Signed-off-by: Ian Rogers <irogers@google.com>
---
| 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
--git a/tools/perf/util/header.c b/tools/perf/util/header.c
index e3cdc3b7b4ab..84879d7fdffe 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -4341,7 +4341,6 @@ int perf_session__read_header(struct perf_session *session)
int perf_event__process_feature(struct perf_session *session,
union perf_event *event)
{
- const struct perf_tool *tool = session->tool;
struct feat_fd ff = { .fd = 0 };
struct perf_record_header_feature *fe = (struct perf_record_header_feature *)event;
int type = fe->header.type;
@@ -4357,28 +4356,23 @@ int perf_event__process_feature(struct perf_session *session,
return -1;
}
- if (!feat_ops[feat].process)
- return 0;
-
ff.buf = (void *)fe->data;
ff.size = event->header.size - sizeof(*fe);
ff.ph = &session->header;
- if (feat_ops[feat].process(&ff, NULL)) {
+ if (feat_ops[feat].process && feat_ops[feat].process(&ff, NULL)) {
ret = -1;
goto out;
}
- if (!feat_ops[feat].print || !tool->show_feat_hdr)
- goto out;
-
- if (!feat_ops[feat].full_only ||
- tool->show_feat_hdr >= SHOW_FEAT_HEADER_FULL_INFO) {
- feat_ops[feat].print(&ff, stdout);
- } else {
- fprintf(stdout, "# %s info available, use -I to display\n",
- feat_ops[feat].name);
+ if (dump_trace) {
+ printf(", ");
+ if (feat_ops[feat].print)
+ feat_ops[feat].print(&ff, stdout);
+ else
+ printf("# %s", feat_ops[feat].name);
}
+
out:
free_event_desc(ff.events);
return ret;
--
2.50.0.rc0.604.gd4ff7b7c86-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v1 2/4] perf header: Allow tracing of attr events
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
2025-06-07 6:12 ` [PATCH v1 1/4] perf header: In pipe mode dump features without --header/-I Ian Rogers
@ 2025-06-07 6:12 ` Ian Rogers
2025-06-07 6:12 ` [PATCH v1 3/4] perf header: Display message if BPF/BTF info is empty Ian Rogers
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Ian Rogers @ 2025-06-07 6:12 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, James Clark, Zhongqiu Han,
Yicong Yang, linux-perf-users, linux-kernel, bpf
In pipe mode attr events capture the perf_event_attr. Allow their
dumping as they normally start the file.
Before:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
. ... raw event: size 272 bytes
. 0000: 40 00 00 00 00 00 10 01 00 00 00 00 88 00 00 00 @...............
. 0010: 00 00 00 00 00 00 00 00 a0 0f 00 00 00 00 00 00 ................
. 0020: 87 01 01 00 00 00 00 00 14 00 00 00 00 00 00 00 ................
. 0030: 01 84 05 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0090: 91 08 00 00 00 00 00 00 92 08 00 00 00 00 00 00 ................
. 00a0: 93 08 00 00 00 00 00 00 94 08 00 00 00 00 00 00 ................
. 00b0: 95 08 00 00 00 00 00 00 96 08 00 00 00 00 00 00 ................
. 00c0: 97 08 00 00 00 00 00 00 98 08 00 00 00 00 00 00 ................
. 00d0: 99 08 00 00 00 00 00 00 9a 08 00 00 00 00 00 00 ................
. 00e0: 9b 08 00 00 00 00 00 00 9c 08 00 00 00 00 00 00 ................
. 00f0: 9d 08 00 00 00 00 00 00 9e 08 00 00 00 00 00 00 ................
. 0100: 9f 08 00 00 00 00 00 00 a0 08 00 00 00 00 00 00 ................
-1 -1 0 [0x110]: PERF_RECORD_ATTR
0x110@pipe [0x110]: event: 64
...
```
After:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
0@pipe [0x110]: event: 64
.
. ... raw event: size 272 bytes
. 0000: 40 00 00 00 00 00 10 01 00 00 00 00 88 00 00 00 @...............
. 0010: 00 00 00 00 00 00 00 00 a0 0f 00 00 00 00 00 00 ................
. 0020: 87 01 01 00 00 00 00 00 14 00 00 00 00 00 00 00 ................
. 0030: 01 84 05 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0090: 5c 08 00 00 00 00 00 00 5d 08 00 00 00 00 00 00 \.......].......
. 00a0: 5e 08 00 00 00 00 00 00 5f 08 00 00 00 00 00 00 ^......._.......
. 00b0: 60 08 00 00 00 00 00 00 61 08 00 00 00 00 00 00 `.......a.......
. 00c0: 62 08 00 00 00 00 00 00 63 08 00 00 00 00 00 00 b.......c.......
. 00d0: 64 08 00 00 00 00 00 00 65 08 00 00 00 00 00 00 d.......e.......
. 00e0: 66 08 00 00 00 00 00 00 67 08 00 00 00 00 00 00 f.......g.......
. 00f0: 68 08 00 00 00 00 00 00 69 08 00 00 00 00 00 00 h.......i.......
. 0100: 6a 08 00 00 00 00 00 00 6b 08 00 00 00 00 00 00 j.......k.......
-1 -1 0 [0x110]: PERF_RECORD_ATTR, type = 0 (PERF_TYPE_HARDWARE), size = 136, config = 0 (PERF_COUNT_HW_CPU_CYCLES), { sample_period, sample_freq } = 4000, sample_type = IP|TID|TIME|CPU|PERIOD|IDENTIFIER, read_format = ID|LOST, disabled = 1, freq = 1, precise_ip = 3, sample_id_all = 1
0x110@pipe [0x110]: event: 64
...
```
Signed-off-by: Ian Rogers <irogers@google.com>
---
| 8 ++++++++
| 1 +
2 files changed, 9 insertions(+)
--git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 84879d7fdffe..7798435ab5d3 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -4414,6 +4414,11 @@ size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp)
return ret;
}
+size_t perf_event__fprintf_attr(union perf_event *event, FILE *fp)
+{
+ return perf_event_attr__fprintf(fp, &event->attr.attr, __desc_attr__fprintf, NULL);
+}
+
int perf_event__process_attr(const struct perf_tool *tool __maybe_unused,
union perf_event *event,
struct evlist **pevlist)
@@ -4423,6 +4428,9 @@ int perf_event__process_attr(const struct perf_tool *tool __maybe_unused,
struct evsel *evsel;
struct evlist *evlist = *pevlist;
+ if (dump_trace)
+ perf_event__fprintf_attr(event, stdout);
+
if (evlist == NULL) {
*pevlist = evlist = evlist__new();
if (evlist == NULL)
--git a/tools/perf/util/header.h b/tools/perf/util/header.h
index 5201af6305f4..d16dfceccd74 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -175,6 +175,7 @@ int perf_event__process_attr(const struct perf_tool *tool, union perf_event *eve
int perf_event__process_event_update(const struct perf_tool *tool,
union perf_event *event,
struct evlist **pevlist);
+size_t perf_event__fprintf_attr(union perf_event *event, FILE *fp);
size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp);
#ifdef HAVE_LIBTRACEEVENT
int perf_event__process_tracing_data(struct perf_session *session,
--
2.50.0.rc0.604.gd4ff7b7c86-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v1 3/4] perf header: Display message if BPF/BTF info is empty
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
2025-06-07 6:12 ` [PATCH v1 1/4] perf header: In pipe mode dump features without --header/-I Ian Rogers
2025-06-07 6:12 ` [PATCH v1 2/4] perf header: Allow tracing of attr events Ian Rogers
@ 2025-06-07 6:12 ` Ian Rogers
2025-06-07 6:12 ` [PATCH v1 4/4] perf header: Don't write empty BPF/BTF info Ian Rogers
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Ian Rogers @ 2025-06-07 6:12 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, James Clark, Zhongqiu Han,
Yicong Yang, linux-perf-users, linux-kernel, bpf
The perf.data file may contain a bpf_prog_info or bpf_btf feature. If
the contents of these are empty then nothing is displayed. Rather than
display nothing and not account for the file space, display an empty
message.
Signed-off-by: Ian Rogers <irogers@google.com>
---
| 6 ++++++
1 file changed, 6 insertions(+)
--git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 7798435ab5d3..69e4f6aae293 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -1814,6 +1814,9 @@ static void print_bpf_prog_info(struct feat_fd *ff, FILE *fp)
root = &env->bpf_progs.infos;
next = rb_first(root);
+ if (!next)
+ printf("# bpf_prog_info empty\n");
+
while (next) {
struct bpf_prog_info_node *node;
@@ -1838,6 +1841,9 @@ static void print_bpf_btf(struct feat_fd *ff, FILE *fp)
root = &env->bpf_progs.btfs;
next = rb_first(root);
+ if (!next)
+ printf("# btf info empty\n");
+
while (next) {
struct btf_node *node;
--
2.50.0.rc0.604.gd4ff7b7c86-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v1 4/4] perf header: Don't write empty BPF/BTF info
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
` (2 preceding siblings ...)
2025-06-07 6:12 ` [PATCH v1 3/4] perf header: Display message if BPF/BTF info is empty Ian Rogers
@ 2025-06-07 6:12 ` Ian Rogers
2025-06-24 19:11 ` [PATCH v1 0/4] Pipe mode header dumping and minor space saving Namhyung Kim
2025-06-26 17:41 ` Namhyung Kim
5 siblings, 0 replies; 9+ messages in thread
From: Ian Rogers @ 2025-06-07 6:12 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, James Clark, Zhongqiu Han,
Yicong Yang, linux-perf-users, linux-kernel, bpf
If there are no values in bpf_prog_info or bpf_btf feature don't write
the data into the header.
Signed-off-by: Ian Rogers <irogers@google.com>
---
| 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
--git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 69e4f6aae293..6657b02d4a81 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -1016,10 +1016,13 @@ static int write_bpf_prog_info(struct feat_fd *ff,
struct perf_env *env = &ff->ph->env;
struct rb_root *root;
struct rb_node *next;
- int ret;
+ int ret = 0;
down_read(&env->bpf_progs.lock);
+ if (env->bpf_progs.infos_cnt == 0)
+ goto out;
+
ret = do_write(ff, &env->bpf_progs.infos_cnt,
sizeof(env->bpf_progs.infos_cnt));
if (ret < 0)
@@ -1058,10 +1061,13 @@ static int write_bpf_btf(struct feat_fd *ff,
struct perf_env *env = &ff->ph->env;
struct rb_root *root;
struct rb_node *next;
- int ret;
+ int ret = 0;
down_read(&env->bpf_progs.lock);
+ if (env->bpf_progs.btfs_cnt == 0)
+ goto out;
+
ret = do_write(ff, &env->bpf_progs.btfs_cnt,
sizeof(env->bpf_progs.btfs_cnt));
--
2.50.0.rc0.604.gd4ff7b7c86-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v1 0/4] Pipe mode header dumping and minor space saving
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
` (3 preceding siblings ...)
2025-06-07 6:12 ` [PATCH v1 4/4] perf header: Don't write empty BPF/BTF info Ian Rogers
@ 2025-06-24 19:11 ` Namhyung Kim
2025-06-24 20:15 ` Ian Rogers
2025-06-26 17:41 ` Namhyung Kim
5 siblings, 1 reply; 9+ messages in thread
From: Namhyung Kim @ 2025-06-24 19:11 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
Kan Liang, James Clark, Zhongqiu Han, Yicong Yang,
linux-perf-users, linux-kernel, bpf
On Fri, Jun 06, 2025 at 11:12:34PM -0700, Ian Rogers wrote:
> Pipe mode has no header and emits the data as if it were events. The
> dumping of features was controlled by the --header/-I options which
> makes little sense when they are events, normally traced when
> dump_trace is true. Switch to making pipe feature events also be
> traced with detail when other events are.
I'm not sure I'm following. Are you saying the pipe mode doesn't
support features with --header/-I option?
It seems to work for me.
$ git show
commit be59dba332e1e8edd3e88d991ba0e4795ae2bcb2 (HEAD -> perf-testing)
Author: Ian Rogers <irogers@google.com>
Date: Tue Jun 17 15:33:56 2025 -0700
libperf evsel: Add missed puts and asserts
A missed evsel__close before evsel__delete was the source of leaking
perf events due to a hybrid test. Add asserts in debug builds so that
this shouldn't happen in the future. Add puts missing on the cpu map
and thread maps.
Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250617223356.2752099-4-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
$ ./perf version
perf version 6.16.rc3.gbe59dba332e1
$ ./perf record -o- true | ./perf report -i- --header-only
# ========
# captured on : Tue Jun 24 12:06:38 2025
# header version : 1
# data offset : 0
# data size : 0
# feat offset : 0
# ========
#
# hostname : bangji
# os release : 6.12.20-1rodete1-amd64
# perf version : 6.16.rc3.gbe59dba332e1
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 8
# cpudesc : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
# cpuid : GenuineIntel,6,140,1
# total memory : 32566540 kB
# cmdline : /home/namhyung/project/linux/tools/perf/perf record -o- true
# event : name = cycles:P, , id = { 369, 370, 371, 372 }, type = 0 (PERF_TYPE_HARDWARE), ...
# CPU_TOPOLOGY info available, use -I to display
# NUMA_TOPOLOGY info available, use -I to display
# pmu mappings: cpu = 4, breakpoint = 5, cstate_core = 22, cstate_pkg = 23, hwmon_acpitz = 4294901760, ...
# time of first sample : 0.000000
# time of last sample : 0.000000
# sample duration : 0.000 ms
# MEM_TOPOLOGY info available, use -I to display
# cpu pmu capabilities: branches=32, max_precise=3, pmu_name=icelake
# intel_pt pmu capabilities: topa_multiple_entries=1, psb_cyc=1, single_range_output=1, ...
>
> The attr event in pipe mode had no dumping, wire this up and use the
> existing perf_event_attr fprintf support.
>
> The header's bpf_prog_info or bpf_btf may be empty when written. If
> they are empty just skip writing them to save space.
These look good to me.
Thanks,
Namhyung
>
> Ian Rogers (4):
> perf header: In pipe mode dump features without --header/-I
> perf header: Allow tracing of attr events
> perf header: Display message if BPF/BTF info is empty
> perf header: Don't write empty BPF/BTF info
>
> tools/perf/util/header.c | 46 ++++++++++++++++++++++++++--------------
> tools/perf/util/header.h | 1 +
> 2 files changed, 31 insertions(+), 16 deletions(-)
>
> --
> 2.50.0.rc0.604.gd4ff7b7c86-goog
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH v1 0/4] Pipe mode header dumping and minor space saving
2025-06-24 19:11 ` [PATCH v1 0/4] Pipe mode header dumping and minor space saving Namhyung Kim
@ 2025-06-24 20:15 ` Ian Rogers
2025-06-25 17:40 ` Namhyung Kim
0 siblings, 1 reply; 9+ messages in thread
From: Ian Rogers @ 2025-06-24 20:15 UTC (permalink / raw)
To: Namhyung Kim
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
Kan Liang, James Clark, Zhongqiu Han, Yicong Yang,
linux-perf-users, linux-kernel, bpf
On Tue, Jun 24, 2025 at 12:11 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> On Fri, Jun 06, 2025 at 11:12:34PM -0700, Ian Rogers wrote:
> > Pipe mode has no header and emits the data as if it were events. The
> > dumping of features was controlled by the --header/-I options which
> > makes little sense when they are events, normally traced when
> > dump_trace is true. Switch to making pipe feature events also be
> > traced with detail when other events are.
>
> I'm not sure I'm following. Are you saying the pipe mode doesn't
> support features with --header/-I option?
No, in pipe mode it currently shows just PERF_RECORD_FEATURE or
PERF_RECORD_ATTR for the details of the events containing these
things. The reason being that the dumping is controlled by separate
header flags (--header and -I). In patch 1 the commit message shows
the before:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE
```
That is we have a feature "event" but there are no details there to
try to be able to understand the feature event. After the change this
becomes:
```
$ perf record -o - -a sleep 1 | perf script -D -i -
...
0x2c8@pipe [0x54]: event: 80
.
. ... raw event: size 84 bytes
. 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
. 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
. 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
. 0050: 00 00 00 00 ....
0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE, # perf version : 6.15.rc7.gad2a691c99fb
```
So now in the dump trace output I can see this was a feature for perf
version and what that value is. There are often multiple
PERF_RECORD_FEATURE and PERF_RECORD_ATTR "events" and so the extra
trace output helps in being able to work out what's going on.
Thanks,
Ian
> It seems to work for me.
>
> $ git show
> commit be59dba332e1e8edd3e88d991ba0e4795ae2bcb2 (HEAD -> perf-testing)
> Author: Ian Rogers <irogers@google.com>
> Date: Tue Jun 17 15:33:56 2025 -0700
>
> libperf evsel: Add missed puts and asserts
>
> A missed evsel__close before evsel__delete was the source of leaking
> perf events due to a hybrid test. Add asserts in debug builds so that
> this shouldn't happen in the future. Add puts missing on the cpu map
> and thread maps.
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> Link: https://lore.kernel.org/r/20250617223356.2752099-4-irogers@google.com
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
>
> $ ./perf version
> perf version 6.16.rc3.gbe59dba332e1
>
> $ ./perf record -o- true | ./perf report -i- --header-only
> # ========
> # captured on : Tue Jun 24 12:06:38 2025
> # header version : 1
> # data offset : 0
> # data size : 0
> # feat offset : 0
> # ========
> #
> # hostname : bangji
> # os release : 6.12.20-1rodete1-amd64
> # perf version : 6.16.rc3.gbe59dba332e1
> # arch : x86_64
> # nrcpus online : 4
> # nrcpus avail : 8
> # cpudesc : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
> # cpuid : GenuineIntel,6,140,1
> # total memory : 32566540 kB
> # cmdline : /home/namhyung/project/linux/tools/perf/perf record -o- true
> # event : name = cycles:P, , id = { 369, 370, 371, 372 }, type = 0 (PERF_TYPE_HARDWARE), ...
> # CPU_TOPOLOGY info available, use -I to display
> # NUMA_TOPOLOGY info available, use -I to display
> # pmu mappings: cpu = 4, breakpoint = 5, cstate_core = 22, cstate_pkg = 23, hwmon_acpitz = 4294901760, ...
> # time of first sample : 0.000000
> # time of last sample : 0.000000
> # sample duration : 0.000 ms
> # MEM_TOPOLOGY info available, use -I to display
> # cpu pmu capabilities: branches=32, max_precise=3, pmu_name=icelake
> # intel_pt pmu capabilities: topa_multiple_entries=1, psb_cyc=1, single_range_output=1, ...
>
> >
> > The attr event in pipe mode had no dumping, wire this up and use the
> > existing perf_event_attr fprintf support.
> >
> > The header's bpf_prog_info or bpf_btf may be empty when written. If
> > they are empty just skip writing them to save space.
>
> These look good to me.
>
> Thanks,
> Namhyung
>
> >
> > Ian Rogers (4):
> > perf header: In pipe mode dump features without --header/-I
> > perf header: Allow tracing of attr events
> > perf header: Display message if BPF/BTF info is empty
> > perf header: Don't write empty BPF/BTF info
> >
> > tools/perf/util/header.c | 46 ++++++++++++++++++++++++++--------------
> > tools/perf/util/header.h | 1 +
> > 2 files changed, 31 insertions(+), 16 deletions(-)
> >
> > --
> > 2.50.0.rc0.604.gd4ff7b7c86-goog
> >
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH v1 0/4] Pipe mode header dumping and minor space saving
2025-06-24 20:15 ` Ian Rogers
@ 2025-06-25 17:40 ` Namhyung Kim
0 siblings, 0 replies; 9+ messages in thread
From: Namhyung Kim @ 2025-06-25 17:40 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
Kan Liang, James Clark, Zhongqiu Han, Yicong Yang,
linux-perf-users, linux-kernel, bpf
On Tue, Jun 24, 2025 at 01:15:13PM -0700, Ian Rogers wrote:
> On Tue, Jun 24, 2025 at 12:11 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > On Fri, Jun 06, 2025 at 11:12:34PM -0700, Ian Rogers wrote:
> > > Pipe mode has no header and emits the data as if it were events. The
> > > dumping of features was controlled by the --header/-I options which
> > > makes little sense when they are events, normally traced when
> > > dump_trace is true. Switch to making pipe feature events also be
> > > traced with detail when other events are.
> >
> > I'm not sure I'm following. Are you saying the pipe mode doesn't
> > support features with --header/-I option?
>
> No, in pipe mode it currently shows just PERF_RECORD_FEATURE or
> PERF_RECORD_ATTR for the details of the events containing these
> things. The reason being that the dumping is controlled by separate
> header flags (--header and -I). In patch 1 the commit message shows
> the before:
> ```
> $ perf record -o - -a sleep 1 | perf script -D -i -
> ...
> 0x2c8@pipe [0x54]: event: 80
> .
> . ... raw event: size 84 bytes
> . 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
> . 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
> . 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
> . 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
> . 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
> . 0050: 00 00 00 00 ....
>
> 0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE
> ```
>
> That is we have a feature "event" but there are no details there to
> try to be able to understand the feature event. After the change this
> becomes:
> ```
> $ perf record -o - -a sleep 1 | perf script -D -i -
> ...
> 0x2c8@pipe [0x54]: event: 80
> .
> . ... raw event: size 84 bytes
> . 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T.........
> . 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad
> . 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb......
> . 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
> . 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
> . 0050: 00 00 00 00 ....
>
> 0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE, # perf version : 6.15.rc7.gad2a691c99fb
> ```
>
> So now in the dump trace output I can see this was a feature for perf
> version and what that value is. There are often multiple
> PERF_RECORD_FEATURE and PERF_RECORD_ATTR "events" and so the extra
> trace output helps in being able to work out what's going on.
Thanks for the clarification, I was confused if it's fixing -I or -D. :)
Namhyung
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v1 0/4] Pipe mode header dumping and minor space saving
2025-06-07 6:12 [PATCH v1 0/4] Pipe mode header dumping and minor space saving Ian Rogers
` (4 preceding siblings ...)
2025-06-24 19:11 ` [PATCH v1 0/4] Pipe mode header dumping and minor space saving Namhyung Kim
@ 2025-06-26 17:41 ` Namhyung Kim
5 siblings, 0 replies; 9+ messages in thread
From: Namhyung Kim @ 2025-06-26 17:41 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
Kan Liang, James Clark, Zhongqiu Han, Yicong Yang,
linux-perf-users, linux-kernel, bpf, Ian Rogers
On Fri, 06 Jun 2025 23:12:34 -0700, Ian Rogers wrote:
> Pipe mode has no header and emits the data as if it were events. The
> dumping of features was controlled by the --header/-I options which
> makes little sense when they are events, normally traced when
> dump_trace is true. Switch to making pipe feature events also be
> traced with detail when other events are.
>
> The attr event in pipe mode had no dumping, wire this up and use the
> existing perf_event_attr fprintf support.
>
> [...]
Applied to perf-tools-next, thanks!
Best regards,
Namhyung
^ permalink raw reply [flat|nested] 9+ messages in thread