[lttng-dev] [RFC PATCH v2 0/4] simpletrace : support var num of args and strings.

Harsh Bora harsh at linux.vnet.ibm.com
Tue Jan 10 01:54:09 EST 2012


On 01/10/2012 05:44 AM, Mathieu Desnoyers wrote:
> * Harsh Bora (harsh at linux.vnet.ibm.com) wrote:
>> On 01/09/2012 09:31 PM, Mathieu Desnoyers wrote:
>>> * Harsh Prateek Bora (harsh at linux.vnet.ibm.com) wrote:
>>>> Existing simple trace can log upto 6 args per trace event and does not
>>>> support strings in trace record format. Introducing new trace format as
>>>> discussed earlier on list to support variable number/size of arguments.
>>>> (Ref: http://lists.gnu.org/archive/html/qemu-devel/2011-11/msg03426.html)
>>>>
>>>> Basic testing of this patch is successful. Stress testing not yet done.
>>>>
>>>> Apply patches, then run:
>>>>
>>>> make distclean
>>>> ./configure with --enable-trace-backend=simple
>>>> make
>>>> sudo make install
>>>>
>>>> Sample tracelog showing strings support:
>>>> [harsh at harshbora v9fs]$ scripts/simpletrace.py trace-events trace-23261
>>>> v9fs_version 0.000 tag=65535 id=100 msize=8192 version=9P2000.L
>>>> v9fs_version_return 17.530 tag=65535 id=100 msize=8192 version=9P2000.L
>>>> v9fs_attach 180.121 tag=1 id=104 fid=0 afid=18446744073709551615
>>>> uname=nobody aname=
>>>>
>>>>
>>>> Note: LTTng ust backend is broken in upstream qemu, therefore tracetool.py
>>>> doesnt support ust backend as of now. IIUC, ust's trace event APIs are under
>>>> development and not yet stable.
>>>
>>> Hi,
>>>
>>> FYI, the LTTng-UST TRACEPOINT_EVENT API is very much stable as of now.
>>> Even though we are still in LTTng-UST 2.0 prereleases, the fact that we
>>> started the round of discussions on this API last summer makes us
>>> confident that from this point on we should not have to change it.
>>>
>>> Moreover, I would like to know if the old UST 0.x (0.16 is the latest)
>>> is broken wrt qemu, or if this is just for LTTng-2.0 UST support ?
>>> UST 0.x instrumentation is not supposed to have broken wrt qemu.
>>>
>>
>> Hi,
>> Thanks for an early response. I had tried building with ust 0.16 and it
>> gives compilation errors, specially for trace events with 'void'
>> argument:
>>
>>    CC    osdep.o
>> In file included from osdep.c:49:
>> trace.h: In function ‘__trace_ust_slavio_misc_update_irq_raise’:
>> trace.h:277: error: ‘void’ must be the only parameter
>> trace.h:277: error: expected expression before ‘)’ token
>> trace.h:277: error: too many arguments to function ‘(void (*)(void
>> *))__tp_it_func’
>> trace.h: At top level:
>> trace.h:277: error: ‘void’ must be the only parameter
>> trace.h:277: error: ‘void’ must be the only parameter
>> In file included from osdep.c:49:
>> trace.h: In function ‘__trace_ust_slavio_misc_update_irq_lower’:
>> trace.h:280: error: ‘void’ must be the only parameter
>> trace.h:280: error: expected expression before ‘)’ token
>> trace.h:280: error: too many arguments to function ‘(void (*)(void
>> *))__tp_it_func’
>>
>>
>>   I am not sure which interface is supposed to be used for void arguments
>> in ust 0.16.
>
> Looking at scripts/tracetool:
>
> linetoh_ust()
> {
>      local name args argnames
>      name=$(get_name "$1")
>      args=$(get_args "$1")
>      argnames=$(get_argnames "$1", ",")
>
>      cat<<EOF
> DECLARE_TRACE(ust_$name, TP_PROTO($args), TP_ARGS($argnames));
> #define trace_$name trace_ust_$name
> EOF
> }
>
> for those tracepoints with argument "void", DECLARE_TRACE_NOARGS should
> be used for UST 0.16. Similar for:
>
> DEFINE_TRACE(ust_$name); ->  DEFINE_TRACE_NOARGS(ust_$name);
>

I had tried with _NOARGS variants initially by manually changing the 
auto-generated code like this:

In trace.h:

DECLARE_TRACE_NOARGS(ust_slavio_misc_update_irq_raise);
#define trace_slavio_misc_update_irq_raise 
trace_ust_slavio_misc_update_irq_raise

In trace.c:

DEFINE_TRACE_NOARGS(ust_slavio_misc_update_irq_raise);

static void ust_slavio_misc_update_irq_raise_probe()
{
     trace_mark(ust, slavio_misc_update_irq_raise);
}


However, it still gave error like this:

[harsh at harshbora v9fs]$ make
   CC    osdep.o
cc1: warnings being treated as errors
In file included from osdep.c:49:
trace.h:277: error: data definition has no type or storage class
trace.h:277: error: type defaults to ‘int’ in declaration of 
‘DECLARE_TRACE_NOARGS’
trace.h:277: error: parameter names (without types) in function declaration


It will be great if you can provide a sample code (to be auto-generated) 
required for a trace-event with void argument.

- Harsh

>> Moreover, if ust 2.0 uses different interfaces, we might
>> want to use the latest one.
>
> Note that this kind of special-case won't be needed with LTTng-UST 2.0
> TRACEPOINT_EVENT. In place of DECLARE_TRACE, one would use:
>
> TRACEPOINT_EVENT(qemu_kvm, $name,
>          TP_ARGS($args),
>          TP_FIELDS()
> )
>
> Note that I notice that some care will need to be taken to generate the
> TP_FIELDS() from your existing trace-events file, an example:
>
> g_realloc(void *ptr, size_t size, void *newptr)
>
> would have to be translated to:
>
> TRACE_EVENT(qemu_kvm, g_realloc,
>          TP_ARGS(void *, ptr, size_t, size, void *, newptr),
>          TP_FIELDS(
>                  ctf_integer_hex(void *, ptr, ptr)
>                  ctf_integer(size_t, size, size)
>                  ctf_integer_hex(void *, newptr, newptr)
>          )
> )
>
> Note that the bright side is that the tracepoint probe does not need to
> be hand-coded anymore, and there is no need to use the markers anymore
> neither, which makes the tracer much faster.
>
> For most of your fields (using %p, %d style format strings), you should
> use ctf_integer or ctf_integer_hex (the latter lets the trace viewer
> know that the data should be printed as hexadecimal).
> You will likely need to detect the %s format strings you have there and
> translate them into ctf_string(field, field) too. You can have a look at
> lttng-ust tests/hello/*.[ch] for examples.

Thanks for the info, I will look into it later.
>
> The call which would have looked like trace_qemu_kvm_g_realloc() in UST
> 0.x should now be done with:
>
>    tracepoint(qemu_kvm, g_realloc, ptr, size, newptr);
>
> This is needed to (very soon) add support for sdt.h in LTTng-UST 2.0, so
> systemtap and gdb can hook into tracepoints declared by lttng-ust 2.0.
>
> Best regards,
>
> Mathieu
>
>>
>> regards,
>> Harsh
>>
>>> Best regards,
>>>
>>> Mathieu
>>>
>>>>
>>>> Version History:
>>>>
>>>> v2:
>>>> - Updated tracetool.py to support nop, stderr, dtrace backend
>>>>
>>>> v1:
>>>> - Working protoype with tracetool.py converted only for simpletrace backend
>>>>
>>>> Harsh Prateek Bora (4):
>>>>     Converting tracetool.sh to tracetool.py
>>>>     Makefile and configure changes for tracetool.py
>>>>     simpletrace-v2: Handle variable number/size of elements per trace
>>>>       record.
>>>>     simpletrace.py: updated log reader script to handle new log format
>>>>
>>>>    Makefile.objs          |    6 +-
>>>>    Makefile.target        |   10 +-
>>>>    configure              |    4 +-
>>>>    monitor.c              |    2 +-
>>>>    scripts/simpletrace.py |  110 ++++++++++-
>>>>    scripts/tracetool.py   |  505 ++++++++++++++++++++++++++++++++++++++++++++++++
>>>>    trace/simple.c         |  178 ++++++-----------
>>>>    trace/simple.h         |   31 +++-
>>>>    8 files changed, 702 insertions(+), 144 deletions(-)
>>>>    create mode 100755 scripts/tracetool.py
>>>>
>>>
>>
>




More information about the lttng-dev mailing list