| Event Tracing |
| |
| Documentation written by Theodore Ts'o |
| Updated by Li Zefan |
| |
| 1. Introduction |
| =============== |
| |
| Tracepoints (see Documentation/trace/tracepoints.txt) can be used |
| without creating custom kernel modules to register probe functions |
| using the event tracing infrastructure. |
| |
| Not all tracepoints can be traced using the event tracing system; |
| the kernel developer must provide code snippets which define how the |
| tracing information is saved into the tracing buffer, and how the |
| tracing information should be printed. |
| |
| 2. Using Event Tracing |
| ====================== |
| |
| 2.1 Via the 'set_event' interface |
| --------------------------------- |
| |
| The events which are available for tracing can be found in the file |
| /sys/kernel/debug/tracing/available_events. |
| |
| To enable a particular event, such as 'sched_wakeup', simply echo it |
| to /sys/kernel/debug/tracing/set_event. For example: |
| |
| # echo sched_wakeup >> /sys/kernel/debug/tracing/set_event |
| |
| [ Note: '>>' is necessary, otherwise it will firstly disable |
| all the events. ] |
| |
| To disable an event, echo the event name to the set_event file prefixed |
| with an exclamation point: |
| |
| # echo '!sched_wakeup' >> /sys/kernel/debug/tracing/set_event |
| |
| To disable all events, echo an empty line to the set_event file: |
| |
| # echo > /sys/kernel/debug/tracing/set_event |
| |
| To enable all events, echo '*:*' or '*:' to the set_event file: |
| |
| # echo *:* > /sys/kernel/debug/tracing/set_event |
| |
| The events are organized into subsystems, such as ext4, irq, sched, |
| etc., and a full event name looks like this: <subsystem>:<event>. The |
| subsystem name is optional, but it is displayed in the available_events |
| file. All of the events in a subsystem can be specified via the syntax |
| "<subsystem>:*"; for example, to enable all irq events, you can use the |
| command: |
| |
| # echo 'irq:*' > /sys/kernel/debug/tracing/set_event |
| |
| 2.2 Via the 'enable' toggle |
| --------------------------- |
| |
| The events available are also listed in /sys/kernel/debug/tracing/events/ hierarchy |
| of directories. |
| |
| To enable event 'sched_wakeup': |
| |
| # echo 1 > /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable |
| |
| To disable it: |
| |
| # echo 0 > /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable |
| |
| To enable all events in sched subsystem: |
| |
| # echo 1 > /sys/kernel/debug/tracing/events/sched/enable |
| |
| To eanble all events: |
| |
| # echo 1 > /sys/kernel/debug/tracing/events/enable |
| |
| When reading one of these enable files, there are four results: |
| |
| 0 - all events this file affects are disabled |
| 1 - all events this file affects are enabled |
| X - there is a mixture of events enabled and disabled |
| ? - this file does not affect any event |
| |
| 2.3 Boot option |
| --------------- |
| |
| In order to facilitate early boot debugging, use boot option: |
| |
| trace_event=[event-list] |
| |
| The format of this boot option is the same as described in section 2.1. |
| |
| 3. Defining an event-enabled tracepoint |
| ======================================= |
| |
| See The example provided in samples/trace_events |
| |