Cleanup: src.ctf.lttng-live: Dead assignment
[babeltrace.git] / doc / man / babeltrace2-intro.7.txt
CommitLineData
e70712b3
PP
1= babeltrace2-intro(7)
2:manpagetype: manual page
3:revdate: 14 September 2019
0659f3af
PP
4
5
e70712b3
PP
6== NAME
7
8babeltrace2-intro - Introduction to Babeltrace 2
9
0659f3af 10
e70712b3 11== DESCRIPTION
0659f3af 12
e70712b3 13This manual page is an introduction to the Babeltrace~2 project.
0659f3af 14
e70712b3
PP
15The <<what-is,``WHAT IS BABELTRACE~2?''>> section describes the
16parts of the project and shows the major changes from Babeltrace~1
17to Babeltrace~2 while the <<concepts,``BABELTRACE~2
18CONCEPTS''>> section defines the core concepts of Babeltrace~2.
0659f3af 19
e70712b3
PP
20The <<graph-repr,``TRACE PROCESSING GRAPH REPRESENTATION''>> section
21shows how some <<concepts,concepts>> are visually represented in other
22Babeltrace~2 manual pages.
0659f3af
PP
23
24
25[[what-is]]
e70712b3
PP
26== WHAT IS BABELTRACE~2?
27
28Babeltrace~2 is an open-source software project of which the
29purpose is to process or convert
0659f3af
PP
30https://en.wikipedia.org/wiki/Tracing_(software)[traces].
31
e70712b3 32The Babeltrace~2 project includes the following parts:
0659f3af 33
e70712b3 34[[libbabeltrace2]]Babeltrace~2 library (libbabeltrace2)::
0659f3af
PP
35 A shared library with a C API.
36+
a8be4294 37With libbabeltrace2, you can programmatically create <<plugin,plugins>>
e70712b3
PP
38and <<comp-cls,component classes>>, build and run <<graph,trace
39processing graphs>>, and more (see the <<concepts,``BABELTRACE~2
40CONCEPTS''>> section for more details about those concepts).
41+
42All the other Babeltrace~2 parts rely on this library.
0659f3af 43
e70712b3 44[[babeltrace2]]`babeltrace2` command-line program::
a8be4294 45 A command-line interface which uses libbabeltrace2 to load plugins,
e70712b3
PP
46 create a trace processing graph, create <<comp,components>>, connect
47 their <<port,ports>> correctly, and run the graph.
0659f3af 48+
e70712b3
PP
49You can also use `babeltrace2` to list the available plugins or to
50<<query,query>> an object from a component class.
0659f3af 51+
a8be4294 52See man:babeltrace2(1).
0659f3af 53
e70712b3
PP
54[[python-bindings]]Babeltrace~2 Python bindings::
55 A Python~3 package (`bt2`) which offers a Pythonic interface of
a8be4294 56 libbabeltrace2.
0659f3af 57+
e70712b3
PP
58You can perform the same operations which are available in
59libbabeltrace2 with the Python bindings, but more conveniently and with
60less code. However, the Python bindings are less performant than
61libbabeltrace2.
0659f3af 62
e70712b3
PP
63Babeltrace~2 project's plugins::
64 The Babeltrace~2 <<plugin,plugins>> shipped with the project.
0659f3af 65+
e70712b3
PP
66Those plugins are not special in that they only rely on libbabeltrace2
67and you don't need them to use libbabeltrace2, man:babeltrace2(1), or
68the Python bindings. However, the project's plugins provide many widely
69used trace format encoders/decoders as well as common <<graph,trace
70processing graph>> utilities.
0659f3af 71+
e70712b3 72The Babeltrace~2 project's plugins are:
0659f3af
PP
73+
74--
75`ctf`::
e70712b3
PP
76 https://diamon.org/ctf/[Common Trace Format] (CTF) input/output,
77 including the LTTng live source.
0659f3af 78+
a8be4294 79See man:babeltrace2-plugin-ctf(7).
0659f3af
PP
80
81`lttng-utils`::
e70712b3 82 Graph utilities specific to https://lttng.org/[LTTng] traces.
0659f3af 83+
a8be4294 84See man:babeltrace2-plugin-lttng-utils(7).
0659f3af
PP
85
86`text`::
e70712b3 87 Plain text input/output.
0659f3af 88+
a8be4294 89See man:babeltrace2-plugin-text(7).
0659f3af
PP
90
91`utils`::
e70712b3 92 Common graph utilities (muxer, trimmer, counter, dummy sink).
0659f3af 93+
a8be4294 94See man:babeltrace2-plugin-utils(7).
0659f3af
PP
95--
96
0659f3af 97
e70712b3 98=== Changes since Babeltrace~1
0659f3af 99
e70712b3
PP
100This manual page is an introduction to Babeltrace~2, a rewrite of
101Babeltrace~1 with a focus on extensibility, flexibility, and
102interoperability.
0659f3af 103
e70712b3
PP
104Babeltrace~1 exists since 2010. The major improvements brought by
105Babeltrace~2 are:
0659f3af 106
e70712b3
PP
107* Full plugin support: any user can distribute a Babeltrace~2
108 plugin and, as long as <<libbabeltrace2,libbabeltrace2>> finds it, any
109 application linked to libbabeltrace2 can load it and use it.
0659f3af 110+
e70712b3
PP
111Plugins are not just trace format encoders and decoders: they provide
112source, filter, and sink <<comp-cls,component classes>> so that you can
113connect specialized, reusable components together in a trace processing
114graph to create a customized trace conversion or analysis device.
0659f3af 115
e70712b3
PP
116* In order to support user components, many of the objects of
117 libbabeltrace2 have a reference count. The possible reference cycles
118 are handled internally so that the library's API is clean and
119 predictable.
120+
121Objects which are often used on the "fast path" (for example, events,
122fields, and clock snapshots) are unique: they have no reference count.
0659f3af 123
e70712b3
PP
124* All the parts of the Babeltrace~2 project run on the major
125 operating systems, including Windows and macOS.
0659f3af
PP
126
127
128[[concepts]]
e70712b3
PP
129== BABELTRACE~2 CONCEPTS
130
131This section defines the main concepts of the Babeltrace~2 project.
132
133These concepts translate into types and functions in
a8be4294 134<<libbabeltrace2,libbabeltrace2>> and its <<python-bindings,Python
0659f3af 135bindings>>, but also as command-line actions and options in the
e70712b3
PP
136<<babeltrace2,`babeltrace2` program>>. The other Babeltrace~2
137manual pages assume that you are familiar with the following
138definitions.
0659f3af 139
e70712b3
PP
140Some Babeltrace~2 concepts are interdependent: it is normal to jump
141from one definition to another to understand the big picture.
0659f3af
PP
142
143[[comp-cls]]Component class::
e70712b3
PP
144 A reusable class which you can instantiate as one or more
145 <<comp,components>> within a <<graph,trace processing graph>>.
0659f3af 146+
e70712b3
PP
147There are three types of component classes used to create the three
148types of components: source, filter, and sink.
0659f3af 149+
e70712b3 150A component class implements methods, one of which is an initialization
0659f3af
PP
151method, or constructor, to create a component. You pass _initialization
152parameters_ to this method to customize the created component. For
e70712b3
PP
153example, the initialization method of the compcls:source.ctf.fs
154component class accepts a mandatory manparam:source.ctf.fs:inputs
155parameter which is an array of file system path(s) to the CTF trace(s).
156It also accepts an optional manparam:source.ctf.fs:clock-class-offset-ns
157parameter which is an offset, in nanoseconds, to add to all the clock
158classes (descriptors of stream clocks) found in the traces's metadata.
159+
160A component class can have a description and a help text.
0659f3af
PP
161
162[[comp]]Component::
163 A node within a <<graph,trace processing graph>>.
164+
165There are three types of components:
166+
167--
168Source component::
e70712b3 169 An input component which produces <<msg,messages>>.
0659f3af 170+
e70712b3 171Examples: CTF files input, log file input, LTTng live input, random
0659f3af
PP
172event generator.
173
174Filter component::
e70712b3
PP
175 An intermediate component which can transform the messages it
176 consumes, augment them, sort them, discard them, or create new ones.
0659f3af 177+
e70712b3
PP
178Examples: filter which removes messages based on an expression,
179filter which adds debugging information to selected events, message
180muxer, trace trimmer.
0659f3af
PP
181
182Sink component::
e70712b3
PP
183 An output component which consumes messages and usually writes them
184 to one or more formatted files.
0659f3af 185+
e70712b3
PP
186Examples: log file output, CTF files output, pretty-printed plain text
187output.
0659f3af
PP
188--
189+
190Components are connected together within a <<graph,trace processing
191graph>> through their <<port,ports>>. Source components have output
192ports, sink components have input ports, and filter components have
193both.
194+
195A component is the instance of a <<comp-cls,component class>>. The terms
e70712b3 196_component_ and _component class instance_ are equivalent.
0659f3af
PP
197+
198Within a trace processing graph, each component has a unique name. This
199is not the name of its component class, but an instance name. If `human`
e70712b3
PP
200is a component class name, than `Nancy` and `John` could be component
201names.
202+
203Once a <<graph,graph>> is configured (the first time it runs), you
204cannot add components to it for the remaining graph's lifetime.
0659f3af
PP
205
206[[port]]Port::
207 A connection point, on a <<comp,component>>, from which are sent or
e70712b3
PP
208 where are received <<msg,messages>> when the <<graph,trace
209 processing graph>> runs.
0659f3af 210+
e70712b3
PP
211An output port is from where messages are sent. An input port is where
212messages are received. Source components have output ports, sink
0659f3af
PP
213components have input ports, and filter components have both.
214+
e70712b3 215You can only connect an output port to a single input port.
0659f3af 216+
e70712b3
PP
217All ports do not need to be connected.
218+
219A filter or sink component receiving messages from its input ports
220is said to _consume_ messages.
0659f3af
PP
221+
222The link between an output port and input port is a <<conn,connection>>.
223+
e70712b3
PP
224Once a <<graph,graph>> is configured (the first time it runs), you
225cannot connect ports for the remaining graph's lifetime.
0659f3af
PP
226
227[[conn]]Connection::
228 The link between an output <<port,port>> and an input port through
e70712b3
PP
229 which <<msg,messages>> flow when a <<graph,trace processing
230 graph>> runs.
231
232[[msg-iter]]Message iterator::
233 An iterator on an input <<port,port>> of which the returned elements
234 are <<msg,messages>>.
235+
236A <<comp,component>> or another message iterator can create many message
237iterators on a single input port, before or while the <<graph,trace
238processing graph>> runs.
0659f3af 239
e70712b3
PP
240[[msg]]Message::
241 The element of a <<msg-iter,message iterator>>.
242+
243Messages flow from output <<port,ports>> to input ports.
0659f3af 244+
e70712b3
PP
245A source <<comp,component>> <<msg-iter,message iterator>> produces
246messages, while a sink component consumes them. A filter component
247message iterator can both consume and produce messages.
0659f3af 248+
e70712b3 249The main types of messages are:
0659f3af
PP
250+
251--
252Event::
e70712b3 253 A trace event record within a packet or within a stream.
0659f3af
PP
254
255Packet beginning::
256 The beginning of a packet within a stream.
257+
e70712b3 258A packet is a conceptual container of events.
0659f3af
PP
259
260Packet end::
261 The end of a packet within a stream.
262
263Stream beginning::
264 The beginning of a stream.
265+
e70712b3 266A stream is a conceptual container of packets and/or events.
0659f3af 267+
e70712b3
PP
268Usually, a given source component's output port sends packet and event
269messages which belong to a single stream, but it's not required.
0659f3af
PP
270
271Stream end::
272 The end of a stream.
273
274Discarded events::
275 A count of discarded events within a given time interval for a given
276 stream.
277
278Discarded packets::
279 A count of discarded packets within a given time interval for a
280 given stream.
281--
282
283[[graph]]Trace processing graph::
284 A https://en.wikipedia.org/wiki/Filter_graph[filter graph] where
e70712b3 285 nodes are <<comp,components>> and <<msg,messages>> flow from
0659f3af
PP
286 output <<port,ports>> to input ports.
287+
288You can build a trace processing graph with
e70712b3
PP
289<<libbabeltrace2,libbabeltrace2>>, with the
290<<python-bindings,Babeltrace~2 Python bindings>>, or with the
291man:babeltrace2-run(1) and man:babeltrace2-convert(1) CLI commands.
0659f3af 292+
e70712b3
PP
293When a trace processing graph _runs_, the sink components consume
294messages from their input ports, making all the graph's
295<<msg-iter,message iterators>> work one message at a time to perform the
296trace conversion or analysis duty.
0659f3af
PP
297
298[[plugin]]Plugin::
e70712b3
PP
299 A container, or package, of <<comp-cls,component classes>> as a
300 shared library or Python module.
0659f3af
PP
301+
302Each component class within a plugin has a type (source, filter, or
303sink) and a name. The type and name pair is unique within a given
304plugin.
305+
e70712b3
PP
306<<libbabeltrace2,libbabeltrace2>> can load a plugin (`.so`, `.dll`, or
307`.py` file) at run time: the result is a plugin object in which you can
308find a specific component class and instantiate it within a
309<<graph,trace processing graph>> as a <<comp,component>>.
0659f3af 310+
e70712b3
PP
311The <<babeltrace2,`babeltrace2` program>> uses the
312'COMP-CLS-TYPE.PLUGIN-NAME.COMP-CLS-NAME' format to identify a specific
313component class within a specific plugin. 'COMP-CLS-TYPE' is either
314`source` (or `src`), `filter` (or `flt`), or `sink`.
0659f3af 315+
e70712b3 316You can list the available Babeltrace~2 plugins with the
a8be4294 317man:babeltrace2-list-plugins(1) command.
0659f3af
PP
318
319[[query]]Query::
320 An operation with which you can get a named object from a
e70712b3 321 <<comp-cls,component class>>, possibly with custom query parameters.
0659f3af
PP
322+
323The plain text metadata stream of a CTF trace and the available LTTng
e70712b3
PP
324live sessions of a given LTTng relay daemon are examples of query
325objects.
0659f3af 326+
e70712b3
PP
327You can use <<libbabeltrace2,libbabeltrace2>>, the
328<<python-bindings,Babeltrace~2 Python bindings>>, or the
329man:babeltrace2-query(1) CLI command to query a component class's
330object.
0659f3af
PP
331
332
333[[graph-repr]]
e70712b3
PP
334== TRACE PROCESSING GRAPH REPRESENTATION
335
336In the Babeltrace~2 manual pages, a component is represented with a
337box. The box has the <<comp-cls,component class>> type,
338<<plugin,plugin>> name, and component class name at the top. Just below,
339between square brackets, is its component name within the <<graph,trace
0659f3af 340processing graph>>. Each <<port,port>> is represented with an `@` symbol
e70712b3
PP
341on the border(s) of the component box with its name inside the box.
342Output ports are on the box's right border while input ports are on the
343box's left border.
0659f3af
PP
344
345For example, here's a source component box:
346
347----
348+------------+
349| src.ctf.fs |
350| [my-src] |
351| |
352| stream0 @
353| stream1 @
354| stream2 @
355+------------+
356----
357
e70712b3
PP
358This one is an instance of the compcls:source.ctf.fs component class
359named `my-src`. It has three output ports named `stream0`, `stream1`,
360and `stream2`.
0659f3af
PP
361
362A trace processing graph is represented with multiple component boxes
363connected together. The <<conn,connections>> are arrows from output
364ports to input ports.
365
366For example, here's a simple conversion graph:
367
368----
369+------------+ +-----------------+ +------------------+
370| src.ctf.fs | | flt.utils.muxer | | sink.text.pretty |
371| [ctf] | | [muxer] | | [text] |
372| | | | | |
373| stream0 @--->@ in0 out @--->@ in |
374| stream1 @--->@ in1 | +------------------+
375| stream2 @--->@ in2 |
376+------------+ @ in3 |
377 +-----------------+
378----
379
e70712b3
PP
380Note that input port `in3` of component `muxer` is not connected in this
381example.
0659f3af
PP
382
383Sometimes, we symbolically represent other resources which are consumed
384from or produced by components. In this case, arrows are used, but they
e70712b3
PP
385do not go to or from port symbols (`@`), except for messages. For
386example, in the graph above, the `ctf` source component consumes a CTF
387trace and the `text` sink component prints plain text to the terminal,
388so here's a more complete diagram:
0659f3af
PP
389
390----
e70712b3
PP
391CTF trace
392 |
393 | +------------+ +-----------------+ +------------------+
394 | | src.ctf.fs | | flt.utils.muxer | | sink.text.pretty |
395 '-->| [ctf] | | [muxer] | | [text] |
396 | | | | | |
397 | stream0 @--->@ in0 out @--->@ in |
398 | stream1 @--->@ in1 | +-----+------------+
399 | stream2 @--->@ in2 | |
400 +------------+ @ in3 | '--> Terminal
401 +-----------------+
0659f3af
PP
402----
403
404Here's another example of a more complex graph which splits a specific
405stream using some criteria:
406
407----
408+------------+ +-----------------+ +------------------+
409| src.ctf.fs | | flt.utils.muxer | | sink.text.pretty |
410| [ctf-in] | | [muxer] | | [text] |
411| | | | | |
412| stream0 @--->@ in0 out @--->@ in |
413| stream1 @--->@ in1 | +------------------+
414| stream2 @-. @ in2 |
415+------------+ | +-----------------+ +-------------+
416 | | sink.ctf.fs |
417 | | [ctf-out0] |
418 | +-------------------+ | |
419 | | flt.some.splitter | .->@ in |
420 | | [splitter] | | +-------------+
421 | | | |
422 '->@ in A @-' +-------------+
423 | B @-. | sink.ctf.fs |
424 +-------------------+ | | [ctf-out1] |
425 | | |
426 '->@ in |
427 +-------------+
428----
429
430
431include::common-footer.txt[]
432
433
e70712b3
PP
434== SEE ALSO
435
a8be4294 436man:babeltrace2(1)
This page took 0.057618 seconds and 4 git commands to generate.