[lttng-dev] Explicit setting of UUID with ctf writer

Rocky Dunlap rsdunlapiv at gmail.com
Fri Apr 7 22:07:57 UTC 2017


Phil,

Not sure about your release policy, but would it be possible to have a
1.5.3 release with a new API to set the trace uuid?

Rocky

On Fri, Apr 7, 2017 at 4:02 PM, Rocky Dunlap <rsdunlapiv at gmail.com> wrote:

> Phil,
>
> Thanks very much for your suggestion.  I tried it and it does work exactly
> as you say, but I agree it is a bit ugly and non-portable. It is nice to
> have a temporary option while awaiting babeltrace 2.0.
>
> Using the command line to combine traces is perhaps the cleaner option.
> However, it does not appear that I can output in CTF format with this
> version:
>
> $ babeltrace -w combined -o ctf PET1 PET2
> [error] Only CTF traces with a single clock description are supported by
> this babeltrace version.
> [error] Opening CTF traces for output is not supported yet.
> Error opening trace "combined" for writing.
>
> Thanks,
> Rocky
>
> On Fri, Apr 7, 2017 at 3:03 PM, Philippe Proulx <eeppeliteloop at gmail.com>
> wrote:
>
>> On Fri, Apr 7, 2017 at 4:15 PM, Rocky Dunlap <rsdunlapiv at gmail.com>
>> wrote:
>> > Phil,
>> >
>> > This relates to my previous question about multi-process tracing. The
>> > workaround I am attempting is to have each process write its own trace
>> with
>> > a single stream, but then to pull all the stream files together into a
>> > single trace with one metadata file. For this reason the uuids would
>> need to
>> > match.
>> >
>> > Do you think this will work?
>>
>> First question: why not having multiple traces (multiple directories
>> with multiple `metadata` files)? babeltrace(1) and Trace Compass can
>> merge them easily.
>>
>> In the meantime, if you really want a single trace, here's a hack.
>> Please don't tell anyone that I suggested this. Choose any generated
>> `metadata` file which contains all the `event` blocks that you need.
>> Note that, across all your traces, the order in which you add the event
>> class objects to your single stream class object needs to remain the
>> same so that they have the same IDs whatever the trace. Then, this
>> works, as long as you use the Babeltrace 1.5.2 release:
>>
>>     #include <babeltrace/ctf-writer/writer.h>
>>     #include <string.h>
>>     #include <assert.h>
>>
>>     typedef unsigned char uuid_t[16];
>>
>>     struct bt_ref {
>>         long count;
>>         void *release;
>>     };
>>
>>     struct bt_object {
>>         struct bt_ref ref_count;
>>         void *release;
>>         void *parent;
>>     };
>>
>>     struct bt_ctf_trace {
>>         struct bt_object base;
>>         int frozen;
>>         unsigned char uuid[16];
>>     };
>>
>>     struct bt_ctf_writer {
>>         struct bt_object base;
>>         int frozen;
>>         struct bt_ctf_trace *trace;
>>     };
>>
>>     int main(void)
>>     {
>>         struct bt_ctf_writer *writer;
>>         const unsigned char my_custom_uuid[16] = {
>>             0xb3, 0x38, 0x4d, 0x7b, 0x77, 0x8a, 0x4f, 0xf0,
>>             0x99, 0xbd, 0x43, 0x54, 0x9e, 0xc0, 0x54, 0x1b,
>>         };
>>
>>         writer = bt_ctf_writer_create("/tmp/my-trace");
>>         assert(writer);
>>         memcpy(writer->trace->uuid, my_custom_uuid, 16);
>>
>>         /* do stuff with writer here */
>>
>>         bt_ctf_writer_put(writer);
>>         return 0;
>>     }
>>
>> Again, I don't condone this: it's not portable, it's ugly, but it does
>> what you ask.
>>
>> Another hack: search the byte sequences c1 fc 1f c1 (big endian) or
>> c1 1f fc c1 (little endian) in all your stream files and replace the
>> _next_ 16 bytes with your favorite UUID. Also replace the `uuid`
>> attribute in the chosen `metadata` file with the canonical
>> representation of your favorite UUID.
>>
>> Phil
>>
>> >
>> > Rocky
>> >
>> > On Apr 7, 2017 1:57 PM, "Philippe Proulx" <eeppeliteloop at gmail.com>
>> wrote:
>> >>
>> >> On Fri, Apr 7, 2017 at 3:18 PM, Rocky Dunlap <rsdunlapiv at gmail.com>
>> wrote:
>> >> > Is it possible to explicitly set a uuid for a trace using the
>> Babeltrace
>> >> > CTF
>> >> > writer?  I did not see a straightforward way to do it with the API.
>> >>
>> >> It's not possible as of Babeltrace 1. We'll add trace UUID accessors to
>> >> the upcoming Babeltrace 2 API.
>> >>
>> >> That said, may I ask you why you need this? Two different CTF traces
>> >> should not share the same UUID.
>> >>
>> >> Phil
>> >>
>> >> >
>> >> > Rocky
>> >> >
>> >> > _______________________________________________
>> >> > lttng-dev mailing list
>> >> > lttng-dev at lists.lttng.org
>> >> > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>> >> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20170407/2027e062/attachment.html>


More information about the lttng-dev mailing list