NAME | DESCRIPTION | WHAT IS BABELTRACE? | BABELTRACE CONCEPTS | TRACE PROCESSING GRAPH REPRESENTATION | BUGS | RESOURCES | AUTHORS | COPYRIGHT | SEE ALSO | COLOPHON |
|
BABELTRACE-INTRO(7) Babeltrace manual BABELTRACE-INTRO(7)
babeltrace-intro - Introduction to Babeltrace
This man page is an introduction to the Babeltrace project. The WHAT IS BABELTRACE? section lists the parts of the project and shows the major changes from Babeltrace 1 to Babeltrace 2 while the BABELTRACE CONCEPTS section defines the core concepts of Babeltrace. The TRACE PROCESSING GRAPH REPRESENTATION section shows how some concepts are visually represented in other Babeltrace man pages.
Babeltrace is an open-source software project of which the purpose is to process or convert traces (see <https://en.wikipedia.org/wiki/Tracing_(software)>). The Babeltrace project includes the following parts: Babeltrace library (libbabeltrace) A shared library with a C API. With libbabeltrace, you can programmatically create plugins and component classes, build and run processing graphs, and more (see the BABELTRACE CONCEPTS section for more details about those concepts). All the other Babeltrace parts rely on this library. babeltrace command A command-line interface which uses libbabeltrace to load plugins, create a trace processing graph, create components, and run the graph. You can also use babeltrace to list the available plugins or to query an object from a component class. See babeltrace(1). Babeltrace Python bindings A Python 3 package which offers a Pythonic interface of libbabeltrace. You can perform the same operations which are available in libbabeltrace with the Python bindings, but in a really easier way and with less code. Babeltrace project’s plugins The Babeltrace plugins shipped with the project. Those plugins are not special, in that they only rely on libbabeltrace and you don’t need them to use libbabeltrace, babeltrace(1), or the Python bindings. The Babeltrace project’s plugins are: ctf Common Trace Format input/output, including the LTTng live source. See babeltrace-plugin-ctf(7). lttng-utils Graph utilities specific to LTTng (see <http://lttng.org/>) traces. See babeltrace-plugin-lttng-utils(7). text Text input/output. See babeltrace-plugin-text(7). utils Graph utilities (muxer, trimmer, counter, dummy sink). See babeltrace-plugin-utils(7). Python plugin provider A shared library which libbabeltrace tries to load to add support for Babeltrace plugins written in Python. The package you use to write a Python Babeltrace plugin is the one provided by the Python bindings. Changes since Babeltrace 1 This man page is an introduction to Babeltrace 2, a rewrite of Babeltrace 1 with a focus on extensibility and flexibility. Babeltrace 1 exists since 2010. The major improvements brought by Babeltrace 2 are: · Full plugin support: any user can distribute a Babeltrace plugin and, as long as libbabeltrace finds it, any application linked to libbabeltrace can load it and use it. Plugins are not just input and output formats: they provide source, filter, and sink component classes so that you can connect specialized, reusable components together in a graph to create a customized trace conversion or analysis device. · In order to support user components, all the objects of libbabeltrace have a reference count. The possible reference cycles are handled internally so that the library’s API is clean and predictable. The two reference counting functions, bt_get() and bt_put(), are all you need to manage the lifetime of any Babeltrace object. · All the parts of the Babeltrace project run on the major operating systems, including Windows and macOS.
This section defines the main concepts of the Babeltrace project. These concepts translate into types and functions in libbabeltrace and its Python bindings, but also as command-line actions and options in the babeltrace command. The other Babeltrace man pages assume that you are familiar with the following definitions. Some Babeltrace concepts are interdependent: it is normal to jump from one definition to another to understand the big picture. Component class A reusable class from which you can instantiate one or more component instances. There are three types of component classes used to instantiate the three types of components (source, filter, and sink). A component class provides methods, one of which is an initialization method, or constructor, to create a component. You pass initialization parameters to this method to customize the created component. For example, the initialization method of the src.ctf.fs component class accepts a mandatory path parameter which is the file system path to the trace(s). It also accepts an optional clock-class-offset-ns parameter which is an offset, in nanoseconds, to add to all the clock classes found in the traces’s metadata. Component A node within a trace processing graph. There are three types of components: Source component An input component which produces notifications. Examples: CTF files input, log file input, LTTng-live input, random event generator. Filter component An intermediate component which can discard the notifications it receives, transform them, augment them, sort them, or create new ones. Examples: filter which removes notifications based on an expression, filter which adds debugging information to selected events, notification multiplexer, trace trimmer. Sink component An output component which consumes notifications and usually writes them to one or more formatted files. Examples: log file output, CTF files output, text output on the console. Components are connected together within a trace processing graph through their ports. Source components have output ports, sink components have input ports, and filter components have both. A component is the instance of a component class. The terms component and component instance are equivalent. Within a trace processing graph, each component has a unique name. This is not the name of its component class, but an instance name. If human is a component class name, than John could be a component name. Port A connection point, on a component, from which are sent or to which are received notifications when the trace processing graph is running. An output port is where notifications are sent. An input port is where notifications are received. Source components have output ports, sink components have input ports, and filter components have both. An output port can only be connected to a single input port at a given time. A filter or sink component receiving notifications from its input ports is said to consume notifications. The link between an output port and input port is a connection. A component can dynamically add and remove ports while a graph is running. For example, a filter.utils.muxer component always makes sure that it has at least one available input port. Connection The link between an output port and an input port through which notifications flow when a trace processing graph is running. Notification An atomic element sent from an output port to an input port. A source component produces notifications, while a sink component consumes them. A filter component can both consume and produce notifications. The main types of notifications are: Event A trace event record within a packet. Packet beginning The beginning of a packet within a stream. A packet is a container of events. Packet end The end of a packet within a stream. Stream beginning The beginning of a stream. A stream is a container of packets. Usually, a given source component’s output port sends packet and event notifications which belong to a single stream. Stream end The end of a stream. Discarded events A count of discarded events within a given time interval for a given stream. Discarded packets A count of discarded packets within a given time interval for a given stream. Trace processing graph A filter graph (see <https://en.wikipedia.org/wiki/Filter_graph>) where nodes are components and notifications flow from output ports to input ports. You can build a trace processing graph with libbabeltrace, with the Babeltrace Python bindings, or with the babeltrace-run(1) and babeltrace-convert(1) commands. When you run a trace processing graph, the sink components consume notifications from their input ports, making all the graph’s components work one notification at a time to perform the trace conversion or analysis. Plugin A container of component classes as a shared library. Each component class within a plugin has a type (source, filter, or sink) and a name. The type and name pair is unique within a given plugin. libbabeltrace can load a plugin (.so or .dll file) at run time: the result is a plugin object in which you can find a specific component class and instantiate it within a trace processing graph as a component. The babeltrace command uses the TYPE.PLUGIN.COMPCLS format to identify a specific component class within a specific plugin. TYPE is either source, filter, or sink. You can list the available Babeltrace plugins with the babeltrace-list-plugins(1) command. Query An operation with which you can get a named object from a component class, possibly with the help of query parameters. The plain text metadata stream of a CTF trace and the available LTTng live sessions of a given LTTng relay daemon are examples of queries. You can use the babeltrace-query(1) command to query a component class’s object.
In the Babeltrace man pages, a component is represented with a box. The box has the component class type, plugin name, and component class name at the top. Just below, between square brackets, is its component instance name within the trace processing graph. Each port is represented with an @ symbol on the edge of the component box with its name inside the box. Output ports are on the right edge while input ports are on the left edge. For example, here’s a source component box: +------------+ | src.ctf.fs | | [my-src] | | | | stream0 @ | stream1 @ | stream2 @ +------------+ This one is an instance of the src.ctf.fs component class named my- src. It has three output ports named stream0, stream1, and stream2. A trace processing graph is represented with multiple component boxes connected together. The connections are arrows from output ports to input ports. For example, here’s a simple conversion graph: +------------+ +-----------------+ +------------------+ | src.ctf.fs | | flt.utils.muxer | | sink.text.pretty | | [ctf] | | [muxer] | | [text] | | | | | | | | stream0 @--->@ in0 out @--->@ in | | stream1 @--->@ in1 | +------------------+ | stream2 @--->@ in2 | +------------+ @ in3 | +-----------------+ Note that input port in3 of component muxer is not currently connected in this example. Sometimes, we symbolically represent other resources which are consumed from or produced by components. In this case, arrows are used, but they do not go to or from port symbols (@). For example, in the graph above, the ctf component consumes a CTF trace and the text component prints to the console, so here’s a more complete diagram: CTF trace | .------' | +------------+ +-----------------+ +------------------+ | | src.ctf.fs | | flt.utils.muxer | | sink.text.pretty | '->| [ctf] | | [muxer] | | [text] | | | | | | | | stream0 @--->@ in0 out @--->@ in | | stream1 @--->@ in1 | +--+---------------+ | stream2 @--->@ in2 | | +------------+ @ in3 | '---> Console +-----------------+ Here’s another example of a more complex graph which splits a specific stream using some criteria: +------------+ +-----------------+ +------------------+ | src.ctf.fs | | flt.utils.muxer | | sink.text.pretty | | [ctf-in] | | [muxer] | | [text] | | | | | | | | stream0 @--->@ in0 out @--->@ in | | stream1 @--->@ in1 | +------------------+ | stream2 @-. @ in2 | +------------+ | +-----------------+ +-------------+ | | sink.ctf.fs | | | [ctf-out0] | | +-------------------+ | | | | flt.some.splitter | .->@ in | | | [splitter] | | +-------------+ | | | | '->@ in A @-' +-------------+ | B @-. | sink.ctf.fs | +-------------------+ | | [ctf-out1] | | | | '->@ in | +-------------+
If you encounter any issue or usability problem, please report it on the Babeltrace bug tracker (see <https://bugs.linuxfoundation.org/buglist.cgi?product=Diamon&component=Babeltrace>).
The Babeltrace project shares some communication channels with the LTTng project (see <http://lttng.org/>). · Babeltrace website (see <http://diamon.org/babeltrace>) · Git repository (see <http://git.linuxfoundation.org/?p=diamon/babeltrace.git>) · EfficiOS GitHub organization (see <http://github.com/efficios/>) · Continuous integration (see <https://ci.lttng.org/job/babeltrace_master_build/>) · Mailing list (see <http://lists.lttng.org>) for support and development: lttng-dev@lists.lttng.org · IRC channel (see <irc://irc.oftc.net/lttng>): #lttng on irc.oftc.net
The Babeltrace project is the result of efforts by many regular developers and occasional contributors. The current project maintainer is Jérémie Galarneau <mailto:jeremie.galarneau@efficios.com>.
This man page is part of the Babeltrace project. Babeltrace is distributed under the MIT license (see <https://opensource.org/licenses/MIT>).
babeltrace(1)
This page is part of the babeltrace (trace read and write libraries
and a trace converter) project. Information about the project can be
found at ⟨http://www.efficios.com/babeltrace⟩. If you have a bug
report for this manual page, send it to lttng-dev@lists.lttng.org.
This page was obtained from the project's upstream Git repository
⟨git://git.efficios.com/babeltrace.git⟩ on 2018-02-02. (At that
time, the date of the most recent commit that was found in the repos‐
itory was 2018-01-30.) If you discover any rendering problems in
this HTML version of the page, or you believe there is a better or
more up-to-date source for the page, or you have corrections or
improvements to the information in this COLOPHON (which is not part
of the original manual page), send a mail to man-pages@man7.org
Babeltrace 2.0.0-pre4 5 October 2017 BABELTRACE-INTRO(7)
Pages that refer to this page: babeltrace(1), babeltrace-convert(1), babeltrace-help(1), babeltrace-list-plugins(1), babeltrace-log(1), babeltrace-query(1), babeltrace-run(1), babeltrace-filter.lttng-utils.debug-info(7), babeltrace-filter.utils.muxer(7), babeltrace-filter.utils.trimmer(7), babeltrace-plugin-ctf(7), babeltrace-plugin-lttng-utils(7), babeltrace-plugin-text(7), babeltrace-plugin-utils(7), babeltrace-sink.ctf.fs(7), babeltrace-sink.text.pretty(7), babeltrace-sink.utils.counter(7), babeltrace-sink.utils.dummy(7), babeltrace-source.ctf.fs(7), babeltrace-source.ctf.lttng-live(7), babeltrace-source.text.dmesg(7)