[lttng-dev] (no subject)
Simon Marchi
simon.marchi at polymtl.ca
Wed Jan 22 08:39:00 EST 2014
Hi Mehran,
I'll try to correct you where I can.
On 21 January 2014 18:34, Mehran Khan <i at mehrankhan.com> wrote:
> Hello everyone,
> I have been trying to instrument the Apache web server, the latest version
> (2.4.7 from the URL http://httpd.apache.org/download.cgi#apache24) for LTTng
> UST tracing
> 1. To start with the simplest case, I created a *.tp file named
> smallestTracePoint.tp with the content below
> TRACEPOINT_EVENT(
> mk,
> apache_process_entry,
> TP_ARGS(),
> TP_FIELDS()
> )
This is good.
> 2. Then I ran the following
> lttng-gen-tp smallestTracePoint.tp -o smallestTracePoint.h -o
> smallestTracePoint.c
>
> which generated the files smallestTracePoint.c and smallestTracePoint.h
You can just say
$ lttng-gen-tp smallestTracePoint.tp
and it will generate the .h and .c.
> 3. Then, I put the smallestTracePoint.h and smallestTracePoint.c in
> httpd-2.4.7/server directory,
> included smallestTracePoint.h in the main.c file and added trace points in
> the int main(int argc, const char * const argv[]) and *init_process(int
> *argc, const char * const * *argv) functions.
That's good.
> 4. Then I added -finstrument-functions in the configure file (Line number
> 2830) in the extracted httpd-2.4.7 directory, full line below
> ac_compile='$CC -c $CFLAGS -finstrument-functions $CPPFLAGS
> conftest.$ac_ext >&5'
As Suchakra said, -finstrument-functions is not related. You can use
it later if you want, but let's leave it out for now. Also, if you
want to add compilation flags like this, pass them at configure time.
Also, _never_ change generated files (such as the configure script of
Makefiles). They are way too complicated for a human and will get
overwritten anyway. Instead, you should modify the configure.in or
Makefile.in files, in this case. To add a compilation flag, you could
do:
$ ./configure CFLAGS="-finstrument-function"
> 5. Then, from the /httpd-2.4.7 directory, I ran the following command to
> configure the installation, it completed without any error.
> ./configure --libdir=/usr/lib/usr/lib/liblttng-ust.so
> --with-included-apr
This is wrong. --libdir is used to tell autotools in which directory
to install the compiled libraries. ./configure --with-included-apr is
sufficient.
> 6. When I ran the command 'make', I get the following error after a while
> ...
> make[1]: Entering directory `/root/httpd-2.4.7'
> /root/httpd-2.4.7/srclib/apr/libtool --silent --mode=compile gcc -std=gnu99
> -g -O2 -pthread -DLINUX -D_REENTRANT -D_GNU_SOURCE -I.
> -I/root/httpd-2.4.7/os/unix -I/root/httpd-2.4.7/include
> -I/root/httpd-2.4.7/srclib/apr/include
> -I/root/httpd-2.4.7/srclib/apr-util/include
> -I/root/httpd-2.4.7/srclib/apr-util/xml/expat/lib
> -I/root/httpd-2.4.7/modules/aaa -I/root/httpd-2.4.7/modules/cache
> -I/root/httpd-2.4.7/modules/core -I/root/httpd-2.4.7/modules/database
> -I/root/httpd-2.4.7/modules/filters -I/root/httpd-2.4.7/modules/ldap
> -I/root/httpd-2.4.7/modules/loggers -I/root/httpd-2.4.7/modules/lua
> -I/root/httpd-2.4.7/modules/proxy -I/root/httpd-2.4.7/modules/session
> -I/root/httpd-2.4.7/modules/ssl -I/root/httpd-2.4.7/modules/test
> -I/root/httpd-2.4.7/server -I/root/httpd-2.4.7/modules/arch/unix
> -I/root/httpd-2.4.7/modules/dav/main -I/root/httpd-2.4.7/modules/generators
> -I/root/httpd-2.4.7/modules/mappers -prefer-non-pic -static -c modules.c &&
> touch modules.lo
> gcc -std=gnu99 -g -O2 -pthread -DLINUX -D_REENTRANT -D_GNU_SOURCE
> -I. -I/root/httpd-2.4.7/os/unix -I/root/httpd-2.4.7/include
> -I/root/httpd-2.4.7/srclib/apr/include
> -I/root/httpd-2.4.7/srclib/apr-util/include
> -I/root/httpd-2.4.7/srclib/apr-util/xml/expat/lib
> -I/root/httpd-2.4.7/modules/aaa -I/root/httpd-2.4.7/modules/cache
> -I/root/httpd-2.4.7/modules/core -I/root/httpd-2.4.7/modules/database
> -I/root/httpd-2.4.7/modules/filters -I/root/httpd-2.4.7/modules/ldap
> -I/root/httpd-2.4.7/modules/loggers -I/root/httpd-2.4.7/modules/lua
> -I/root/httpd-2.4.7/modules/proxy -I/root/httpd-2.4.7/modules/session
> -I/root/httpd-2.4.7/modules/ssl -I/root/httpd-2.4.7/modules/test
> -I/root/httpd-2.4.7/server -I/root/httpd-2.4.7/modules/arch/unix
> -I/root/httpd-2.4.7/modules/dav/main -I/root/httpd-2.4.7/modules/generators
> -I/root/httpd-2.4.7/modules/mappers -c /root/httpd-2.4.7/server/buildmark.c
> /root/httpd-2.4.7/srclib/apr/libtool --silent --mode=link gcc -std=gnu99 -g
> -O2 -pthread -o httpd modules.lo buildmark.o -export-dynamic
> server/libmain.la modules/core/libmod_so.la modules/http/libmod_http.la
> server/mpm/event/libevent.la os/unix/libos.la -L/usr/lib/x86_64-linux-gnu
> -lpcre /root/httpd-2.4.7/srclib/apr-util/libaprutil-1.la
> /root/httpd-2.4.7/srclib/apr-util/xml/expat/libexpat.la
> /root/httpd-2.4.7/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -ldl
> server/.libs/libmain.a(main.o): In function `main':
> /root/httpd-2.4.7/server/main.c:443: undefined reference to
> `__tracepoint_mk___apache_process_entry'
> server/.libs/libmain.a(main.o): In function `init_process':
> /root/httpd-2.4.7/server/main.c:284: undefined reference to
> `__tracepoint_mk___apache_process_entry'
> server/.libs/libmain.a(main.o): In function
> `__tracepoint_cb_mk___apache_process_entry':
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `__tracepoint_mk___apache_process_entry'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `__tracepoint_mk___apache_process_entry'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> /root/httpd-2.4.7/server/smallestTracePoint.h:13: undefined reference to
> `tracepoint_dlopen'
> collect2: ld returned 1 exit status
> make[1]: *** [httpd] Error 1
> make[1]: Leaving directory `/root/httpd-2.4.7'
> make: *** [all-recursive] Error 1
>
> I have tried including the smallestTracePoint.c file in the local makefile
> (/root/httpd-2.4.7/MakeFile)... didn't do me any good.
> Any idea what I am doing wrong ?
That's right, you have to compile the .c file somewhere. I suggest you
check where main.c is mentionned in a Makefile.in, and add
smallestTracePoint.c there. Don't forget to re-run configure, and try
to make again. This should get rid of the undefined references to
__tracepoint_mk___apache_process_entry. For the other undefined
references, it is because your tracepoint requires additional
libraries, libdl and liblttng-ust. You should then add "-ldl
-llttng-ust" to where the final executable is linked. When inspecting
the build log, we see that this is done by the top-level Makefile, so
we will go edit the top-level Makefile.in.
(there might be a better place to put -ldl -llttng-ust, but it will do for now)
Apache should now build with the tracepoint included.
Then, doing
$ lttng create
$ lttng enable-event -u -a
$ lttng start
$ ./httpd
(httpd complains about missing config file, but hits the tracepoint anyway)
$ lttng stop
$ lttng view
...
[08:30:18.522789766] (+0.000173646) simark
apache:apache_process_entry: { cpu_id = 2 }, { }
...
Yay !
I made a commit here to show the modifications I made to make it work:
https://github.com/simark/httpd/commit/2c6d73c47156350233b346e9eaa49ffb07a58e6e
Hopefully this can help you get started. Iif you instrument apache in
an interesting/useful way, feel free to share your work, it could be
useful for others!
Simon
>
> LTTng version on the instance: 2.4.0-rc2 - Époque Opaque
>
> Linux Distribution: Ubuntu 12.04.3 LTS
>
>
> Thanks,
>
>
> --
> Mehran
>
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
More information about the lttng-dev
mailing list