update java
[lttv.git] / ltt-usertrace / README
CommitLineData
15146922 1
141274aa 2LTTng usertrace package
15146922 3
4Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
5March 2006
6
7This package contains all the user space headers and c files necessary to make
8your application and library trace through an active LTTng tracer. Here is a
9short quickstart guide of it.
10
11Here are the currently supported architectures :
12x86
141274aa 13(please add the ltt_trace_generic and ltt_register_generic system calls to
14other architectures as you need them : it will work magically)
15146922 15
16* Compile your kernel with the latest LTTng patch. Make sure the option
51a4c0d0 17 "Allow tracing from userspace" is _active_!
18 See the QUICKSTART guide at http://ltt.polymtl.ca/ for details about how to
19 setup a working tracer and viewer. See the genevent installation step : it is
20 required for method #2 below.
21
141274aa 22* Extract the latest ltt-usertrace archive :
15146922 23su
24cd /usr/src
141274aa 25wget http://ltt.polymtl.ca/packages/ltt-usertrace-x.x.tar.gz
26gzip -cd ltt-usertrace-x.x.tar.gz | tar xvof -
15146922 27
141274aa 28* Build the sample programs and install the headers and librairies into your
29system :
15146922 30su
c47538ac 31cd /usr/src/ltt-usertrace
15146922 32make
33make install
34
141274aa 35Feel free to look at the sample programs and the Makefile : they demonstrate
36very well the features of the usertrace package and how to use them.
37
c47538ac 38* There are three ways to trace information from your application. The choice
39 will principally depend on the trace data rate.
15146922 40
411) Easy way, but slow (printf style)
51a4c0d0 42 See sample-printf.c for code example.
15146922 43
44- Add the following statements to your program source (the define must come
51a4c0d0 45 _before_ the includes!) :
15146922 46
47#define LTT_TRACE
48#define LTT_BLOCKING 1
49#include <ltt/ltt-facility-user_generic.h>
50#include <ltt/ltt-facility-custom-user_generic.h>
51
52Note the define of LTT_BLOCKING to 1 : if a trace buffer is full, your
53application will block. The default of this parameter is 0 (non blocking) :
54events are lost when trace buffer is full. The choice is up to you.
55
56- Add something like the following sample line in your code. Note that this is a
51a4c0d0 57 very standard format string, this is only a suggested presentation.
58
15146922 59trace_user_generic_slow_printf("in: %s at: %s:%d: Counter value is: %u.",
60 __FILE__, __func__, __LINE__, count);
61
62- Compile your application with at least these parameters to gcc (it is splitted
51a4c0d0 63 on two lines, joined by a "\") :
15146922 64gcc -D LTT_SHOW_DEBUG -I /usr/src/usertrace-generic -o myapp myapp.c \
65 /usr/src/usertrace-generic/ltt-facility-loader-user_generic.c
66
67To see what the final result looks like :
68- Start tracing
69- Start your application
51a4c0d0 70 ** You should see the following message when your program starts and the
71 LTT_SHOW_DEBUG is defined :
72 "LTT : ltt-facility-user_generic init in userspace"
73 If you don't then you forgot to compile the facility loader in your
74 application. If you find this output annoying, you can remove the
75 "-D LTT_SHOW_DEBUG" gcc parameter, which will make the facility loader
76 silent.
15146922 77- Stop tracing
78Then, to see only the user_generic events :
79lttv -m textDump -t /tmp/trace1 -e "event.facility=user_generic"
80
81It will show :
82user_generic.slow_printf: 35885.922829472 (/cpu_0), 15521, 7453, SYSCALL { "in: sample-printf.c at: main:18: Counter value is: 0." }
83user_generic.slow_printf: 35886.925685289 (/cpu_0), 15521, 7453, SYSCALL { "in: sample-printf.c at: main:18: Counter value is: 1." }
84...
85
86
87
c47538ac 882) The second way to log events is still easy. The advantage is that it
89 will make it easier to identify your data in the trace viewer afterward.
90 Please read the comments in method 1) explained previously, as they
91 are not repeated here.
92 See sample.c and sample-thread-slow.c for code example.
15146922 93
c47538ac 94- Go to the ltt-usertrace directory
15146922 95su
c47538ac 96cd /usr/src/ltt-usertrace
15146922 97
98- Create your own facility (i.e. user_myfacility.xml).
99 See the ones available in /usr/share/LinuxTraceToolkitViewer/facilities for
51a4c0d0 100 examples.
101 You facility _must_ be named following this standard : "user_*", where * is
102 whatever you like. If it is not, it will be rejected by the kernel with a
103 Operation not permitted (can be seen with the -D LTT_SHOW_DEBUG compilation
104 parameter).
15146922 105
106user_myfacility.xml:
107
50bb790b 108<?xml version="1.0"?>
15146922 109<facility name="user_myfacility">
51a4c0d0 110 <description>Sample facility</description>
111 <event name="myevent">
112 <description>Sample event</description>
113 <field name="file"><string></field>
114 <field name="function"><string></field>
115 <field name="line"><int></field>
116 <field name="firstval"><long></field>
117 <field name="secondval"><pointer></field>
118 </event>
15146922 119</facility>
120
121- AN IMPORTANT STEP FOLLOWS :
51a4c0d0 122 *copy* the user_myfacility.xml file in your system :
15146922 123su
124cp user_myfacility.xml /usr/share/LinuxTraceToolkitViewer/facilities
125
126- Use genevent to create the c code and headers :
127su
128cd /tmp
129mkdir genevent
130cd genevent
131for a in /usr/share/LinuxTraceToolkitViewer/facilities/user_*.xml;
51a4c0d0 132 do /usr/local/bin/genevent $a;
15146922 133done
134cd /usr/src/usertrace-generic
135cp /tmp/genevent/*load* .
136cd ltt
137cp /tmp/genevent/ltt-facility-id-user_myfacility.h .
138cp /tmp/genevent/ltt-facility-user_myfacility.h .
139cd ..
140make install
141
142- Add the following statements to your program source (the define must come
51a4c0d0 143 _before_ the includes!) :
15146922 144
145#define LTT_TRACE
146#define LTT_BLOCKING 1
147#include <ltt/ltt-facility-user_myfacility.h>
148
149- Add a call following the trace_user_myfacility_myevent function found in
51a4c0d0 150 /usr/include/ltt/ltt-facility-user_myfacility.h in your program.
15146922 151For instance :
152trace_user_myfacility_myevent(__FILE__, __func__, __LINE__, 1234, (void*)0xF0F0F0F0);
153
154- Compile your application with at least these parameters to gcc (it is splitted
51a4c0d0 155 on two lines, joined by a "\") :
15146922 156gcc -I /usr/src/usertrace-generic -o myapp myapp.c \
157 /usr/src/usertrace-generic/ltt-facility-loader-user_myfacility.c
158
159To see what the final result looks like :
160- Start tracing
161- Start your application
162- Stop tracing
163Then, to see only the user_myfacility events :
164lttv -m textDump -t /tmp/trace1 -e "event.facility=user_myfacility"
165
166It will show, for example :
167user_myfacility.myevent: 39507.805584526 (/cpu_1), 15829, 15736, SYSCALL { "myapp.c", "main", 8, 1234, 0xf0f0f0f0 }
168
169
c47538ac 1703) The third way to trace information from your application
171
172This method is cleary the _FASTEST_. It is principally I/O (disk and memory)
173bound. It will create a companion process for each of you program's thread which
174will dump the tracing information into /tmp/ltt-usertrace.
175
176See sample-highspeed.c and sample-thread-fast.c for code example.
177
178- Add the following statements to your program source (the define must come
179 _before_ the includes!) :
180
181#define LTT_TRACE
182#define LTT_TRACE_FAST
183#include <ltt/ltt-facility-user_myfacility.h>
184
185- Add a call following the trace_user_myfacility_myevent function found in
186 /usr/include/ltt/ltt-facility-user_myfacility.h in your program.
187For instance :
188trace_user_myfacility_myevent(__FILE__, __func__, __LINE__, 1234, (void*)0xF0F0F0F0);
189
190- Compile your application with at least these parameters to gcc (it is splitted
191 on two lines, joined by a "\") :
192gcc -lltt-usertrace-fast -I /usr/src/usertrace-generic -o myapp myapp.c \
193 /usr/src/usertrace-generic/ltt-facility-loader-user_myfacility.c
194
195It requires a supplementary operation when you take the trace :
196- Start tracing (with lttctl)
197- Start your application
198- Let your application run...
199- Stop tracing
200- Move or copy /tmp/ltt-usertrace info your trace.
201i.e., if your trace is in /tmp/trace1 :
202su
203mv /tmp/ltt-usertrace /tmp/trace1
204
205
206Then, to see only the user_myfacility events :
207lttv -m textDump -t /tmp/trace1 -e "event.facility=user_myfacility"
208
209It will show, for example :
210user_myfacility.myevent: 39507.805584526 (/ltt-usertrace/process-26174.26174.39236180500380_0), 15829, 15736, USER_MODE { "myapp.c", "main", 8, 1234, 0xf0f0f0f0 }
211
212
213
e90c7b86 214* Fun feature : function instrumentation
215
216Here is how to generate a full trace of you program function calls.
217See the sample-instrument-fct.c example program.
218
219- Compile your application with at least these parameters to gcc (it is splitted
220 on two lines, joined by a "\") :
6c5b57ff 221gcc -g -finstrument-functions \
222 -lltt-instrument-functions -o myapp myapp.c
e90c7b86 223
224To see what the final result looks like :
225- Start tracing
226- Start your application
227- Stop tracing
228Then, to see only the function_entry and function_exit events :
229lttv -m textDump -t /tmp/trace1 -e "event.facility=user_generic & (event.name=function_entry & event.name=function_exit)"
230
231It will show, for example :
c47538ac 232user_generic.function_entry: 59329.709939111 (/ltt-usertrace/process-26202.0.39949996866578_0), 19250, 18581, USER_MODE { 0x8048454, 0x80484c2 }
233user_generic.function_exit: 59329.709944613 (/ltt-usertrace/process-26202.0.39949996866578_0), 19250, 18581, USER_MODE { 0x8048454, 0x80484c2 }
e90c7b86 234
235you can then use (from the binutils package)
236addr2line -e sample-instrument-fct -i -f 0x8048454
237Which shows :
238test_function
239/usr/src/usertrace-generic/sample-instrument-fct.c:12
240
241The lookup in LTTV through libbfd has not been implemented yet.
242
15146922 243
47e83720 244* Instrumentation of a java program
245
246See the java/ directory of this package. You will have to create a C library
247that holds the tracing functions, following the java-instrument-string.c. It has
248to be called from the Java code as shown in Sample.java.
249
250The generate.sh scripts compiles and executes the Java program with the JNI
251tracing library.
252
This page took 0.032781 seconds and 4 git commands to generate.