Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: jerome.stadelmann@heig-vd.ch (Jérôme Stadelmann)
Subject: [ltt-dev] Traces data alignment
Date: Thu, 26 Mar 2009 07:41:14 +0100	[thread overview]
Message-ID: <200903260741.14730.jerome.stadelmann@heig-vd.ch> (raw)
In-Reply-To: <20090325070518.GA21081@Krystal>

On mercredi 25 mars 2009 08:05:18 Mathieu Desnoyers wrote:
> * J?r?me Stadelmann (jerome.stadelmann at heig-vd.ch) wrote:
> > On mardi 24 mars 2009 14:11:31 Mathieu Desnoyers wrote:
> > > * J?r?me Stadelmann (jerome.stadelmann at heig-vd.ch) wrote:
> > > > On vendredi 20 mars 2009 15:53:55 Mathieu Desnoyers wrote:
> > > > > * J?r?me Stadelmann (jerome.stadelmann at heig-vd.ch) wrote:
> > > > > > On jeudi 19 mars 2009 18:00:01 Mathieu Desnoyers wrote:
> > > > > > > * J?r?me Stadelmann (jerome.stadelmann at heig-vd.ch) wrote:
> > > > > > > > Hi everybody,
> > > > > > > > 
> > > > > > > > I'm working on a LTTng traces parser and I'm a little bit blocked on the alignment. Can someone please explain how and where it is coded ?
> > > > > > > 
> > > > > > > The lttv lib "ltttraceread" should do that for you.
> > > > > >  
> > > > > > > > What are the roles of the alignment defined in the traces header and the one defined in the metadata file in the core_marker_id ?
> > > > > > > > 
> > > > > > > 
> > > > > > > They tell that a specific tracefile content is aligned or not, and if
> > > > > > > the content of a given event is aligned or not. You should really have
> > > > > > > at least a look at the ltt lib traceread reference implementation.
> > > > > > 
> > > > > > Thank you. This library helped me a lot. I see that there is an up to 2 byte alignment in the core marker id event definition. Is there the only special case ?
> > > > > > I've searched the uses of the ltt_align function. Are there other functions to look for ?
> > > > > > 
> > > > > 
> > > > > Looking at ltt_align use is a good starting point.
> > > > > 
> > > > > Can you point out to the specific package/version/file/line you refer to
> > > > > for the core marker id "special case" you talk about here ?
> > > > > 
> > > > 
> > > > I think I've understood now. The alignment in the metadata file is
> > > > "hardcoded" as 2 byte because the id field is the biggest value and is
> > > > coded as a 2 bytes value. Am I right ?
> > > > 
> > > 
> > > Possibly. Again, can you point out which package/version/file/line you
> > > refer to so I can be sure we are talking about the same piece of code ?
> > > Telling which file and function, with a cut and paste of the context,
> > > would be nice to have.
> > > 
> > 
> > in tracefile.c :
> > 
> > static int ltt_process_metadata_tracefile(LttTracefile *tf)
> > {
> > 	.....
> > 
> >         case MARKER_ID_SET_MARKER_ID:
> >           channel_name = pos = tf->event.data;
> > 	  pos += strlen(channel_name) + 1;
> > 	  marker_name = pos;
> >           g_debug("Doing MARKER_ID_SET_MARKER_ID of marker %s.%s",
> > 	    channel_name, marker_name);
> >           pos += strlen(marker_name) + 1;
> > 
> >           pos += ltt_align((size_t)pos, sizeof(guint16), tf->alignment);
> > 
> >           id = ltt_get_uint16(LTT_GET_BO(tf), pos);
> >           g_debug("In MARKER_ID_SET_MARKER_ID of marker %s.%s id %hu",
> > 	  	channel_name, marker_name, id);
> >           pos += sizeof(guint16);
> >           int_size = *(guint8*)pos;
> >           pos += sizeof(guint8);
> >           long_size = *(guint8*)pos;
> >           pos += sizeof(guint8);
> >           pointer_size = *(guint8*)pos;
> >           pos += sizeof(guint8);
> >           size_t_size = *(guint8*)pos;
> >           pos += sizeof(guint8);
> >           alignment = *(guint8*)pos;
> >           pos += sizeof(guint8);
> > 
> > 	.....
> > }
> > 
> > As I said, you are using an "hardcoded" up to 2 bytes alignment because you already know in this case all the fields ?
> > 
> 
> I use a 2 bytes alignment there because I know the next field is 2
> bytes in size.
> 
> Alignment of the whole event payload is done by the
> ltt_update_event_size() call in ltt_tracefile_read_update_event(). See
> the following comment :
> 
>   /*
>    * Let ltt_update_event_size update event->data according to the largest
>    * alignment within the payload.
>    * Get the data size and update the event fields with the current
>    * information. */
> 
> There is a small trick here though : ltt_update_event_size() seems to
> assume that the payload will always be aligned on 2-bytes boundaries (it
> does not ltt_align at the beginning of the metadata parsing code). It's
> OK because, when trace alignment is active, event headers are aligned on
> their own size, and they are always multiples of 2 bytes.
> 
> It could be more solid if I added a ltt_align on 2-bytes at the
> beginning of those though. That would not fail if the event header
> becomes something else than a 2-bytes multiple.
> 
> Mathieu


Now with your explanations I could do what I wanted. Thanks for your help.

Best regards
Jerome

> 
> > > Mathieu
> > > 
> > > > > Mathieu
> > > > > 
> > > > > > Jerome
> > > > > >  
> > > > > > > Mathieu
> > > > > > > 
> > > > > > > > Regards,
> > > > > > > > Jerome
> > > > > > > > 
> > > > > > > > _______________________________________________
> > > > > > > > ltt-dev mailing list
> > > > > > > > ltt-dev at lists.casi.polymtl.ca
> > > > > > > > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> > > > > > > > 
> > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 




      reply	other threads:[~2009-03-26  6:41 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-19 15:06 Jérôme Stadelmann
2009-03-19 17:00 ` Mathieu Desnoyers
2009-03-20  7:16   ` Jérôme Stadelmann
2009-03-20 14:53     ` Mathieu Desnoyers
2009-03-23  7:03       ` Jérôme Stadelmann
2009-03-24  8:34       ` Jérôme Stadelmann
2009-03-24 13:11         ` Mathieu Desnoyers
2009-03-25  6:16           ` Jérôme Stadelmann
2009-03-25  7:05             ` Mathieu Desnoyers
2009-03-26  6:41               ` Jérôme Stadelmann [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200903260741.14730.jerome.stadelmann@heig-vd.ch \
    --to=jerome.stadelmann@heig-vd.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox