update features
[lttv.git] / trunk / lttv / QUICKSTART.html
... / ...
CommitLineData
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3<head>
4 <title>Linux Trace Toolkit Next Generation User Documentation</title>
5</head>
6 <body>
7
8<h1>Linux Trace Toolkit Next Generation User Documentation</h1>
9
10Author : Mathieu Desnoyers, September 2005<br>
11Last update : January 21st, 2009<br>
12(originally known as the LTTng QUICKSTART guide)
13
14<h2>Table of Contents</h2>
15<ul>
16
17<li><a href="#intro" name="TOCintro">Introduction</a></li>
18<li><a href="#section1" name="TOCsection1">Installing LTTng and LTTV from
19sources</a></li>
20<ul>
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>
25<li><a href="#editconfig" name="TOCeditconfig">Editing the system wide
26configuration</a>
27<li><a href="#getlttctl" name="TOCgetlttctl">Getting and installing the
28ltt-control package</li>
29<li><a href="#userspacetracing" name="TOCuserspacetracing">Userspace Tracing</li>
30<li><a href="#getlttv" name="TOCgetlttv">Getting and installing the LTTV package</ul>
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
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
39<li><a href="#section4" name="TOCsection4">Creating Debian and RPM packages
40from LTTV</a>
41
42</ul>
43
44<hr />
45
46<h2><a href="#TOCintro" name="intro">Introduction</a></h2>
47<p>
48This document is made of four parts : the first one explains how
49to install LTTng and LTTV from sources, the second one describes the steps
50to follow to trace a system and view it. The third part explains
51briefly how to add a new trace point to the kernel and to user space
52applications. The fourth and last part explains how to create Debian or RPM
53packages from the LTTng and LTTV sources.
54<p>
55These operations are made for installing the LTTng 0.86 tracer on a linux 2.6.X
56kernel. You will also find instructions for installation of LTTV 0.12.x : the
57Linux Trace Toolkit Viewer.
58To see the list of compatibilities between LTTng, ltt-control, LTTV, please
59refer to :
60<a
61href="http://ltt.polymtl.ca/svn/trunk/lttv/doc/developer/lttng-lttv-compatibility.html">LTTng+LTTV versions compatibility</a>
62The lttng patch is necessary to have the tracing hooks in the kernel.
63
64<br>
65<br>
66Supported architectures :
67br>
68LTTng :<br>
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>
75<br>
76LTTV :<br>
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
82<hr />
83
84
85<h2><a href="#TOCsection1" name="section1">Installation from sources</a></h2>
86<p>
87
88<h3><a href="#TOCprerequisites" name="prerequisites">Prerequisites</a></h3>
89<ul>
90<p>
91Tools needed to follow the package download steps :
92
93<li>wget
94<li>bzip2
95<li>gzip
96<li>tar
97
98<p>
99You have to install the standard development libraries and programs necessary
100to compile a kernel :
101
102<PRE>
103(from Documentation/Changes in the Linux kernel tree)
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>
110
111<p>
112You might also want to have libncurses5 to have the text mode kernel
113configuration menu, but there are alternatives.
114
115<p>
116Prerequisites for LTTV 0.x.x installation are :
117
118<PRE>
119gcc 3.2 or better
120gtk 2.4 or better development libraries
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.
125glib 2.4 or better development libraries
126 (Debian : libglib2.0-0, libglib2.0-dev)
127 (Fedora : glib2, glib2-devel)
128libpopt development libraries
129 (Debian : libpopt0, libpopt-dev)
130 (Fedora : popt)
131libpango development libraries
132 (Debian : libpango1.0, libpango1.0-dev)
133 (Fedora : pango, pango-devel)
134libc6 development librairies
135 (Debian : libc6, libc6-dev)
136 (Fedora : glibc, glibc)
137</PRE>
138</ul>
139
140<li>Reminder</li>
141
142<p>
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>.
147
148
149<h3><a href="#TOCgetlttng" name="getlttng">Getting the LTTng packages</a></h3>
150
151<PRE>
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 -
158</PRE>
159
160
161<h3><a href="#TOCgetlttngsrc" name="getlttngsrc">Getting LTTng kernel sources</a></h3>
162
163<PRE>
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
174</PRE>
175
176
177<h3><a href="#TOCinstalllttng" name="installlttng">Installing a LTTng kernel</a></h3>
178
179<PRE>
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--
232</PRE>
233
234<h3><a href="#TOCeditconfig" name="editconfig">Editing the system wide
235configuration</a></h3>
236
237<p>
238You must activate debugfs and specify a mount point. This is typically done in
239fstab such that it happens at boot time. If you have never used DebugFS before,
240these operation would do this for you :
241
242<PRE>
243mkdir /mnt/debugfs
244cp /etc/fstab /etc/fstab.lttng.bkp
245echo "debugfs /mnt/debugfs debugfs rw 0 0" >> /etc/fstab
246</PRE>
247
248<p>
249then, rebooting or issuing the following command will activate debugfs :
250<PRE>
251mount /mnt/debugfs
252</PRE>
253
254<p>
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
260<PRE>
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
277</PRE>
278
279<p>
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
284<PRE>
285modprobe ltt-statedump
286</PRE>
287<p>
288You can automate at boot time loading the ltt-control module by :
289
290<PRE>
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
308</PRE>
309
310
311<h3><a href="#TOCgetlttctl" name="getlttctl">Getting and installing the
312ltt-control package (on the traced machine)</a></h3>
313<p>
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.)
316
317<PRE>
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
328</PRE>
329
330<h3><a href="#TOCuserspacetracing" name="userspacetracing">Userspace tracing</a></h3>
331
332<PRE>
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
344</PRE>
345
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>
349
350<PRE>
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
361</PRE>
362
363<hr />
364
365
366<h2><a href="#TOCsection2" name="section2">Using LTTng and LTTV</a></h2>
367
368<li>IMPORTANT : Arm Linux Kernel Markers after each boot</li>
369<PRE>
370ltt-armall
371</PRE>
372
373<li>Use graphical LTTV to control tracing and analyse traces</li>
374<PRE>
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
383</PRE>
384
385<li>Use text mode LTTng to control tracing</li>
386<PRE>
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.
399</PRE>
400<p>
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
407<li>Use text mode LTTV</li>
408<p>
409Feel free to look in /usr/local/lib/lttv/plugins to see all the text and
410graphical plugins available.
411<p>
412For example, a simple trace dump in text format is available with :
413<PRE>
414lttv -m textDump -t /tmp/trace
415</PRE>
416<p>
417See lttv -m textDump --help for detailed command line options of textDump.
418<p>
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
425<li>Hybrid mode</li>
426<p>
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.
430<p>
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).
435<p>
436The following lttctl commands take an hybrid trace :
437<p>
438Create trace channel, start lttd on normal channels, start tracing:
439<PRE>
440lttctl -C -w /tmp/trace2 -o channel.kernel.overwrite=1 trace2
441</PRE>
442<p>
443Stop tracing, start lttd on flight recorder channels, destroy trace channels :
444<PRE>
445lttctl -D -w /tmp/trace2 trace2
446</PRE>
447<p>
448Each "overwrite" channel is flight recorder channel.
449
450<li>Flight recorder mode</li>
451<p>
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".
455<p>
456The following lttctl commands take a flight recorder trace :
457<PRE>
458lttctl -C -w /tmp/trace3 -o channel.all.overwrite=1 trace3
459...
460lttctl -D -w /tmp/trace3 trace3
461</PRE>
462
463<hr />
464
465
466<h2><a href="#TOCsection3" name="section3">Adding new instrumentations with the
467markers</a></h2>
468<p>
469
470<h3><a href="#TOCkerneltp" name="kerneltp">Adding kernel
471instrumentation</a></h3>
472
473<p>
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
478tree.
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>
485
486<li>Add new events to userspace programs with
487<a href="http://ltt.polymtl.ca/packages/">userspace markers packages</a></li>
488
489<p>
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.
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
496<p>
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
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.
507
508<hr />
509
510<h2><a href="#TOCsection4" name="section4">Creating Debian or RPM packages</a></h2>
511<p>
512
513<li>Create custom LTTV Debian packages</li>
514
515<PRE>
516Use : dpkg-buildpackage -rfakeroot
517</PRE>
518<p>
519You should then have your LTTV .deb files created for your architecture.
520
521<li>Create custom LTTng packages</li>
522<p>
523For building LTTng Debian packages :
524get the build tree with patches applies as explained in section 2.
525
526<PRE>
527make menuconfig (or xconfig or config) (customize your configuration)
528make-kpkg kernel_image
529</PRE>
530<p>
531You will then see your freshly created .deb in /usr/src. Install it with
532<PRE>
533dpkg -i /usr/src/(image-name).deb
534</PRE>
535<p>
536Then, follow the section "Editing the system wide configuration" in section 2.
537
538
539
540 </body>
541</html>
This page took 0.024119 seconds and 4 git commands to generate.