[lttng-dev] sdt.h tracepoints with unicode data and/or structs

Milian Wolff milian.wolff at kdab.com
Mon Sep 12 15:40:09 UTC 2016


On Monday, September 12, 2016 3:03:04 PM CEST Mathieu Desnoyers wrote:
> ----- On Sep 6, 2016, at 3:00 PM, Milian Wolff milian.wolff at kdab.com wrote:
> > Hey all,
> > 
> > where can I find more documentation on how to use sdt.h to add static
> > tracepoints to user-land applications? If this is not the right place to
> > ask, please refer to to elsewhere.
> 
> Hi Milian,

Hey Mathieu,

> LTTng-UST offers a "tracepoint" instrumentation facility, which can
> optionally emit "sdt.h" probe points too for compatibility with SystemTAP.
> 
> > I plan to upstream a collection of tracepoints to Qt, and possibly
> > elsewhere. One problem I'm having right now is figuring out how to
> > "design" the tracepoints such that they have minimal overhead.
> 
> The main question here would be: do you want your instrumentation to be
> usable with LTTng-UST ? If yes, then you want the tracepoint instrumentation
> facility. Else, if you only plan on using SystemTAP, you can use sdt.h
> instrumentation.
> 
> > So my questions:
> My answers will be about lttng-ust tracepoints.

Thanks for the clarifications! Are the LTTNG-UST tracepoints also "zero-
overhead" like the SystemTap once, i.e. put into a separate section and "only" 
one nop is added when tracing is disabled? I could not find such an 
information anywhere yet.

> > What data types can I use for trace point arguments?
> 
> See http://lttng.org/docs/#doc-c-application
> 
> > Can I pass UTF16 strings? Do they need to be null-terminated?
> 
> You should convert them to UTF8.
> 
> A ctf_string() needs to be null-terminated. A ctf_sequence_text() is
> not required to be null-terminated. See
> http://lttng.org/docs/#doc-liblttng-ust-tp-fields

This sounds like tracing would then incur a huge runtime overhead, when I need 
to convert all my UTF-16 strings to UTF-8. How does one deal with that? 

Looking at the API documentation, using ctf_array instead with ushort as C 
type sounds like a better approach. In a custom babeltrace consumer script, I 
could then convert it to UTF8 offline, if needed.

The advantage here is that I have "zero" overhead while tracing, which is 
crucial for me to get the tracepoints accepted upstream in Qt, without hiding 
them behind a compiler switch.

> > Can I pass structs? Or do I need to pass each member as an individual
> > argument?
> 
> You can pass pointers to structures to the tracepoint() call from your
> application source code, and then you need to express each individual
> field you want to serialize into the trace within the TP_FIELDS() macro.
> Ref. http://lttng.org/docs/#doc-liblttng-ust-tp-fields

Thank you.

Bye

-- 
Milian Wolff | milian.wolff at kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5903 bytes
Desc: not available
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20160912/1ed00a38/attachment-0001.bin>


More information about the lttng-dev mailing list