From b70ceef84fe754805d4b1f0d8266e3c28c788b66 Mon Sep 17 00:00:00 2001 From: compudj Date: Wed, 4 Oct 2006 14:27:41 +0000 Subject: [PATCH] update QUICKSTART git-svn-id: http://ltt.polymtl.ca/svn@2154 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/QUICKSTART | 70 ++++++++++++++----- ltt/branches/poly/configure.in | 2 +- .../lttv/modules/gui/controlflow/drawing.c | 9 ++- .../lttv/modules/gui/controlflow/eventhooks.c | 69 ++++++++++++++++++ .../lttv/modules/gui/controlflow/eventhooks.h | 1 + 5 files changed, 130 insertions(+), 21 deletions(-) diff --git a/ltt/branches/poly/QUICKSTART b/ltt/branches/poly/QUICKSTART index 356262fc..f20f0250 100644 --- a/ltt/branches/poly/QUICKSTART +++ b/ltt/branches/poly/QUICKSTART @@ -13,7 +13,7 @@ applications. What you will typically want is to read sections 2 and 3 : install LTTng from sources and use it. -These operations are made for installing the LTTng 0.5.X tracer on a +These operations are made for installing the LTTng 0.6.X tracer on a linux 2.6.X kernel. You will also find instructions for installation of LTTV 0.8.x : the Linux Trace Toolkit Viewer. @@ -227,19 +227,22 @@ make menuconfig (or make xconfig or make config) Select the following options : [*] Linux Trace Toolkit Instrumentation Support or <*> Linux Trace Toolkit Tracer + or <*> Linux Trace Toolkit Relay+DebugFS Support It makes no difference for the rest of the procedure whether the Tracer is compiled built-in or as a module. activate : [*] Align Linux Trace Toolkit Traces [*] Allow tracing from userspace + Linux Trace Toolkit Netlink Controller + Linux Trace Toolkit State Dump your choice (see < Help >) : [ ] Activate Linux Trace Toolkit Heartbeat Timer - You may or may not activate instrumentation per facility. They are all - selected for logging by default. It can be used as a compile time filter to - enable/disable logging of events. It is useful to discard events with a - minimal impact on the system and especially useful for now, as the dynamic - filter has not been implemented yet. - Select + You may or may not decide to compile probes. Afterward, you will have to + load the probe modules to enable tracing of their events. The probes + automatically select the appropriate facilities. + Static instrumentation is a more invasive type of instrumentation that gives + the address taking a lock or doing a printk. + Select Select Select make @@ -281,12 +284,20 @@ then, rebooting or issuing the following command will activate debugfs : mount /mnt/debugfs -You need to load the ltt-control module to be able to control tracing from user +You need to load the LTT modules to be able to control tracing from user space. This is done by issuing the command : modprobe ltt-control modprobe ltt-core modprobe ltt-relay +modprobe ltt-tracer +modprobe ltt-probe-mm +modprobe ltt-probe-kernel +modprobe ltt-probe-i386 (or x86_64, powerpc, ppc, arm, mips) +modprobe ltt-probe-net +modprobe ltt-probe-list +modprobe ltt-probe-ipc +modprobe ltt-probe-fs If you want to have complete information about the kernel state (including all the process names), you need to load the ltt-statedump module. This is done by @@ -296,11 +307,24 @@ modprobe ltt-statedump You can automate at boot time loading the ltt-control module by : +cp /etc/modules /etc/modules.bkp echo ltt-control >> /etc/modules echo ltt-core >> /etc/modules echo ltt-relay >> /etc/modules +echo ltt-tracer >> /etc/modules +echo ltt-probe-mm >> /etc/modules +echo ltt-probe-kernel >> /etc/modules +echo ltt-probe-i386 >> /etc/modules (or x86_64, powerpc, ppc, arm, mips) +echo ltt-probe-net >> /etc/modules +echo ltt-probe-list >> /etc/modules +echo ltt-probe-ipc >> /etc/modules +echo ltt-probe-fs >> /etc/modules echo ltt-statedump >> /etc/modules +(note : if you want to probe a marker which is within a module, make sure you +load the probe _after_ the module, otherwise the probe will not be able to +connect itself to the marker.) + * Getting and installing the ltt-control package (on the traced machine) (note : the ltt-control package contains lttd and lttctl. Although it has the @@ -367,6 +391,10 @@ lttctl -n trace -R see lttctl --help for details. +(note : to see if the buffers has been filled, look at the dmesg output after +lttctl -R or after stopping tracing from the GUI, it will show an event lost +count. If it is the case, try using larger buffers. See lttctl --help to learn +how.) * Use text mode LTTV @@ -379,7 +407,11 @@ lttv -m textDump -t /tmp/trace see lttv -m textDump --help for detailed command line options of textDump. - +It is, in the current state of the project, very useful to use "grep" on the +text output to filter by specific event fields. You can later copy the timestamp +of the events to the clipboard and paste them in the GUI by clicking on the +bottom right label "Current time". Support for this type of filtering should +be added to the filter module soon. *********************************************************** @@ -400,21 +432,21 @@ make install * Add new events to the kernel with genevent su - -cd /usr/local/share/LinuxTraceToolkitViewer/facilities +cd /usr/local/share/ltt-control/facilities cp process.xml yourfacility.xml * edit yourfacility.xml to fit your needs. cd /tmp -/usr/local/bin/genevent /usr/local/share/LinuxTraceToolkitViewer/facilities/yourfacility.xml +/usr/local/bin/genevent /usr/local/share/ltt-control/facilities/yourfacility.xml cp ltt-facility-yourfacility.h ltt-facility-id-yourfacility.h \ - /usr/src/linux-2.6.17-lttng-0.x.xx8/include/linux/ltt + /usr/src/linux-2.6.17-lttng-0.x.xx8/include/ltt cp ltt-facility-loader-yourfacility.c ltt-facility-loader-yourfacility.h \ - /usr/src/linux-2.6.17-lttng-0.x.xx/ltt - * edit the kernel file you want to instrument - - Add #include at the beginning - of the file. - - Add a call to the tracing functions. See their names and parameters in - /usr/src/linux-2.6.17-lttng-0.x.xx/include/linux/ltt/ltt-facility-yourfacility.h - + /usr/src/linux-2.6.17-lttng-0.x.xx/ltt/facilities + * edit the kernel file you want to instrument to add a marker to it. See + include/linux/marker.h. + * create a dynamically loadable probe. See ltt/probes for examples. The probe + will be connected to your marker and will typically call the logging + functions found in the header file you created with genevent. + * Add new events to userspace programs with genevent See http://ltt.polymtl.ca/ > USERSPACE TRACING QUICKSTART diff --git a/ltt/branches/poly/configure.in b/ltt/branches/poly/configure.in index e5839239..25204385 100644 --- a/ltt/branches/poly/configure.in +++ b/ltt/branches/poly/configure.in @@ -23,7 +23,7 @@ AC_PREREQ(2.57) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) #AC_WITH_LTDL # not needed ? -AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.61-16092006) +AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.62-03102006) AM_CONFIG_HEADER(config.h) AM_PROG_LIBTOOL diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c index 240c9c34..8db42ca8 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/drawing.c @@ -220,7 +220,7 @@ void drawing_data_request(Drawing_t *drawing, associated by id hooks. */ hooks = g_array_new(FALSE, FALSE, sizeof(LttvTraceHook)); - hooks = g_array_set_size(hooks, 17); + hooks = g_array_set_size(hooks, 18); before_hn = after_hn = 0; /* before hooks */ @@ -314,6 +314,13 @@ void drawing_data_request(Drawing_t *drawing, &g_array_index(hooks, LttvTraceHook, before_hn++)); if(ret) before_hn--; + ret = lttv_trace_find_hook(ts->parent.t, + LTT_FACILITY_STATEDUMP, LTT_EVENT_STATEDUMP_END, + 0, 0, 0, + before_statedump_end, + events_request, + &g_array_index(hooks, LttvTraceHook, before_hn++)); + if(ret) before_hn--; #if 0 lttv_trace_find_hook(ts->parent.t, diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index 65f47eec..b7150cfc 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -2673,3 +2673,72 @@ int after_chunk(void *hook_data, void *call_data) return 0; } +/* after_statedump_end + * + * @param hook_data ControlFlowData structure of the viewer. + * @param call_data Event context. + * + * This function adds items to be drawn in a queue for each process. + * + */ +int before_statedump_end(void *hook_data, void *call_data) +{ + LttvTraceHookByFacility *thf = (LttvTraceHookByFacility*)hook_data; + EventsRequest *events_request = (EventsRequest*)thf->hook_data; + ControlFlowData *control_flow_data = events_request->viewer_data; + + LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; + + LttvTracefileState *tfs = (LttvTracefileState *)call_data; + + LttvTraceState *ts = (LttvTraceState *)tfc->t_context; + + LttvTracesetState *tss = (LttvTracesetState*)tfc->t_context->ts_context; + ProcessList *process_list = control_flow_data->process_list; + + LttEvent *e; + e = ltt_tracefile_get_event(tfc->tf); + + LttvFilter *filter = control_flow_data->filter; + if(filter != NULL && filter->head != NULL) + if(!lttv_filter_tree_parse(filter->head,e,tfc->tf, + tfc->t_context->t,tfc)) + return FALSE; + + LttTime evtime = ltt_event_time(e); + + ClosureData closure_data; + closure_data.events_request = events_request; + closure_data.tss = tss; + closure_data.end_time = evtime; + + TimeWindow time_window = + lttvwindow_get_time_window(control_flow_data->tab); + guint width = control_flow_data->drawing->width; + convert_time_to_pixels( + time_window, + evtime, + width, + &closure_data.x_end); + + /* Draw last items */ + g_hash_table_foreach(process_list->process_hash, draw_closure, + (void*)&closure_data); +#if 0 + /* Reactivate sort */ + gtk_tree_sortable_set_sort_column_id( + GTK_TREE_SORTABLE(control_flow_data->process_list->list_store), + GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, + GTK_SORT_ASCENDING); + + update_index_to_pixmap(control_flow_data->process_list); + /* Request a full expose : drawing scrambled */ + gtk_widget_queue_draw(control_flow_data->drawing->drawing_area); +#endif //0 + /* Request expose (updates damages zone also) */ + drawing_request_expose(events_request, tss, evtime); + + return 0; +} + + diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h index 8c74e36c..88376123 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h @@ -108,6 +108,7 @@ int before_chunk(void *hook_data, void *call_data); int after_chunk(void *hook_data, void *call_data); int before_request(void *hook_data, void *call_data); int after_request(void *hook_data, void *call_data); +int before_statedump_end(void *hook_data, void *call_data); -- 2.34.1