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