[lttng-dev] [Patch LTTng-ust] RFC: Syntax changes to add support of other CTF metadata

Amit Margalit AMITM at il.ibm.com
Wed Dec 11 02:39:05 EST 2013


Thanks, Genevieve, I appreciate that. I feel the examples it make easier 
to give feedback on the use cases, rather than the ideas.

Amit Margalit
IBM XIV - Storage Reinvented
XIV-NAS Development Team
Tel. 03-689-7774
Fax. 03-689-7230



From:   Geneviève Bastien <gbastien+lttng at versatic.net>
To:     lttng-dev at lists.lttng.org
Date:   12/10/2013 05:19 PM
Subject:        Re: [lttng-dev] [Patch LTTng-ust] RFC: Syntax changes to 
add support of other CTF metadata



Thanks Amit,

I'll add support of those metadata one at a time, starting with the enum 
and then going for the struct and the variant. As support is added, I'll 
add to the documentation/examples and there will be a test application in 
the code to showcase those fields. But for myself, I'll probably work on 
the examples before implementing their support so I can share it on this 
list for discussion beforehand.

Geneviève


On 12/09/2013 04:00 AM, Amit Margalit wrote:
First, I'd like to say I am a proponent of this. 

I'd also love to see some example code using this. 

Thanks, 

Amit Margalit 
IBM XIV - Storage Reinvented 
XIV-NAS Development Team 
Tel. 03-689-7774 
Fax. 03-689-7230 



From:        Geneviève Bastien <gbastien+lttng at versatic.net> 
To:        lttng-dev at lists.lttng.org 
Date:        12/05/2013 10:23 PM 
Subject:        [lttng-dev] [Patch LTTng-ust] RFC: Syntax changes to add 
support of        other CTF metadata 



The CTF spec defines metadata types enumerations, structures and variants
that are not yet available for use in tracepoints in LTTng-ust. This
proposes the syntax for how those types could be defined and used.

For now, it won't be possible to define them inline in a tracepoint. They
will have to be named and defined outside the TRACEPOINT_EVENT macro and
used in the tracepoint definition. It will make it easier for a first
implementation. Once that is done, it won't be too difficult to add inline
support.

Signed-off-by: Geneviève Bastien <gbastien+lttng at versatic.net>
---
doc/man/lttng-ust.3 | 193 
++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 193 insertions(+)

diff --git a/doc/man/lttng-ust.3 b/doc/man/lttng-ust.3
index 7624e88..c8229f2 100644
--- a/doc/man/lttng-ust.3
+++ b/doc/man/lttng-ust.3
@@ -158,6 +158,39 @@ TRACEPOINT_EVENT(
                                   */
                                  ctf_float(float, floatfield, floatarg)
                                  ctf_float(double, doublefield, 
doublearg)
+
+                                  /*
+                                   * ctf_enum: a field using a previously 
defined named enumeration
+                                   * args: (provider, enum name, field 
name, argument expression)
+                                   * The enumeration itself and its 
values must have been defined
+                                   * previously with the TRACEPOINT_ENUM 
macro, described below.
+                                   */
+                                  ctf_enum(sample_component, 
enumeration_name, enumfield, enumarg)
+
+                                  /*
+                                   * ctf_struct: a field using a 
previously defined struct
+                                   * args: (provider, struct name, field 
name, [argument expression]*)
+                                   * The structure must have been 
previously defined with the
+                                   * TRACEPOINT_STRUCT macro, described 
below.
+                                   *
+                                   * The [argument expression]* part must 
correspond to the arguments
+                                   * defined in the TP_ARGS of the 
struct.
+                                   */
+                                  ctf_struct(sample_component, 
structure_name, structfield, args...)
+
+                                  /*
+                                   * ctf_variant: a field using a 
previously defined variant
+                                   * args: (provider, variant name, field 
name, enum field name,
+                                                [argument expression]*)
+                                   *
+                                   * The [argument expression]* part must 
correspond to the arguments
+                                   * defined in the TP_ARGS of the 
variant.
+                                   *
+                                   * There must be a field in the same 
tracepoint named 'enumfield'
+                                   * defined with ctf_enum(...)
+                                   */
+                                  ctf_variant(sample_component, 
variant_name, variantfield,
+ enumfield, args...)
                 )
)

@@ -165,6 +198,166 @@ There can be an arbitrary number of tracepoint 
providers within an
application, but they must each have their own provider name. Duplicate
provider names are not allowed.

+The CTF specification also supports some named basic and compound types 
that
+can be defined inside a tracepoint provider and used as fields in the
+tracepoint. This shows how to specify them and what they can be used for:
+
+The enumeration is a mapping between an integer and a string. It can be 
used
+to have a more compact trace in cases where the possible values for a 
field are
+limited:
+
+TRACEPOINT_ENUM(
+                 /*
+                  * The provider name, as described in the 
TRACEPOINT_EVENT macro
+                  */
+                 sample_component,
+
+                 /*
+                  * The name of this enumeration, that will be used when 
using this
+                  * metadata type in tracepoint fields
+                  */
+                 enumeration_name,
+
+                 /*
+                  * Integer type by which this enumeration will be 
represented.
+                  * It can be: char, int, long or any variant on those
+                  */
+                 type,
+
+                 /*
+                  * TP_ENUM_VALUES describe the values of this 
enumeration and what they
+                  * map to.
+                  */
+                 TP_ENUM_VALUES(
+                                  /*
+                                   * Maps an integer with this string 
value. By default, enumerations
+                                   * start at 0 and increment 1 for each 
entry.
+                                   */
+                                  ctf_enum_value(string_value)
+
+                                  /*
+                                   * Maps the string value to integers in 
the range 'start' to 'end'
+                                   * inclusively. If 'start' == 'end', 
then the string is mapped to
+                                   * a specific value.
+                                   */
+                                  ctf_enum_range(start, end, 
string_value)
+                 )
+)
+
+A structure allows to groupe fields together. They can be reused by 
different
+tracepoints:
+
+TRACEPOINT_STRUCT(
+                 /*
+                  * The provider name, as described in the 
TRACEPOINT_EVENT macro
+                  */
+                 sample_component,
+
+                 /*
+                  * The name of this structure, that will be used when 
using this
+                  * metadata type in tracepoint fields
+                  */
+                 structure_name,
+
+                 /*
+                  * TP_ARGS macro contains the arguments passed for the 
structure
+                  * it is in the following format
+                  *                       TP_ARGS(type1, name1, type2, 
name2, ... type10,
+ name10)
+                  * where there can be from zero to ten elements.
+                  * typeN is the datatype, such as int, struct or double 
**.
+                  * name is the variable name (in "int myInt" the name 
would be
+                  * myint)
+                  *                       TP_ARGS() is valid to mean no 
arguments
+                  *                       TP_ARGS(void) is valid too
+                  */
+                 TP_ARGS(int, anint, int, netint, long *, values,
+                                   char *, text, size_t, textlen,
+                                   double, doublearg, float, floatarg),
+
+                 /*
+                  * TP_FIELDS describes how to write the fields of the 
structure.
+                  * You can put expressions in the "argument expression" 
area,
+                  * typically using the input arguments from TP_ARGS.
+                  *
+                  * See TP_FIELDS macro in TRACEPOINT_EVENT for complete 
description
+                  * of possible fields. A structure may not contain 
itself and there cannot
+                  * be a cycle.
+                  */
+                 TP_FIELDS(...)
+)
+
+A variant is a selection between different types, given a
+'tag'. It is linked with the value of an enumeration.
+
+TRACEPOINT_VARIANT(
+                 /*
+                  * The provider name, as described in the 
TRACEPOINT_EVENT macro
+                  */
+                 sample_component,
+
+                 /*
+                  * The name of this variant, that will be used when 
using this
+                  * metadata type in tracepoint fields
+                  */
+                 variant_name,
+
+                 /*
+                  * The name of the provider where the linked enumeration 
is defined
+                  */
+                 enumeration_component,
+
+                 /*
+                  * The name of the enumeration, whose values will be 
linked to a field
+                  * type
+                  */
+                 enumeration_name,
+
+                 /*
+                  * TP_ARGS macro contains the arguments passed for the 
structure
+                  * it is in the following format
+                  *                       TP_ARGS(type1, name1, type2, 
name2, ... type10,
+ name10)
+                  * where there can be from zero to ten elements.
+                  * typeN is the datatype, such as int, struct or double 
**.
+                  * name is the variable name (in "int myInt" the name 
would be
+                  * myint)
+                  *                       TP_ARGS() is valid to mean no 
arguments
+                  *                       TP_ARGS(void) is valid too
+                  */
+                 TP_ARGS(int, anint, int, netint, long *, values,
+                                   char *, text, size_t, textlen,
+                                   double, doublearg, float, floatarg),
+
+                 /*
+                  * TP_VARIANTS will describe what field will be linked 
to what value of
+                  * the enumeration
+                  */
+                 TP_VARIANTS(
+                                  /*
+                                   * TP_VARIANT describes one mapping 
from an enum value to a field
+                                   */
+                                  TP_VARIANT(
+                                                   /*
+                                                    * The value of the 
enumeration field. This must correspond to one
+                                                    * of the 
string_values defined in TP_ENUM_VALUES of the linked
+                                                    * enumeration.
+                                                    */
+                                                   enum_val,
+
+                                                   /*
+                                                    * This is the field 
that will be added to the tracepoint if the
+                                                    * value of the enum 
is enum_val.
+                                                    *
+                                                    * See TP_FIELDS macro 
in TRACEPOINT_EVENT for complete description
+                                                    * of possible fields. 
A variant may not contain itself and there cannot
+                                                    * be a cycle.
+                                                    */
+                                                   <tp_field_expr>
+                                  )
+                 )
+)
+
.fi

.SH "ASSIGNING LOGLEVEL TO EVENTS"
-- 
1.8.4.2


_______________________________________________
lttng-dev mailing list
lttng-dev at lists.lttng.org
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

_______________________________________________
lttng-dev mailing list
lttng-dev at lists.lttng.org
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20131211/b7e0a602/attachment-0001.html>


More information about the lttng-dev mailing list