| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 1 | 			     Event Tracing | 
 | 2 |  | 
 | 3 | 		Documentation written by Theodore Ts'o | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 4 | 			Updated by Li Zefan | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 5 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 6 | 1. Introduction | 
 | 7 | =============== | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 8 |  | 
 | 9 | Tracepoints (see Documentation/trace/tracepoints.txt) can be used | 
 | 10 | without creating custom kernel modules to register probe functions | 
 | 11 | using the event tracing infrastructure. | 
 | 12 |  | 
 | 13 | Not all tracepoints can be traced using the event tracing system; | 
 | 14 | the kernel developer must provide code snippets which define how the | 
 | 15 | tracing information is saved into the tracing buffer, and how the | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 16 | tracing information should be printed. | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 17 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 18 | 2. Using Event Tracing | 
 | 19 | ====================== | 
 | 20 |  | 
 | 21 | 2.1 Via the 'set_event' interface | 
 | 22 | --------------------------------- | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 23 |  | 
 | 24 | The events which are available for tracing can be found in the file | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 25 | /debug/tracing/available_events. | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 26 |  | 
 | 27 | To enable a particular event, such as 'sched_wakeup', simply echo it | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 28 | to /debug/tracing/set_event. For example: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 29 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 30 | 	# echo sched_wakeup >> /debug/tracing/set_event | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 31 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 32 | [ Note: '>>' is necessary, otherwise it will firstly disable | 
 | 33 |   all the events. ] | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 34 |  | 
 | 35 | To disable an event, echo the event name to the set_event file prefixed | 
 | 36 | with an exclamation point: | 
 | 37 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 38 | 	# echo '!sched_wakeup' >> /debug/tracing/set_event | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 39 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 40 | To disable all events, echo an empty line to the set_event file: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 41 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 42 | 	# echo > /debug/tracing/set_event | 
 | 43 |  | 
 | 44 | To enable all events, echo '*:*' or '*:' to the set_event file: | 
 | 45 |  | 
 | 46 | 	# echo *:* > /debug/tracing/set_event | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 47 |  | 
 | 48 | The events are organized into subsystems, such as ext4, irq, sched, | 
 | 49 | etc., and a full event name looks like this: <subsystem>:<event>.  The | 
 | 50 | subsystem name is optional, but it is displayed in the available_events | 
 | 51 | file.  All of the events in a subsystem can be specified via the syntax | 
 | 52 | "<subsystem>:*"; for example, to enable all irq events, you can use the | 
 | 53 | command: | 
 | 54 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 55 | 	# echo 'irq:*' > /debug/tracing/set_event | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 56 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 57 | 2.2 Via the 'enable' toggle | 
 | 58 | --------------------------- | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 59 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 60 | The events available are also listed in /debug/tracing/events/ hierarchy | 
 | 61 | of directories. | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 62 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 63 | To enable event 'sched_wakeup': | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 64 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 65 | 	# echo 1 > /debug/tracing/events/sched/sched_wakeup/enable | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 66 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 67 | To disable it: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 68 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 69 | 	# echo 0 > /debug/tracing/events/sched/sched_wakeup/enable | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 70 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 71 | To enable all events in sched subsystem: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 72 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 73 | 	# echo 1 > /debug/tracing/events/sched/enable | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 74 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 75 | To eanble all events: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 76 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 77 | 	# echo 1 > /debug/tracing/events/enable | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 78 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 79 | When reading one of these enable files, there are four results: | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 80 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 81 |  0 - all events this file affects are disabled | 
 | 82 |  1 - all events this file affects are enabled | 
 | 83 |  X - there is a mixture of events enabled and disabled | 
 | 84 |  ? - this file does not affect any event | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 85 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 86 | 3. Defining an event-enabled tracepoint | 
 | 87 | ======================================= | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 88 |  | 
| Li Zefan | 143c145 | 2009-05-19 14:43:15 +0800 | [diff] [blame] | 89 | See The example provided in samples/trace_events | 
| Theodore Ts'o | abd4144 | 2009-04-11 15:51:18 -0400 | [diff] [blame] | 90 |  |