* libtracecmd API extensions
@ 2025-11-20 12:24 MOESSBAUER, Felix
2025-11-20 18:08 ` Steven Rostedt
0 siblings, 1 reply; 3+ messages in thread
From: MOESSBAUER, Felix @ 2025-11-20 12:24 UTC (permalink / raw)
To: linux-trace-devel@vger.kernel.org; +Cc: Kiszka, Jan
Dear Tracers,
while developing a kernel ftrace to Common Trace Format (CTF) converter
[1], I noticed a couple of aspects of the libtracecmd API I would like
to discuss. In general, I am VERY happy with the libtracefs,
libtraceevent and libtracecmd API. These are great libraries which
really helped to get this implemented easily.
Trace clocks:
- Information about the used trace clock is available in the trace.dat,
however there is no public API to extract it
- A trace clock (e.g. mono) to world-clock snapshot could be added to
the trace.dat to more easily align the trace with other traces
Metadata:
- some metadata (like uname) is already included in the trace.dat,
however the APIs to retrieve it are private: tracecmd_get_uname
- further metadata like a full "uname -a" output and /proc/cmdline
would be helpful
Event time ranges:
- it would be good to have an API to get the first and last event
timestamp per CPU (I'm currently fully walking the events to get that
data)
PS:
We are also looking into writing a converter in the opposite direction
(i.e. CTF -> ftrace binary format / trace.dat), but it looks like the
libtraceevent is a pure parsing library and cannot be used for
synthesizing. Is this true, or did I miss something?
[1] https://github.com/siemens/bt2-ftrace-to-ctf
Best regards,
Felix Moessbauer
--
Siemens AG
Linux Expert Center
Friedrich-Ludwig-Bauer-Str. 3
85748 Garching, Germany
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: libtracecmd API extensions
2025-11-20 12:24 libtracecmd API extensions MOESSBAUER, Felix
@ 2025-11-20 18:08 ` Steven Rostedt
2025-11-21 10:56 ` MOESSBAUER, Felix
0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2025-11-20 18:08 UTC (permalink / raw)
To: MOESSBAUER, Felix; +Cc: linux-trace-devel@vger.kernel.org, Kiszka, Jan
On Thu, 20 Nov 2025 12:24:18 +0000
"MOESSBAUER, Felix" <felix.moessbauer@siemens.com> wrote:
> Dear Tracers,
Hello!
>
> while developing a kernel ftrace to Common Trace Format (CTF) converter
> [1], I noticed a couple of aspects of the libtracecmd API I would like
> to discuss. In general, I am VERY happy with the libtracefs,
> libtraceevent and libtracecmd API. These are great libraries which
> really helped to get this implemented easily.
>
> Trace clocks:
>
> - Information about the used trace clock is available in the trace.dat,
> however there is no public API to extract it
> - A trace clock (e.g. mono) to world-clock snapshot could be added to
> the trace.dat to more easily align the trace with other traces
>
> Metadata:
>
> - some metadata (like uname) is already included in the trace.dat,
> however the APIs to retrieve it are private: tracecmd_get_uname
> - further metadata like a full "uname -a" output and /proc/cmdline
> would be helpful
So, libtracecmd is still very much a work in progress, of something I never
seem to have the time to work on :-p I don't want to make the mistake I
made with libtraceevent, and have APIs exposed before they are ready. I hate
most of the libtraceevent APIs, but that's because it was ported over to
perf before it was complete, and we got stuck with what we have.
libtracefs was much more planned, and has a better API because of that.
I have lots of ideas for libtracecmd. In fact, the goal is to make
trace-cmd a simple shell of the library, and have every feature of
trace-cmd exposed to other tools. Unfortunately, I just don't have the time
to work on it.
Hence, if you want to add these APIs, I'm more than happy to review any
patches you send my way!
>
> Event time ranges:
>
> - it would be good to have an API to get the first and last event
> timestamp per CPU (I'm currently fully walking the events to get that
> data)
Hmm, I could have sworn I implemented something like this in the past.
Perhaps I only did it to my local tree. I have lots of updates to trace-cmd
that haven't made it out to public (simply because they are still in debug
form).
There is a way to iterate backwards:
tracecmd_iterate_events_reverse()
That would give you the last event without walking all events.
>
> PS:
> We are also looking into writing a converter in the opposite direction
> (i.e. CTF -> ftrace binary format / trace.dat), but it looks like the
> libtraceevent is a pure parsing library and cannot be used for
> synthesizing. Is this true, or did I miss something?
>
Yeah, libtraceevent was made to be purely parsing. In fact, there was an
effort to convert it over to flex/bison. But again, time ran out.
That said, if you want to add a feature to create formats, that could
definitely be added.
Cheers,
-- Steve
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: libtracecmd API extensions
2025-11-20 18:08 ` Steven Rostedt
@ 2025-11-21 10:56 ` MOESSBAUER, Felix
0 siblings, 0 replies; 3+ messages in thread
From: MOESSBAUER, Felix @ 2025-11-21 10:56 UTC (permalink / raw)
To: rostedt@goodmis.org; +Cc: Kiszka, Jan, linux-trace-devel@vger.kernel.org
On Thu, 2025-11-20 at 13:08 -0500, Steven Rostedt wrote:
> On Thu, 20 Nov 2025 12:24:18 +0000
> "MOESSBAUER, Felix" <felix.moessbauer@siemens.com> wrote:
>
> > Dear Tracers,
>
> Hello!
>
> >
> > while developing a kernel ftrace to Common Trace Format (CTF) converter
> > [1], I noticed a couple of aspects of the libtracecmd API I would like
> > to discuss. In general, I am VERY happy with the libtracefs,
> > libtraceevent and libtracecmd API. These are great libraries which
> > really helped to get this implemented easily.
> >
> > Trace clocks:
> >
> > - Information about the used trace clock is available in the trace.dat,
> > however there is no public API to extract it
> > - A trace clock (e.g. mono) to world-clock snapshot could be added to
> > the trace.dat to more easily align the trace with other traces
> >
> > Metadata:
> >
> > - some metadata (like uname) is already included in the trace.dat,
> > however the APIs to retrieve it are private: tracecmd_get_uname
> > - further metadata like a full "uname -a" output and /proc/cmdline
> > would be helpful
>
> So, libtracecmd is still very much a work in progress, of something I never
> seem to have the time to work on :-p I don't want to make the mistake I
> made with libtraceevent, and have APIs exposed before they are ready. I hate
> most of the libtraceevent APIs, but that's because it was ported over to
> perf before it was complete, and we got stuck with what we have.
>
> libtracefs was much more planned, and has a better API because of that.
>
> I have lots of ideas for libtracecmd. In fact, the goal is to make
> trace-cmd a simple shell of the library, and have every feature of
> trace-cmd exposed to other tools. Unfortunately, I just don't have the time
> to work on it.
Yes, that would be exactly what we need.
>
> Hence, if you want to add these APIs, I'm more than happy to review any
> patches you send my way!
I'll send patches to the ML.
>
> >
> > Event time ranges:
> >
> > - it would be good to have an API to get the first and last event
> > timestamp per CPU (I'm currently fully walking the events to get that
> > data)
>
> Hmm, I could have sworn I implemented something like this in the past.
> Perhaps I only did it to my local tree. I have lots of updates to trace-cmd
> that haven't made it out to public (simply because they are still in debug
> form).
>
> There is a way to iterate backwards:
>
> tracecmd_iterate_events_reverse()
>
> That would give you the last event without walking all events.
I just tried it and in principle it should work, just two things:
1. the interface was just recently added (3.3, so that's too new for
bookworm)
2. we leak one record per CPU when not fully iterating (i.e. when
returning != 0 from the callback). This leak unfortunately generates
output which I must not have.
I still don't fully understand why we leak, but it is somewhere around
this location:
https://github.com/rostedt/trace-cmd/blame/364faec474e4e4e0236c21af8927186e0e214e7f/lib/trace-cmd/trace-input.c#L3060
The corresponding valgrind callstack looks like this:
-snip-
==1497610== 1,024 bytes in 16 blocks are definitely lost in loss record
241 of 249
==1497610== at 0x4883BA3: calloc (vg_replace_malloc.c:1675)
==1497610== by 0x5D139F4: allocate_page (trace-input.c:1574)
==1497610== by 0x5D14C8A: get_page (trace-input.c:1891)
==1497610== by 0x5D17882: load_records (trace-input.c:2897)
==1497610== by 0x5D19CD6: initialize_last_events (trace-
input.c:2957)
==1497610== by 0x5D19CD6: tracecmd_iterate_events_reverse (trace-
input.c:3036)
-snip-
>
> >
> > PS:
> > We are also looking into writing a converter in the opposite direction
> > (i.e. CTF -> ftrace binary format / trace.dat), but it looks like the
> > libtraceevent is a pure parsing library and cannot be used for
> > synthesizing. Is this true, or did I miss something?
> >
>
> Yeah, libtraceevent was made to be purely parsing. In fact, there was an
> effort to convert it over to flex/bison. But again, time ran out.
That's reasonable. Having the CTF to ftrace way is also not of highest
priority for us, but it would help our Xenomai users to view combined
traces in the kernelshark, as they already have custom plugins for the
visualization.
>
> That said, if you want to add a feature to create formats, that could
> definitely be added.
Good to know. I'll have a deeper look what exactly we need.
Cheers!
Felix
>
> Cheers,
>
> -- Steve
--
Siemens AG
Linux Expert Center
Friedrich-Ludwig-Bauer-Str. 3
85748 Garching, Germany
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-21 10:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-20 12:24 libtracecmd API extensions MOESSBAUER, Felix
2025-11-20 18:08 ` Steven Rostedt
2025-11-21 10:56 ` MOESSBAUER, Felix
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).