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 /debug/tracing/available_events. To enable a particular event, such as 'sched_wakeup', simply echo it to /debug/tracing/set_event. For example: # echo sched_wakeup >> /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' >> /debug/tracing/set_event To disable all events, echo an empty line to the set_event file: # echo > /debug/tracing/set_event To enable all events, echo '*:*' or '*:' to the set_event file: # echo *:* > /debug/tracing/set_event The events are organized into subsystems, such as ext4, irq, sched, etc., and a full event name looks like this: :. 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 ":*"; for example, to enable all irq events, you can use the command: # echo 'irq:*' > /debug/tracing/set_event 2.2 Via the 'enable' toggle --------------------------- The events available are also listed in /debug/tracing/events/ hierarchy of directories. To enable event 'sched_wakeup': # echo 1 > /debug/tracing/events/sched/sched_wakeup/enable To disable it: # echo 0 > /debug/tracing/events/sched/sched_wakeup/enable To enable all events in sched subsystem: # echo 1 > /debug/tracing/events/sched/enable To eanble all events: # echo 1 > /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 3. Defining an event-enabled tracepoint ======================================= See The example provided in samples/trace_events