Re: [diamon-discuss] [BUG] perf-convert-to-ctf fails to dealing with syscalls tracepoints.

Jérémie Galarneau <[email protected]> Mon, 19 Jan 2015 10:18:21 -0500
Newsgroups dev.linux.lists.diamon-discuss
Message-ID <CA+jJMxvxEE+eueuNVwYpsN8cQGBoXa=pJc9WKpcLwRfhCbZiKQ@mail.gmail.com>
On Mon, Jan 19, 2015 at 7:59 AM, Jiri Olsa <[email protected]> wrote:
> On Mon, Jan 19, 2015 at 08:12:04PM +0800, Wang Nan wrote:
>> Hi Jiri,
>>
>> I found a problem when trying to convert syscalls:* records into ctf:
>>
>> root@arma15el:~# perf record -a -e syscalls:* sleep 5
>>
>> [ perf record: Woken up 0 times to write data ]
>> [ perf record: Captured and wrote 4.571 MB perf.data (~199696 samples) ]
>> Warning:
>> Processed 64994 events and lost 1 chunks!
>>
>> Check IO/CPU overload!
>>
>> root@arma15el:~# perf data convert --to-ctf ./out.ctf
>> Failed to add field 'nr
>> Failed to add event 'syscalls:sys_enter_io_submit'.
>> root@arma15el:~#
>>
>> Do you have time to have a look at it?
>>
>
> yea, looks like libbabeltrace do not allow field of same name
> in the structure:
>
> ---
> static
> int add_structure_field(GPtrArray *fields,
>                 GHashTable *field_name_to_index,
>                 struct bt_ctf_field_type *field_type,
>                 const char *field_name)
> {
>         int ret = 0;
>         GQuark name_quark = g_quark_from_string(field_name);
>         struct structure_field *field;
>
>         /* Make sure structure does not contain a field of the same name */
>         if (g_hash_table_lookup_extended(field_name_to_index,
> ---
>
> and syscalls:sys_enter_io_submit trcaepoint actually has 'nr' field duplicates:
>
> ---
> [root@krava events]# cat /sys/kernel/debug/tracing/events/syscalls/sys_enter_io_submit/format
> name: sys_enter_io_submit
> ID: 720
> format:
>         field:unsigned short common_type;       offset:0;       size:2; signed:0;
>         field:unsigned char common_flags;       offset:2;       size:1; signed:0;
>         field:unsigned char common_preempt_count;       offset:3;       size:1; signed:0;
>         field:int common_pid;   offset:4;       size:4; signed:1;
>
>         field:int nr;   offset:8;       size:4; signed:1;
>         field:aio_context_t ctx_id;     offset:16;      size:8; signed:0;
>         field:long nr;  offset:24;      size:8; signed:0;
>         field:struct iocb * * iocbpp;   offset:32;      size:8; signed:0;
>
> print fmt: "ctx_id: 0x%08lx, nr: 0x%08lx, iocbpp: 0x%08lx", ((unsigned long)(REC->ctx_id)), ((unsigned long)(REC->nr)), ((unsigned long)(REC->iocbpp))
> ---
>
> which is PITA ;-)
>
> seems like reasonable request to keep names unique in the structure,
> so I think we'll change it on our end (perf data convert) and maybe
> add some suffix to duplicates like nr_dupl_X.. (where X = 1,2..)
>
> thoughts?

Just confirming that this is, indeed, the intended behavior.

Regards,
Jérémie

>
>> Moreover, is there (diamon-discuss) right place to discuss things related
>> your perf-convert-to-ctf patches?
>
> lkml is fine (maybe also add linux-perf-users list),
> but please add also Sebaastian so he's not missing any fun ;-)
>
> and Jérémie for babeltrace side.. I CC-ed both of them now
>
> thanks,
> jirka



-- 
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com