GSoC Project | Basic Support for Trace Compass

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Jun 18 07:19:01 UTC 2019


On 18/06/2019 08:55, Ravindra Kumar Meena wrote:
>      > About a week ago I raised a query on decoder(source plugin) examples
>      > shared by them.
>      >
>      > They suggested that if we plan to use Babeltrace 2 plugin system,
>     the
>      > metadata file
>      > will be generated based on the trace representation given by the
>     source
>      > plugin.
>      >
>      > https://lists.lttng.org/pipermail/lttng-dev/2019-June/029057.html
>      >
>      > Please have a look
> 
>     Yes, this is why I asked about a TSDL description last week:
> 
>     https://lists.rtems.org/pipermail/devel/2019-June/026101.html
> 
>     Creating the metadata is one of the first actions a plugin must do
> 
> Okay.
> 
> I sent you one metadata file which had 1160 events. So should I add the 
> rtems 512 events in metadata?

At the moment a detailed description of individual events is not 
necessary. We have to get the basics in place first. So for now an 10 
bit event number is enough.

> 
> The problem I am facing here is how to relate the metadata file with 
> rtems event record item?

This depends on what you want to do. It seems the babeltrace plugin is a 
bit too complex to write at the moment. Maybe we should start with 
something simpler.

The record client in your rtems-tools repository does the following:

target --> TCP stream with struct rtems_record_items -> client -> 
conversion -> human readable text

We should turn this into:

target --> TCP stream with struct rtems_record_items -> client -> 
conversion -> CTF (metadata + event stream) -> files -> babeltrace -> 
human readable text

So the first thing we have to figure out is how babeltrace reads an 
arbitrary CTF session (metadata + event stream).

The next thing is to look at and modify print_item() in 
misc/record/record-main.c. In this function you get one client_item 
after another.

typedef struct client_item {
   union {
     SLIST_ENTRY( client_item ) free_node;
     RB_ENTRY( client_item )    active_node;
   };
   uint64_t                     ns;
   uint32_t                     cpu;
   rtems_record_event           event;
   uint64_t                     data;
   uint64_t                     counter;
} client_item;

We are only interested in ns, cpu, event and data. So just convert this to

typedef struct {
   uint64_t                     ns;
   uint32_t                     cpu;
   rtems_record_event           event;
   uint64_t                     data;
} ctf_event;

and append this item into a file (the event stream file). For this 
ctf_event you need a TSDL metadata. Save this metadata file.

Import the metadata and event stream in babeltrace and let it print a 
human readable form.

Does this look like something you can do?

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


More information about the devel mailing list