| 1 | LTTng 2.0 modules |
| 2 | |
| 3 | Mathieu Desnoyers |
| 4 | April 6, 2012 |
| 5 | |
| 6 | LTTng 2.0 kernel modules build against a vanilla or distribution kernel, without |
| 7 | need for additional patches. Other features: |
| 8 | |
| 9 | - Produces CTF (Common Trace Format) natively, |
| 10 | (http://www.efficios.com/ctf) |
| 11 | - Tracepoints, Function tracer, CPU Performance Monitoring Unit (PMU) |
| 12 | counters, kprobes, and kretprobes support, |
| 13 | - Integrated interface for both kernel and userspace tracing, |
| 14 | - Have the ability to attach "context" information to events in the |
| 15 | trace (e.g. any PMU counter, pid, ppid, tid, comm name, etc). |
| 16 | All the extra information fields to be collected with events are |
| 17 | optional, specified on a per-tracing-session basis (except for |
| 18 | timestamp and event id, which are mandatory). |
| 19 | |
| 20 | To build and install, you will need to have your kernel headers available (or |
| 21 | access to your full kernel source tree), and use: |
| 22 | |
| 23 | % make |
| 24 | # make modules_install |
| 25 | # depmod -a |
| 26 | |
| 27 | If you need to specify the target directory to the kernel you want to build |
| 28 | against, use: |
| 29 | |
| 30 | % KERNELDIR=path_to_kernel_dir make |
| 31 | # KERNELDIR=path_to_kernel_dir make modules_install |
| 32 | # depmod -a kernel_version |
| 33 | |
| 34 | Use lttng-tools to control the tracer. LTTng tools should automatically load |
| 35 | the kernel modules when needed. Use Babeltrace to print traces as a |
| 36 | human-readable text log. These tools are available at the following URL: |
| 37 | http://lttng.org/lttng2.0 |
| 38 | |
| 39 | So far, it has been tested on vanilla Linux kernels 2.6.38, 2.6.39, 3.0, |
| 40 | 3.1, 3.2, 3.3 (on x86 32/64-bit, and powerpc 32-bit at the moment, build |
| 41 | tested on ARM). It should work fine with newer kernels and other |
| 42 | architectures, but expect build issues with kernels older than 2.6.36. |
| 43 | The clock source currently used is the standard gettimeofday (slower, |
| 44 | less scalable and less precise than the LTTng 0.x clocks). Support for |
| 45 | LTTng 0.x clocks will be added back soon into LTTng 2.0. Please note |
| 46 | that lttng-modules 2.0 can build on a Linux kernel patched with the |
| 47 | LTTng 0.x patchset, but the lttng-modules 2.0 replace the lttng-modules |
| 48 | 0.x, so both tracers cannot be installed at the same time for a given |
| 49 | kernel version. |
| 50 | |
| 51 | |
| 52 | * Kernel config options required |
| 53 | |
| 54 | CONFIG_MODULES: required |
| 55 | * Kernel modules support. |
| 56 | CONFIG_KALLSYMS: required |
| 57 | * See wrapper/ files. This is necessary until the few required missing |
| 58 | symbols are exported to GPL modules from mainline. |
| 59 | CONFIG_HIGH_RES_TIMERS: required |
| 60 | * Needed for LTTng 2.0 clock source. |
| 61 | CONFIG_TRACEPOINTS: required |
| 62 | kernel tracepoint instrumentation |
| 63 | * Enabled as side-effect of any of the perf/ftrace/blktrace |
| 64 | instrumentation features. |
| 65 | |
| 66 | |
| 67 | * Kernel config options supported (optional) |
| 68 | |
| 69 | The following kernel configuration options will affect the features |
| 70 | available from LTTng: |
| 71 | |
| 72 | |
| 73 | CONFIG_HAVE_SYSCALL_TRACEPOINTS: |
| 74 | system call tracing |
| 75 | lttng enable-event -k --syscall |
| 76 | lttng enable-event -k -a |
| 77 | CONFIG_PERF_EVENTS: |
| 78 | performance counters |
| 79 | lttng add-context -t perf:* |
| 80 | CONFIG_EVENT_TRACING: |
| 81 | needed to allow block layer tracing |
| 82 | CONFIG_KPROBES: |
| 83 | Dynamic probe. |
| 84 | lttng enable-event -k --probe ... |
| 85 | CONFIG_KRETPROBES: |
| 86 | Dynamic function entry/return probe. |
| 87 | lttng enable-event -k --function ... |
| 88 | |
| 89 | |
| 90 | * Note about Perf PMU counters support |
| 91 | |
| 92 | Each PMU counter has its zero value set when it is attached to a context with |
| 93 | add-context. Therefore, it is normal that the same counters attached to both the |
| 94 | stream context and event context show different values for a given event; what |
| 95 | matters is that they increment at the same rate. |