This section describes how to visualize the data gathered after tracing
the Linux kernel or a user space application.
-Many ways exist to read your LTTng traces:
+Many ways exist to read LTTng traces:
* **`babeltrace`** is a command line utility which converts trace formats;
it supports the format used by LTTng,
<abbr title="Common Trace Format">CTF</abbr>, as well as a basic
text output which may be `grep`ed. The `babeltrace` command is
part of the
- <a href="http://www.efficios.com/babeltrace" class="ext">Babeltrace</a> project.
- * Babeltrace also includes a **Python binding** so that you may
+ <a href="http://diamon.org/babeltrace" class="ext">Babeltrace</a> project.
+ * Babeltrace also includes **Python bindings** so that you may
easily open and read an LTTng trace with your own script, benefiting
from the power of Python.
- * The **<a href="https://eclipse.org/downloads/packages/eclipse-ide-cc-developers/lunar" class="ext">
- Eclise IDE for C/C++ Developers</a>**
- includes the Tracing and Monitoring Framework (TMF) plugin which
- supports LTTng traces, amongst others.
- * <a href="http://projects.eclipse.org/projects/tools.tracecompass">Trace Compass</a>
- is an Eclipse plugin, the TMF plugin mentioned above moved to its own
- project, used to visualize and analyze various types of traces,
- including LTTng. It also comes as a standalone application and can be
- downloaded from
- <a href="http://secretaire.dorsal.polymtl.ca/~gbastien/TracingRCP/TraceCompass/">here</a>
- for a daily build of the latest source code. A version containing some
- experimental features like Virtual Machine analysis and Critical Path
- analysis is also available
- <a href="http://secretaire.dorsal.polymtl.ca/~gbastien/TracingRCP/DorsalExperimental/">here</a>.
-
-LTTng trace files are usually recorded in the `~/lttng-traces` directory.
+ * **<a href="http://tracecompass.org/" class="ext">Trace Compass</a>**
+ is an Eclipse plugin used to visualize and analyze various types of
+ traces, including LTTng's. It also comes as a standalone application.
+
+LTTng trace files are recorded in the `~/lttng-traces` directory by default.
Let's now view the trace and perform a basic analysis using
`babeltrace`.
babeltrace ~/lttng-traces/my-session
</pre>
-`babeltrace` will find all traces within the given path recursively and
-output all their events, merging them intelligently.
+`babeltrace` finds all traces recursively within the given path and
+prints all their events, merging them in order of time.
Listing all the system calls of a Linux kernel trace with their arguments is
easy with `babeltrace` and `grep`:
Counting events is also straightforward:
<pre class="term">
-babeltrace ~/lttng-traces/my-kernel-session | grep sys_read | wc -l
+babeltrace ~/lttng-traces/my-kernel-session | grep sys_read | wc --lines
</pre>
The text output of `babeltrace` is useful for isolating events by simple
most basic computations involving multiple events are virtually impossible
to implement.
-Fortunately, Babeltrace ships with a Python 3 binding which makes it
+Fortunately, Babeltrace ships with Python 3 bindings which makes it
really easy to read the events of an LTTng trace sequentially and compute
the desired information.
-Here's a simple example using the Babeltrace Python binding. The following
+Here's a simple example using the Babeltrace Python bindings. The following
script accepts an LTTng Linux kernel trace path as its first argument and
-outputs the short names of the top 5 running processes on CPU 0 during the
+prints the short names of the top 5 running processes on CPU 0 during the
whole trace:
~~~ python
last_ts = cur_ts
# display top 10
- for name, ns in exec_times.most_common()[:5]:
+ for name, ns in exec_times.most_common(5):
s = ns / 1000000000
print('{:20}{} s'.format(name, s))
</pre>
Make sure the path you provide is the directory containing actual trace
-files (`channel0_0`, `metadata`, etc.): the `babeltrace` utility recurses
-directories, but the Python binding does not.
+files (`channel0_0`, `metadata`, and the rest): the `babeltrace` utility
+recurses directories, but the Python bindings do not.
Here's an example of output: