Re: libtraceevent + Rust

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hidenori,

On 13-02-2023 05:17, Hidenori Kobayashi wrote:
Hi Douglas,

On Fri, Oct 14, 2022 at 04:16:33PM +0100, Douglas Raillard wrote:
Hi everyone,

The idea of having some Rust interop for libtraceevent was floated during the
Tracing Summit that took place this week.

The overall work has two scopes:
     1. libtraceevent: low-level helpers to decode event formats and binary buffer pages.
     2. high level API that e.g. can consume a trace.dat file and expose an iterator API etc.

The current discussion is only about #1. The 2nd part of the work has an
entirely different set of constraints as it would aim at integrating in the
Rust ecosystem as well as possible without trying to replace anything
pre-existent.
Has anyone actually started working on these?

We have, this has been my main focus since around November.


I have a Rust tool that parses the output from trace-cmd to infer the
internal states of a kernel module. While it serves our needs for now,
Steven kindly pointed me to this thread and suggested interacting
directly with the tracefs and using the tracefs libraries for parsing.

So I'd like to know:
- if this discussion reached a consensus

You are the first one to answer on that thread but the twitter poll from Steven was encouraging. At any
rate, we need it for LISA [1] so I'm making it happen.

- if there is any publicly available work already

Yes and no: I'm currently developing it as part of LISA but in its own "traceevent" crate,
as added by that PR under tools/analysis/traceevent/:
https://github.com/ARM-software/lisa/pull/1843

This is very much WIP, so far I got:
* A parser for v6 header up to and including the event formats.
  Since that requires a C parser, it was a large chunk of the total work.
* A C interpreter as (somewhat) required for array lengths and mostly for the print fmt args.
* a zero-copy I/O layer that can load data from:
	* existing in-memory buffer
	* Any type implementing Read + Seek
	* mmap

Adding support for v7 header should be straightforward except for the I/O that might require adjustment
depending on how compression is implemented.


My current roadmap is:
1. Get to a state where I can share a trace-cmd report equivalent static tool for people to play with on
   their own data and report issues.
2. Make a serde backend hooked to it since we need it for LISA (assuming performance is good enough)
3. Figure out exactly how it sits in the libtraceevent ecosystem and maintains it in the
   long run, libtraceevent-style C bindings etc.

Note that if and when a serde backend is available, that should bring a conversion to JSON for basically free.

Unless I'm sidetracked by urgent things, 1. and 2. should become available in a few months. I expect 3. to happen
when I have something concrete to show to the world.

[1] LISA: https://github.com/ARM-software/lisa

Thanks,
Hidenori

Thanks,

Douglas



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux