update features
[lttv.git] / trunk / lttv / QUICKSTART.html
CommitLineData
c924c2c6 1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3<head>
bc58079d 4 <title>Linux Trace Toolkit Next Generation User Documentation</title>
c924c2c6 5</head>
6 <body>
7
bc58079d 8<h1>Linux Trace Toolkit Next Generation User Documentation</h1>
c924c2c6 9
c924c2c6 10Author : Mathieu Desnoyers, September 2005<br>
24070967 11Last update : January 21st, 2009<br>
bc58079d 12(originally known as the LTTng QUICKSTART guide)
24070967 13
14<h2>Table of Contents</h2>
15<ul>
16
f9ff56f3 17<li><a href="#intro" name="TOCintro">Introduction</a></li>
24070967 18<li><a href="#section1" name="TOCsection1">Installing LTTng and LTTV from
6f88b01d 19sources</a></li>
38b04cd7 20<ul>
2d540155 21<li><a href="#prerequisites" name="TOCprerequisites">Prerequisistes</li>
22<li><a href="#getlttng" name="TOCgetlttng">Getting the LTTng packages</li>
23<li><a href="#getlttngsrc" name="TOCgetlttngsrc">Getting the LTTng kernel sources</li>
24<li><a href="#installlttng" name="TOCinstalllttng">Installing a LTTng kernel</li>
6f88b01d 25<li><a href="#editconfig" name="TOCeditconfig">Editing the system wide
26configuration</a>
27<li><a href="#getlttctl" name="TOCgetlttctl">Getting and installing the
2d540155 28ltt-control package</li>
29<li><a href="#userspacetracing" name="TOCuserspacetracing">Userspace Tracing</li>
6f88b01d 30<li><a href="#getlttv" name="TOCgetlttv">Getting and installing the LTTV package</ul>
24070967 31<li><a href="#section2" name="TOCsection2">Using LTTng and LTTV</a></li>
32<li><a href="#section3" name="TOCsection3">Adding kernel and user-space
47e2b195 33instrumentation</a>
34<ul>
35<li><a href="#kerneltp" name="TOCkerneltp">Adding kernel instrumentation</a></li>
36<li><a href="#usertp" name="TOCusertp">Adding userspace instrumentation</a></li>
37</ul>
633bc4a3 38<li><a href="#section4" name="TOCsection4">Creating Debian and RPM packages
98dde887 39from LTTV</a></li>
40<ul>
41<li><a href="#pkgdebian" name="TOCpkgdebian">Create custom LTTV Debian
42<li><a href="#pkglttng" name="TOCpkglttng">Create custom LTTng packages</a></li>
43
44</ul>
c924c2c6 45
f9ff56f3 46</ul>
47
48<hr />
49
b9e1fab1 50<h2><a href="#TOCintro" name="intro">Introduction</a></h2>
c924c2c6 51<p>
633bc4a3 52This document is made of four parts : the first one explains how
24070967 53to install LTTng and LTTV from sources, the second one describes the steps
633bc4a3 54to follow to trace a system and view it. The third part explains
c924c2c6 55briefly how to add a new trace point to the kernel and to user space
633bc4a3 56applications. The fourth and last part explains how to create Debian or RPM
57packages from the LTTng and LTTV sources.
c924c2c6 58<p>
24070967 59These operations are made for installing the LTTng 0.86 tracer on a linux 2.6.X
c924c2c6 60kernel. You will also find instructions for installation of LTTV 0.12.x : the
61Linux Trace Toolkit Viewer.
24070967 62To see the list of compatibilities between LTTng, ltt-control, LTTV, please
63refer to :
c924c2c6 64<a
65href="http://ltt.polymtl.ca/svn/trunk/lttv/doc/developer/lttng-lttv-compatibility.html">LTTng+LTTV versions compatibility</a>
24070967 66The lttng patch is necessary to have the tracing hooks in the kernel.
c924c2c6 67
24070967 68<br>
69<br>
633bc4a3 70Supported architectures :
6f88b01d 71br>
c924c2c6 72LTTng :<br>
c924c2c6 73<li> x86 32/64 bits
74<li> PowerPC 32 and 64 bits
75<li> ARM (with limited timestamping precision, e.g. 1HZ. Need
76architecture-specific support for better precision)
77<li> MIPS
78<br>
24070967 79<br>
c924c2c6 80LTTV :<br>
c924c2c6 81<li> Intel 32/64 bits
82<li> PowerPC 32 and 64 bits
83<li> Possibly others. Takes care of endianness and type size difference between
84the LTTng traces and the LTTV analysis tool.
85
f9ff56f3 86<hr />
87
c924c2c6 88
89aa576c 89<h2><a href="#TOCsection1" name="section1">Installation from sources</a></h2>
633bc4a3 90<p>
c924c2c6 91
6f88b01d 92<h3><a href="#TOCprerequisites" name="prerequisites">Prerequisites</a></h3>
633bc4a3 93<ul>
94<p>
c924c2c6 95Tools needed to follow the package download steps :
96
633bc4a3 97<li>wget
98<li>bzip2
99<li>gzip
100<li>tar
c924c2c6 101
633bc4a3 102<p>
c924c2c6 103You have to install the standard development libraries and programs necessary
104to compile a kernel :
105
84cf5903 106<PRE>
c924c2c6 107(from Documentation/Changes in the Linux kernel tree)
84cf5903 108Gnu C 2.95.3 # gcc --version
109Gnu make 3.79.1 # make --version
110binutils 2.12 # ld -v
111util-linux 2.10o # fdformat --version
112module-init-tools 0.9.10 # depmod -V
113</PRE>
c924c2c6 114
633bc4a3 115<p>
c924c2c6 116You might also want to have libncurses5 to have the text mode kernel
117configuration menu, but there are alternatives.
118
633bc4a3 119<p>
c924c2c6 120Prerequisites for LTTV 0.x.x installation are :
121
84cf5903 122<PRE>
123gcc 3.2 or better
124gtk 2.4 or better development libraries
c924c2c6 125 (Debian : libgtk2.0, libgtk2.0-dev)
126 (Fedora : gtk2, gtk2-devel)
127 note : For Fedora users : this might require at least core 3 from Fedora,
128 or you might have to compile your own GTK2 library.
84cf5903 129glib 2.4 or better development libraries
c924c2c6 130 (Debian : libglib2.0-0, libglib2.0-dev)
131 (Fedora : glib2, glib2-devel)
84cf5903 132libpopt development libraries
c924c2c6 133 (Debian : libpopt0, libpopt-dev)
134 (Fedora : popt)
84cf5903 135libpango development libraries
c924c2c6 136 (Debian : libpango1.0, libpango1.0-dev)
137 (Fedora : pango, pango-devel)
84cf5903 138libc6 development librairies
c924c2c6 139 (Debian : libc6, libc6-dev)
140 (Fedora : glibc, glibc)
84cf5903 141</PRE>
633bc4a3 142</ul>
c924c2c6 143
c8997124 144<li>Reminder</li>
c924c2c6 145
c8997124 146<p>
633bc4a3 147See the list of compatibilities between LTTng, ltt-control and LTTV at :
148<a
149href="http://ltt.polymtl.ca/svn/trunk/lttv/doc/developer/lttng-lttv-compatibility.html">LTTng+LTTV
150versions compatibility</a>.
c924c2c6 151
152
6f88b01d 153<h3><a href="#TOCgetlttng" name="getlttng">Getting the LTTng packages</a></h3>
c924c2c6 154
c8997124 155<PRE>
c924c2c6 156su -
157mkdir /usr/src/lttng
158cd /usr/src/lttng
159(see http://ltt.polymtl.ca/lttng for package listing)
160wget http://ltt.polymtl.ca/lttng/patch-2.6.X-lttng-0.x.xx.tar.bz2
161bzip2 -cd patch-2.6.X-lttng-0.x.xx.tar.bz2 | tar xvof -
c8997124 162</PRE>
c924c2c6 163
164
6f88b01d 165<h3><a href="#TOCgetlttngsrc" name="getlttngsrc">Getting LTTng kernel sources</a></h3>
c924c2c6 166
c8997124 167<PRE>
c924c2c6 168su -
169cd /usr/src
170wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.X.tar.bz2
171bzip2 -cd linux-2.6.X.tar.bz2 | tar xvof -
172cd linux-2.6.X
173- For LTTng 0.9.4- cat /usr/src/lttng/patch*-2.6.X-lttng-0.x.xx* | patch -p1
174- For LTTng 0.9.5+ apply the patches in the order specified in the series file,
175 or use quilt
176cd ..
177mv linux-2.6.X linux-2.6.X-lttng-0.x.xx
c8997124 178</PRE>
c924c2c6 179
180
6f88b01d 181<h3><a href="#TOCinstalllttng" name="installlttng">Installing a LTTng kernel</a></h3>
c924c2c6 182
c8997124 183<PRE>
c924c2c6 184su -
185cd /usr/src/linux-2.6.X-lttng-0.x.xx
186make menuconfig (or make xconfig or make config)
187 Select the < Help > button if you are not familiar with kernel
188 configuration.
189 Items preceded by [*] means they has to be built into the kernel.
190 Items preceded by [M] means they has to be built as modules.
191 Items preceded by [ ] means they should be removed.
192 go to the "General setup" section
193 Select the following options :
194 [*] Prompt for development and/or incomplete code/drivers
195 [*] Activate markers
196 [*] Activate userspace markers ABI (experimental, optional)
197 [*] Immediate value optimization (optional)
198 [*] Linux Trace Toolkit Next Generation (LTTng) --->
199 <M> or <*> Compile lttng tracing probes
200 <M> or <*> Linux Trace Toolkit High-speed Lockless Data Relay
201 <M> or <*> Linux Trace Toolkit Lock-Protected Data Relay
202 <M> or <*> Linux Trace Toolkit Serializer
203 <M> or <*> Linux Trace Toolkit Marker Control
204 <M> or <*> Linux Trace Toolkit Tracer
205 [*] Align Linux Trace Toolkit Traces
206 <M> or <*> Support logging events from userspace
207 [*] Support trace extraction from crash dump
208 <M> or <*> Linux Trace Toolkit Trace Controller
209 <M> or <*> Linux Trace Toolkit State Dump
210 Select <Exit>
211 Select <Exit>
212 Select <Yes>
213make
214make modules_install
215(if necessary, create a initrd with mkinitrd or your preferate alternative)
216(mkinitrd -o /boot/initrd.img-2.6.X-lttng-0.x.xx 2.6.X-lttng-0.x.xx)
217
218-- on X86, X86_64
219make install
220reboot
221Select the Linux 2.6.X-lttng-0.x.xx kernel in your boot loader.
222
223-- on PowerPC
224cp vmlinux.strip /boot/vmlinux-2.6.X-lttng-0.x.xx
225cp System.map /boot/System.map-2.6.X-lttng-0.x.xx
226cp .config /boot/config-2.6.X-lttng-0.x.xx
227depmod -ae -F /boot/System.map-2.6.X-lttng-0.x.xx 2.6.X-lttng-0.x.xx
228mkinitrd /boot/initrd.img-2.6.X-lttng-0.x.xx 2.6.X-lttng-0.x.xx
229(edit /etc/yaboot.conf to add a new entry pointing to your kernel : the entry
230that comes first is the default kernel)
231ybin
232select the right entry at the yaboot prompt (see choices : tab, select : type
233the kernel name followed by enter)
234Select the Linux 2.6.X-lttng-0.x.xx kernel in your boot loader.
235--
c8997124 236</PRE>
c924c2c6 237
6f88b01d 238<h3><a href="#TOCeditconfig" name="editconfig">Editing the system wide
239configuration</a></h3>
c924c2c6 240
c8997124 241<p>
c924c2c6 242You must activate debugfs and specify a mount point. This is typically done in
c8997124 243fstab such that it happens at boot time. If you have never used DebugFS before,
244these operation would do this for you :
c924c2c6 245
c8997124 246<PRE>
c924c2c6 247mkdir /mnt/debugfs
248cp /etc/fstab /etc/fstab.lttng.bkp
249echo "debugfs /mnt/debugfs debugfs rw 0 0" >> /etc/fstab
c8997124 250</PRE>
c924c2c6 251
c8997124 252<p>
c924c2c6 253then, rebooting or issuing the following command will activate debugfs :
c8997124 254<PRE>
c924c2c6 255mount /mnt/debugfs
c8997124 256</PRE>
c924c2c6 257
c8997124 258<p>
c924c2c6 259You need to load the LTT modules to be able to control tracing from user
260space. This is done by issuing the following commands. Note however
261these commands load all LTT modules. Depending on what options you chose to
262compile statically, you may not need to issue all these commands.
263
c8997124 264<PRE>
c924c2c6 265modprobe ltt-trace-control
266modprobe ltt-marker-control
267modprobe ltt-tracer
268modprobe ltt-serialize
269modprobe ltt-relay
270modprobe ipc-trace
271modprobe kernel-trace
272modprobe mm-trace
273modprobe net-trace
274modprobe fs-trace
275modprobe jbd2-trace
276modprobe ext4-trace
277modprobe syscall-trace
278modprobe trap-trace
279#if locking tracing is wanted, uncomment the following
280#modprobe lockdep-trace
c8997124 281</PRE>
c924c2c6 282
c8997124 283<p>
c924c2c6 284If you want to have complete information about the kernel state (including all
285the process names), you need to load the ltt-statedump module. This is done by
286issuing the command :
287
c8997124 288<PRE>
c924c2c6 289modprobe ltt-statedump
c8997124 290</PRE>
291<p>
c924c2c6 292You can automate at boot time loading the ltt-control module by :
293
c8997124 294<PRE>
c924c2c6 295cp /etc/modules /etc/modules.bkp
296echo ltt-trace-control >> /etc/modules
297echo ltt-marker-control >> /etc/modules
298echo ltt-tracer >> /etc/modules
299echo ltt-serialize >> /etc/modules
300echo ltt-relay >> /etc/modules
301echo ipc-trace >> /etc/modules
302echo kernel-trace >> /etc/modules
303echo mm-trace >> /etc/modules
304echo net-trace >> /etc/modules
305echo fs-trace >> /etc/modules
306echo jbd2-trace >> /etc/modules
307echo ext4-trace >> /etc/modules
308echo syscall-trace >> /etc/modules
309echo trap-trace >> /etc/modules
310#if locking tracing is wanted, uncomment the following
311#echo lockdep-trace >> /etc/modules
c8997124 312</PRE>
c924c2c6 313
6f88b01d 314
315<h3><a href="#TOCgetlttctl" name="getlttctl">Getting and installing the
316ltt-control package (on the traced machine)</a></h3>
c8997124 317<p>
c924c2c6 318(note : the ltt-control package contains lttd and lttctl. Although it has the
319same name as the ltt-control kernel module, they are *not* the same thing.)
c8997124 320
321<PRE>
c924c2c6 322su -
323cd /usr/src
324wget http://ltt.polymtl.ca/lttng/ltt-control-0.x-xxxx2006.tar.gz
325gzip -cd ltt-control-0.x-xxxx2008.tar.gz | tar xvof -
326cd ltt-control-0.x-xxxx2006
327(refer to README to see the development libraries that must be installed on you
328system)
329./configure
330make
331make install
c8997124 332</PRE>
c924c2c6 333
38b04cd7 334<h3><a href="#TOCuserspacetracing" name="userspacetracing">Userspace tracing</a></h3>
c924c2c6 335
c8997124 336<PRE>
c924c2c6 337Make sure you selected the kernel menuconfig option :
338 <M> or <*> Support logging events from userspace
339And that the ltt-userspace-event kernel module is loaded if selected as a
340module.
341
342Simple userspace tracing is available through
343echo "some text to record" > /mnt/debugfs/ltt/write_event
344
345It will appear in the trace under event :
346channel : userspace
347event name : event
c8997124 348</PRE>
c924c2c6 349
6f88b01d 350<h3><a href="#TOCgetlttv" name="getlttv">Getting and installing the LTTV package
351(on the visualisation machine, same
352or different from the visualisation machine)</a></h3>
c924c2c6 353
c8997124 354<PRE>
c924c2c6 355su -
356cd /usr/src
357wget http://ltt.polymtl.ca/packages/lttv-0.x.xx-xxxx2008.tar.gz
358gzip -cd lttv-0.x.xx-xxxx2008.tar.gz | tar xvof -
359cd lttv-0.x.xx-xxxx2008
360(refer to README to see the development libraries that must be installed on your
361system)
362./configure
363make
364make install
13d7a628 365</PRE>
c924c2c6 366
c8997124 367<hr />
c924c2c6 368
c924c2c6 369
89aa576c 370<h2><a href="#TOCsection2" name="section2">Using LTTng and LTTV</a></h2>
c924c2c6 371
c8997124 372<li>IMPORTANT : Arm Linux Kernel Markers after each boot</li>
c8997124 373<PRE>
c924c2c6 374ltt-armall
c8997124 375</PRE>
c924c2c6 376
c8997124 377<li>Use graphical LTTV to control tracing and analyse traces</li>
c8997124 378<PRE>
c924c2c6 379lttv-gui (or /usr/local/bin/lttv-gui)
380 - Spot the "Tracing Control" icon : click on it
381 (it's a traffic light icon)
382 - enter the root password
383 - click "start"
384 - click "stop"
385 - Yes
386 * You should now see a trace
c8997124 387</PRE>
c924c2c6 388
c8997124 389<li>Use text mode LTTng to control tracing</li>
c8997124 390<PRE>
c924c2c6 391The tracing can be controlled from a terminal by using the lttctl command (as
392root).
393
394Start tracing :
395
396lttctl -C -w /tmp/trace1 trace1
397
398Stop tracing and destroy trace channels :
399
400lttctl -D trace1
401
402see lttctl --help for details.
df7f63ab 403</PRE>
c8997124 404<p>
c924c2c6 405(note : to see if the buffers has been filled, look at the dmesg output after
406lttctl -R or after stopping tracing from the GUI, it will show an event lost
407count. If it is the case, try using larger buffers. See lttctl --help to learn
408how. lttv now also shows event lost messages in the console when loading a trace
409with missing events or lost subbuffers.)
410
c8997124 411<li>Use text mode LTTV</li>
c8997124 412<p>
c924c2c6 413Feel free to look in /usr/local/lib/lttv/plugins to see all the text and
414graphical plugins available.
c8997124 415<p>
c924c2c6 416For example, a simple trace dump in text format is available with :
c8997124 417<PRE>
c924c2c6 418lttv -m textDump -t /tmp/trace
c8997124 419</PRE>
c8997124 420<p>
421See lttv -m textDump --help for detailed command line options of textDump.
c8997124 422<p>
c924c2c6 423It is, in the current state of the project, very useful to use "grep" on the
424text output to filter by specific event fields. You can later copy the timestamp
425of the events to the clipboard and paste them in the GUI by clicking on the
426bottom right label "Current time". Support for this type of filtering should
427be added to the filter module soon.
428
c8997124 429<li>Hybrid mode</li>
c8997124 430<p>
c924c2c6 431Starting from LTTng 0.5.105 and ltt-control 0.20, a new mode can be used :
432hybrid. It can be especially useful when studying big workloads on a long period
433of time.
c8997124 434<p>
c924c2c6 435When using this mode, the most important, low rate control information will be
436recorded during all the trace by lttd (i.e. process creation/exit). The high
437rate information (i.e. interrupt/traps/syscall entry/exit) will be kept in a
438flight recorder buffer (now named flight-channelname_X).
c8997124 439<p>
c924c2c6 440The following lttctl commands take an hybrid trace :
c8997124 441<p>
c924c2c6 442Create trace channel, start lttd on normal channels, start tracing:
c8997124 443<PRE>
c924c2c6 444lttctl -C -w /tmp/trace2 -o channel.kernel.overwrite=1 trace2
c8997124 445</PRE>
446<p>
c924c2c6 447Stop tracing, start lttd on flight recorder channels, destroy trace channels :
c8997124 448<PRE>
c924c2c6 449lttctl -D -w /tmp/trace2 trace2
c8997124 450</PRE>
451<p>
c924c2c6 452Each "overwrite" channel is flight recorder channel.
453
c8997124 454<li>Flight recorder mode</li>
c8997124 455<p>
c924c2c6 456The flight recorder mode writes data into overwritten buffers for all channels,
457including control channels, except for the facilities tracefiles. It consists of
458setting all channels to "overwrite".
c8997124 459<p>
c924c2c6 460The following lttctl commands take a flight recorder trace :
c8997124 461<PRE>
c924c2c6 462lttctl -C -w /tmp/trace3 -o channel.all.overwrite=1 trace3
463...
464lttctl -D -w /tmp/trace3 trace3
c8997124 465</PRE>
c924c2c6 466
89aa576c 467<hr />
468
469
470<h2><a href="#TOCsection3" name="section3">Adding new instrumentations with the
471markers</a></h2>
472<p>
c924c2c6 473
47e2b195 474<h3><a href="#TOCkerneltp" name="kerneltp">Adding kernel
475instrumentation</a></h3>
476
89aa576c 477<p>
47e2b195 478See <a
479href="http://git.kernel.org/?p=linux/kernel/git/compudj/linux-2.6-lttng.git;a=blob;f=Documentation/markers.txt">Documentation/markers.txt</a>
480and <a
481href="http://git.kernel.org/?p=linux/kernel/git/compudj/linux-2.6-lttng.git;a=blob;f=Documentation/tracepoints.txt">Documentation/tracepoints.txt</a> in your kernel
c924c2c6 482tree.
47e2b195 483<p>
484Also see <a
485href="http://git.kernel.org/?p=linux/kernel/git/compudj/linux-2.6-lttng.git;a=tree;f=ltt/probes">ltt/probes/</a>
486for LTTng probe examples.
487
488<h3><a href="#TOCusertp" name="usertp">Adding userspace instrumentation</a></h3>
c924c2c6 489
2e4e30d7 490<li>Add new events to userspace programs with
491<a href="http://ltt.polymtl.ca/packages/">userspace markers packages</a></li>
c924c2c6 492
89aa576c 493<p>
c924c2c6 494Get the latest markers-userspace-*.tar.bz2 and see the Makefile and examples. It
495allows inserting markers in executables and libraries, currently only on x86_32
496and x86_64.
e01a1ce1 497See <a
498href="http://ltt.polymtl.ca/packages/markers-userspace-0.5.tar.bz2">markers-userspace-0.5.tar.bz2</a> or more recent.
499
38b04cd7 500<p>
e01a1ce1 501Note that a new design document for a 3rd generation of tracepoint/marker-based
502userspace tracing is available at <a
503href="http://ltt.polymtl.ca/svn/trunk/lttv/doc/developer/ust.html">LTTng User-space Tracing
98dde887 504Design</a>. This new infrastructure is not yet implemented.
38b04cd7 505
506<p>
507The easy quick-and-dirty way to perform userspace tracing is currently to write
508an string to /mnt/debugfs/ltt/write_event. See <a
509href="#userspacetracing">Userspace tracing</a> in the
510installation for sources section of this document.
e01a1ce1 511
89aa576c 512<hr />
633bc4a3 513
89aa576c 514<h2><a href="#TOCsection4" name="section4">Creating Debian or RPM packages</a></h2>
515<p>
633bc4a3 516
98dde887 517<h3><a href="#TOCpkgdebian" name="pkgdebian">Create custom LTTV Debian packages</a></h3>
633bc4a3 518
89aa576c 519<PRE>
520Use : dpkg-buildpackage -rfakeroot
521</PRE>
522<p>
633bc4a3 523You should then have your LTTV .deb files created for your architecture.
524
98dde887 525<h3><a href="#TOCpkglttng" name="pkglttng">Create custom LTTng packages</a></h3>
89aa576c 526<p>
633bc4a3 527For building LTTng Debian packages :
89aa576c 528get the build tree with patches applies as explained in section 2.
633bc4a3 529
89aa576c 530<PRE>
633bc4a3 531make menuconfig (or xconfig or config) (customize your configuration)
532make-kpkg kernel_image
89aa576c 533</PRE>
534<p>
633bc4a3 535You will then see your freshly created .deb in /usr/src. Install it with
89aa576c 536<PRE>
633bc4a3 537dpkg -i /usr/src/(image-name).deb
89aa576c 538</PRE>
539<p>
633bc4a3 540Then, follow the section "Editing the system wide configuration" in section 2.
541
542
543
c924c2c6 544 </body>
545</html>
This page took 0.048242 seconds and 4 git commands to generate.