OSDN Git Service

Merge tag 'v4.4.199' of https://shanghai.source.codeaurora.org/quic/la/kernel/msm...
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / Documentation / trace / ftrace.txt
1                 ftrace - Function Tracer
2                 ========================
3
4 Copyright 2008 Red Hat Inc.
5    Author:   Steven Rostedt <srostedt@redhat.com>
6   License:   The GNU Free Documentation License, Version 1.2
7                (dual licensed under the GPL v2)
8 Reviewers:   Elias Oltmanns, Randy Dunlap, Andrew Morton,
9              John Kacur, and David Teigland.
10 Written for: 2.6.28-rc2
11 Updated for: 3.10
12
13 Introduction
14 ------------
15
16 Ftrace is an internal tracer designed to help out developers and
17 designers of systems to find what is going on inside the kernel.
18 It can be used for debugging or analyzing latencies and
19 performance issues that take place outside of user-space.
20
21 Although ftrace is typically considered the function tracer, it
22 is really a frame work of several assorted tracing utilities.
23 There's latency tracing to examine what occurs between interrupts
24 disabled and enabled, as well as for preemption and from a time
25 a task is woken to the task is actually scheduled in.
26
27 One of the most common uses of ftrace is the event tracing.
28 Through out the kernel is hundreds of static event points that
29 can be enabled via the debugfs file system to see what is
30 going on in certain parts of the kernel.
31
32
33 Implementation Details
34 ----------------------
35
36 See ftrace-design.txt for details for arch porters and such.
37
38
39 The File System
40 ---------------
41
42 Ftrace uses the debugfs file system to hold the control files as
43 well as the files to display output.
44
45 When debugfs is configured into the kernel (which selecting any ftrace
46 option will do) the directory /sys/kernel/debug will be created. To mount
47 this directory, you can add to your /etc/fstab file:
48
49  debugfs       /sys/kernel/debug          debugfs defaults        0       0
50
51 Or you can mount it at run time with:
52
53  mount -t debugfs nodev /sys/kernel/debug
54
55 For quicker access to that directory you may want to make a soft link to
56 it:
57
58  ln -s /sys/kernel/debug /debug
59
60 Any selected ftrace option will also create a directory called tracing
61 within the debugfs. The rest of the document will assume that you are in
62 the ftrace directory (cd /sys/kernel/debug/tracing) and will only concentrate
63 on the files within that directory and not distract from the content with
64 the extended "/sys/kernel/debug/tracing" path name.
65
66 That's it! (assuming that you have ftrace configured into your kernel)
67
68 After mounting debugfs, you can see a directory called
69 "tracing".  This directory contains the control and output files
70 of ftrace. Here is a list of some of the key files:
71
72
73  Note: all time values are in microseconds.
74
75   current_tracer:
76
77         This is used to set or display the current tracer
78         that is configured.
79
80   available_tracers:
81
82         This holds the different types of tracers that
83         have been compiled into the kernel. The
84         tracers listed here can be configured by
85         echoing their name into current_tracer.
86
87   tracing_on:
88
89         This sets or displays whether writing to the trace
90         ring buffer is enabled. Echo 0 into this file to disable
91         the tracer or 1 to enable it. Note, this only disables
92         writing to the ring buffer, the tracing overhead may
93         still be occurring.
94
95   trace:
96
97         This file holds the output of the trace in a human
98         readable format (described below).
99
100   trace_pipe:
101
102         The output is the same as the "trace" file but this
103         file is meant to be streamed with live tracing.
104         Reads from this file will block until new data is
105         retrieved.  Unlike the "trace" file, this file is a
106         consumer. This means reading from this file causes
107         sequential reads to display more current data. Once
108         data is read from this file, it is consumed, and
109         will not be read again with a sequential read. The
110         "trace" file is static, and if the tracer is not
111         adding more data, it will display the same
112         information every time it is read.
113
114   trace_options:
115
116         This file lets the user control the amount of data
117         that is displayed in one of the above output
118         files. Options also exist to modify how a tracer
119         or events work (stack traces, timestamps, etc).
120
121   options:
122
123         This is a directory that has a file for every available
124         trace option (also in trace_options). Options may also be set
125         or cleared by writing a "1" or "0" respectively into the
126         corresponding file with the option name.
127
128   tracing_max_latency:
129
130         Some of the tracers record the max latency.
131         For example, the time interrupts are disabled.
132         This time is saved in this file. The max trace
133         will also be stored, and displayed by "trace".
134         A new max trace will only be recorded if the
135         latency is greater than the value in this
136         file. (in microseconds)
137
138   tracing_thresh:
139
140         Some latency tracers will record a trace whenever the
141         latency is greater than the number in this file.
142         Only active when the file contains a number greater than 0.
143         (in microseconds)
144
145   buffer_size_kb:
146
147         This sets or displays the number of kilobytes each CPU
148         buffer holds. By default, the trace buffers are the same size
149         for each CPU. The displayed number is the size of the
150         CPU buffer and not total size of all buffers. The
151         trace buffers are allocated in pages (blocks of memory
152         that the kernel uses for allocation, usually 4 KB in size).
153         If the last page allocated has room for more bytes
154         than requested, the rest of the page will be used,
155         making the actual allocation bigger than requested.
156         ( Note, the size may not be a multiple of the page size
157           due to buffer management meta-data. )
158
159   buffer_total_size_kb:
160
161         This displays the total combined size of all the trace buffers.
162
163   free_buffer:
164
165         If a process is performing the tracing, and the ring buffer
166         should be shrunk "freed" when the process is finished, even
167         if it were to be killed by a signal, this file can be used
168         for that purpose. On close of this file, the ring buffer will
169         be resized to its minimum size. Having a process that is tracing
170         also open this file, when the process exits its file descriptor
171         for this file will be closed, and in doing so, the ring buffer
172         will be "freed".
173
174         It may also stop tracing if disable_on_free option is set.
175
176   tracing_cpumask:
177
178         This is a mask that lets the user only trace
179         on specified CPUs. The format is a hex string
180         representing the CPUs.
181
182   set_ftrace_filter:
183
184         When dynamic ftrace is configured in (see the
185         section below "dynamic ftrace"), the code is dynamically
186         modified (code text rewrite) to disable calling of the
187         function profiler (mcount). This lets tracing be configured
188         in with practically no overhead in performance.  This also
189         has a side effect of enabling or disabling specific functions
190         to be traced. Echoing names of functions into this file
191         will limit the trace to only those functions.
192
193         This interface also allows for commands to be used. See the
194         "Filter commands" section for more details.
195
196   set_ftrace_notrace:
197
198         This has an effect opposite to that of
199         set_ftrace_filter. Any function that is added here will not
200         be traced. If a function exists in both set_ftrace_filter
201         and set_ftrace_notrace, the function will _not_ be traced.
202
203   set_ftrace_pid:
204
205         Have the function tracer only trace a single thread.
206
207   set_event_pid:
208
209         Have the events only trace a task with a PID listed in this file.
210         Note, sched_switch and sched_wake_up will also trace events
211         listed in this file.
212
213   set_graph_function:
214
215         Set a "trigger" function where tracing should start
216         with the function graph tracer (See the section
217         "dynamic ftrace" for more details).
218
219   available_filter_functions:
220
221         This lists the functions that ftrace
222         has processed and can trace. These are the function
223         names that you can pass to "set_ftrace_filter" or
224         "set_ftrace_notrace". (See the section "dynamic ftrace"
225         below for more details.)
226
227   enabled_functions:
228
229         This file is more for debugging ftrace, but can also be useful
230         in seeing if any function has a callback attached to it.
231         Not only does the trace infrastructure use ftrace function
232         trace utility, but other subsystems might too. This file
233         displays all functions that have a callback attached to them
234         as well as the number of callbacks that have been attached.
235         Note, a callback may also call multiple functions which will
236         not be listed in this count.
237
238         If the callback registered to be traced by a function with
239         the "save regs" attribute (thus even more overhead), a 'R'
240         will be displayed on the same line as the function that
241         is returning registers.
242
243         If the callback registered to be traced by a function with
244         the "ip modify" attribute (thus the regs->ip can be changed),
245         an 'I' will be displayed on the same line as the function that
246         can be overridden.
247
248   function_profile_enabled:
249
250         When set it will enable all functions with either the function
251         tracer, or if enabled, the function graph tracer. It will
252         keep a histogram of the number of functions that were called
253         and if run with the function graph tracer, it will also keep
254         track of the time spent in those functions. The histogram
255         content can be displayed in the files:
256
257         trace_stats/function<cpu> ( function0, function1, etc).
258
259   trace_stats:
260
261         A directory that holds different tracing stats.
262
263   kprobe_events:
264  
265         Enable dynamic trace points. See kprobetrace.txt.
266
267   kprobe_profile:
268
269         Dynamic trace points stats. See kprobetrace.txt.
270
271   max_graph_depth:
272
273         Used with the function graph tracer. This is the max depth
274         it will trace into a function. Setting this to a value of
275         one will show only the first kernel function that is called
276         from user space.
277
278   printk_formats:
279
280         This is for tools that read the raw format files. If an event in
281         the ring buffer references a string (currently only trace_printk()
282         does this), only a pointer to the string is recorded into the buffer
283         and not the string itself. This prevents tools from knowing what
284         that string was. This file displays the string and address for
285         the string allowing tools to map the pointers to what the
286         strings were.
287
288   saved_cmdlines:
289
290         Only the pid of the task is recorded in a trace event unless
291         the event specifically saves the task comm as well. Ftrace
292         makes a cache of pid mappings to comms to try to display
293         comms for events. If a pid for a comm is not listed, then
294         "<...>" is displayed in the output.
295
296   snapshot:
297
298         This displays the "snapshot" buffer and also lets the user
299         take a snapshot of the current running trace.
300         See the "Snapshot" section below for more details.
301
302   stack_max_size:
303
304         When the stack tracer is activated, this will display the
305         maximum stack size it has encountered.
306         See the "Stack Trace" section below.
307
308   stack_trace:
309
310         This displays the stack back trace of the largest stack
311         that was encountered when the stack tracer is activated.
312         See the "Stack Trace" section below.
313
314   stack_trace_filter:
315
316         This is similar to "set_ftrace_filter" but it limits what
317         functions the stack tracer will check.
318
319   trace_clock:
320
321         Whenever an event is recorded into the ring buffer, a
322         "timestamp" is added. This stamp comes from a specified
323         clock. By default, ftrace uses the "local" clock. This
324         clock is very fast and strictly per cpu, but on some
325         systems it may not be monotonic with respect to other
326         CPUs. In other words, the local clocks may not be in sync
327         with local clocks on other CPUs.
328
329         Usual clocks for tracing:
330
331           # cat trace_clock
332           [local] global counter x86-tsc
333
334           local: Default clock, but may not be in sync across CPUs
335
336           global: This clock is in sync with all CPUs but may
337                   be a bit slower than the local clock.
338
339           counter: This is not a clock at all, but literally an atomic
340                    counter. It counts up one by one, but is in sync
341                    with all CPUs. This is useful when you need to
342                    know exactly the order events occurred with respect to
343                    each other on different CPUs.
344
345           uptime: This uses the jiffies counter and the time stamp
346                   is relative to the time since boot up.
347
348           perf: This makes ftrace use the same clock that perf uses.
349                 Eventually perf will be able to read ftrace buffers
350                 and this will help out in interleaving the data.
351
352           x86-tsc: Architectures may define their own clocks. For
353                    example, x86 uses its own TSC cycle clock here.
354
355           ppc-tb: This uses the powerpc timebase register value.
356                   This is in sync across CPUs and can also be used
357                   to correlate events across hypervisor/guest if
358                   tb_offset is known.
359
360           mono: This uses the fast monotonic clock (CLOCK_MONOTONIC)
361                 which is monotonic and is subject to NTP rate adjustments.
362
363           mono_raw:
364                 This is the raw monotonic clock (CLOCK_MONOTONIC_RAW)
365                 which is montonic but is not subject to any rate adjustments
366                 and ticks at the same rate as the hardware clocksource.
367
368           boot: This is the boot clock (CLOCK_BOOTTIME) and is based on the
369                 fast monotonic clock, but also accounts for time spent in
370                 suspend. Since the clock access is designed for use in
371                 tracing in the suspend path, some side effects are possible
372                 if clock is accessed after the suspend time is accounted before
373                 the fast mono clock is updated. In this case, the clock update
374                 appears to happen slightly sooner than it normally would have.
375                 Also on 32-bit systems, its possible that the 64-bit boot offset
376                 sees a partial update. These effects are rare and post
377                 processing should be able to handle them. See comments on
378                 ktime_get_boot_fast_ns function for more information.
379
380         To set a clock, simply echo the clock name into this file.
381
382           echo global > trace_clock
383
384   trace_marker:
385
386         This is a very useful file for synchronizing user space
387         with events happening in the kernel. Writing strings into
388         this file will be written into the ftrace buffer.
389
390         It is useful in applications to open this file at the start
391         of the application and just reference the file descriptor
392         for the file.
393
394         void trace_write(const char *fmt, ...)
395         {
396                 va_list ap;
397                 char buf[256];
398                 int n;
399
400                 if (trace_fd < 0)
401                         return;
402
403                 va_start(ap, fmt);
404                 n = vsnprintf(buf, 256, fmt, ap);
405                 va_end(ap);
406
407                 write(trace_fd, buf, n);
408         }
409
410         start:
411
412                 trace_fd = open("trace_marker", WR_ONLY);
413
414   uprobe_events:
415  
416         Add dynamic tracepoints in programs.
417         See uprobetracer.txt
418
419   uprobe_profile:
420
421         Uprobe statistics. See uprobetrace.txt
422
423   instances:
424
425         This is a way to make multiple trace buffers where different
426         events can be recorded in different buffers.
427         See "Instances" section below.
428
429   events:
430
431         This is the trace event directory. It holds event tracepoints
432         (also known as static tracepoints) that have been compiled
433         into the kernel. It shows what event tracepoints exist
434         and how they are grouped by system. There are "enable"
435         files at various levels that can enable the tracepoints
436         when a "1" is written to them.
437
438         See events.txt for more information.
439
440   per_cpu:
441
442         This is a directory that contains the trace per_cpu information.
443
444   per_cpu/cpu0/buffer_size_kb:
445
446         The ftrace buffer is defined per_cpu. That is, there's a separate
447         buffer for each CPU to allow writes to be done atomically,
448         and free from cache bouncing. These buffers may have different
449         size buffers. This file is similar to the buffer_size_kb
450         file, but it only displays or sets the buffer size for the
451         specific CPU. (here cpu0).
452
453   per_cpu/cpu0/trace:
454
455         This is similar to the "trace" file, but it will only display
456         the data specific for the CPU. If written to, it only clears
457         the specific CPU buffer.
458
459   per_cpu/cpu0/trace_pipe
460
461         This is similar to the "trace_pipe" file, and is a consuming
462         read, but it will only display (and consume) the data specific
463         for the CPU.
464
465   per_cpu/cpu0/trace_pipe_raw
466
467         For tools that can parse the ftrace ring buffer binary format,
468         the trace_pipe_raw file can be used to extract the data
469         from the ring buffer directly. With the use of the splice()
470         system call, the buffer data can be quickly transferred to
471         a file or to the network where a server is collecting the
472         data.
473
474         Like trace_pipe, this is a consuming reader, where multiple
475         reads will always produce different data.
476
477   per_cpu/cpu0/snapshot:
478
479         This is similar to the main "snapshot" file, but will only
480         snapshot the current CPU (if supported). It only displays
481         the content of the snapshot for a given CPU, and if
482         written to, only clears this CPU buffer.
483
484   per_cpu/cpu0/snapshot_raw:
485
486         Similar to the trace_pipe_raw, but will read the binary format
487         from the snapshot buffer for the given CPU.
488
489   per_cpu/cpu0/stats:
490
491         This displays certain stats about the ring buffer:
492
493          entries: The number of events that are still in the buffer.
494
495          overrun: The number of lost events due to overwriting when
496                   the buffer was full.
497
498          commit overrun: Should always be zero.
499                 This gets set if so many events happened within a nested
500                 event (ring buffer is re-entrant), that it fills the
501                 buffer and starts dropping events.
502
503          bytes: Bytes actually read (not overwritten).
504
505          oldest event ts: The oldest timestamp in the buffer
506
507          now ts: The current timestamp
508
509          dropped events: Events lost due to overwrite option being off.
510
511          read events: The number of events read.
512
513 The Tracers
514 -----------
515
516 Here is the list of current tracers that may be configured.
517
518   "function"
519
520         Function call tracer to trace all kernel functions.
521
522   "function_graph"
523
524         Similar to the function tracer except that the
525         function tracer probes the functions on their entry
526         whereas the function graph tracer traces on both entry
527         and exit of the functions. It then provides the ability
528         to draw a graph of function calls similar to C code
529         source.
530
531   "irqsoff"
532
533         Traces the areas that disable interrupts and saves
534         the trace with the longest max latency.
535         See tracing_max_latency. When a new max is recorded,
536         it replaces the old trace. It is best to view this
537         trace with the latency-format option enabled.
538
539   "preemptoff"
540
541         Similar to irqsoff but traces and records the amount of
542         time for which preemption is disabled.
543
544   "preemptirqsoff"
545
546         Similar to irqsoff and preemptoff, but traces and
547         records the largest time for which irqs and/or preemption
548         is disabled.
549
550   "wakeup"
551
552         Traces and records the max latency that it takes for
553         the highest priority task to get scheduled after
554         it has been woken up.
555         Traces all tasks as an average developer would expect.
556
557   "wakeup_rt"
558
559         Traces and records the max latency that it takes for just
560         RT tasks (as the current "wakeup" does). This is useful
561         for those interested in wake up timings of RT tasks.
562
563   "nop"
564
565         This is the "trace nothing" tracer. To remove all
566         tracers from tracing simply echo "nop" into
567         current_tracer.
568
569
570 Examples of using the tracer
571 ----------------------------
572
573 Here are typical examples of using the tracers when controlling
574 them only with the debugfs interface (without using any
575 user-land utilities).
576
577 Output format:
578 --------------
579
580 Here is an example of the output format of the file "trace"
581
582                              --------
583 # tracer: function
584 #
585 # entries-in-buffer/entries-written: 140080/250280   #P:4
586 #
587 #                              _-----=> irqs-off
588 #                             / _----=> need-resched
589 #                            | / _---=> hardirq/softirq
590 #                            || / _--=> preempt-depth
591 #                            ||| /     delay
592 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
593 #              | |       |   ||||       |         |
594             bash-1977  [000] .... 17284.993652: sys_close <-system_call_fastpath
595             bash-1977  [000] .... 17284.993653: __close_fd <-sys_close
596             bash-1977  [000] .... 17284.993653: _raw_spin_lock <-__close_fd
597             sshd-1974  [003] .... 17284.993653: __srcu_read_unlock <-fsnotify
598             bash-1977  [000] .... 17284.993654: add_preempt_count <-_raw_spin_lock
599             bash-1977  [000] ...1 17284.993655: _raw_spin_unlock <-__close_fd
600             bash-1977  [000] ...1 17284.993656: sub_preempt_count <-_raw_spin_unlock
601             bash-1977  [000] .... 17284.993657: filp_close <-__close_fd
602             bash-1977  [000] .... 17284.993657: dnotify_flush <-filp_close
603             sshd-1974  [003] .... 17284.993658: sys_select <-system_call_fastpath
604                              --------
605
606 A header is printed with the tracer name that is represented by
607 the trace. In this case the tracer is "function". Then it shows the
608 number of events in the buffer as well as the total number of entries
609 that were written. The difference is the number of entries that were
610 lost due to the buffer filling up (250280 - 140080 = 110200 events
611 lost).
612
613 The header explains the content of the events. Task name "bash", the task
614 PID "1977", the CPU that it was running on "000", the latency format
615 (explained below), the timestamp in <secs>.<usecs> format, the
616 function name that was traced "sys_close" and the parent function that
617 called this function "system_call_fastpath". The timestamp is the time
618 at which the function was entered.
619
620 Latency trace format
621 --------------------
622
623 When the latency-format option is enabled or when one of the latency
624 tracers is set, the trace file gives somewhat more information to see
625 why a latency happened. Here is a typical trace.
626
627 # tracer: irqsoff
628 #
629 # irqsoff latency trace v1.1.5 on 3.8.0-test+
630 # --------------------------------------------------------------------
631 # latency: 259 us, #4/4, CPU#2 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
632 #    -----------------
633 #    | task: ps-6143 (uid:0 nice:0 policy:0 rt_prio:0)
634 #    -----------------
635 #  => started at: __lock_task_sighand
636 #  => ended at:   _raw_spin_unlock_irqrestore
637 #
638 #
639 #                  _------=> CPU#            
640 #                 / _-----=> irqs-off        
641 #                | / _----=> need-resched    
642 #                || / _---=> hardirq/softirq 
643 #                ||| / _--=> preempt-depth   
644 #                |||| /     delay             
645 #  cmd     pid   ||||| time  |   caller      
646 #     \   /      |||||  \    |   /           
647       ps-6143    2d...    0us!: trace_hardirqs_off <-__lock_task_sighand
648       ps-6143    2d..1  259us+: trace_hardirqs_on <-_raw_spin_unlock_irqrestore
649       ps-6143    2d..1  263us+: time_hardirqs_on <-_raw_spin_unlock_irqrestore
650       ps-6143    2d..1  306us : <stack trace>
651  => trace_hardirqs_on_caller
652  => trace_hardirqs_on
653  => _raw_spin_unlock_irqrestore
654  => do_task_stat
655  => proc_tgid_stat
656  => proc_single_show
657  => seq_read
658  => vfs_read
659  => sys_read
660  => system_call_fastpath
661
662
663 This shows that the current tracer is "irqsoff" tracing the time
664 for which interrupts were disabled. It gives the trace version (which
665 never changes) and the version of the kernel upon which this was executed on
666 (3.10). Then it displays the max latency in microseconds (259 us). The number
667 of trace entries displayed and the total number (both are four: #4/4).
668 VP, KP, SP, and HP are always zero and are reserved for later use.
669 #P is the number of online CPUs (#P:4).
670
671 The task is the process that was running when the latency
672 occurred. (ps pid: 6143).
673
674 The start and stop (the functions in which the interrupts were
675 disabled and enabled respectively) that caused the latencies:
676
677  __lock_task_sighand is where the interrupts were disabled.
678  _raw_spin_unlock_irqrestore is where they were enabled again.
679
680 The next lines after the header are the trace itself. The header
681 explains which is which.
682
683   cmd: The name of the process in the trace.
684
685   pid: The PID of that process.
686
687   CPU#: The CPU which the process was running on.
688
689   irqs-off: 'd' interrupts are disabled. '.' otherwise.
690             Note: If the architecture does not support a way to
691                   read the irq flags variable, an 'X' will always
692                   be printed here.
693
694   need-resched:
695         'N' both TIF_NEED_RESCHED and PREEMPT_NEED_RESCHED is set,
696         'n' only TIF_NEED_RESCHED is set,
697         'p' only PREEMPT_NEED_RESCHED is set,
698         '.' otherwise.
699
700   hardirq/softirq:
701         'H' - hard irq occurred inside a softirq.
702         'h' - hard irq is running
703         's' - soft irq is running
704         '.' - normal context.
705
706   preempt-depth: The level of preempt_disabled
707
708 The above is mostly meaningful for kernel developers.
709
710   time: When the latency-format option is enabled, the trace file
711         output includes a timestamp relative to the start of the
712         trace. This differs from the output when latency-format
713         is disabled, which includes an absolute timestamp.
714
715   delay: This is just to help catch your eye a bit better. And
716          needs to be fixed to be only relative to the same CPU.
717          The marks are determined by the difference between this
718          current trace and the next trace.
719           '$' - greater than 1 second
720           '@' - greater than 100 milisecond
721           '*' - greater than 10 milisecond
722           '#' - greater than 1000 microsecond
723           '!' - greater than 100 microsecond
724           '+' - greater than 10 microsecond
725           ' ' - less than or equal to 10 microsecond.
726
727   The rest is the same as the 'trace' file.
728
729   Note, the latency tracers will usually end with a back trace
730   to easily find where the latency occurred.
731
732 trace_options
733 -------------
734
735 The trace_options file (or the options directory) is used to control
736 what gets printed in the trace output, or manipulate the tracers.
737 To see what is available, simply cat the file:
738
739   cat trace_options
740 print-parent
741 nosym-offset
742 nosym-addr
743 noverbose
744 noraw
745 nohex
746 nobin
747 noblock
748 nostacktrace
749 trace_printk
750 noftrace_preempt
751 nobranch
752 annotate
753 nouserstacktrace
754 nosym-userobj
755 noprintk-msg-only
756 context-info
757 latency-format
758 sleep-time
759 graph-time
760 record-cmd
761 overwrite
762 nodisable_on_free
763 irq-info
764 markers
765 function-trace
766
767 To disable one of the options, echo in the option prepended with
768 "no".
769
770   echo noprint-parent > trace_options
771
772 To enable an option, leave off the "no".
773
774   echo sym-offset > trace_options
775
776 Here are the available options:
777
778   print-parent - On function traces, display the calling (parent)
779                  function as well as the function being traced.
780
781   print-parent:
782    bash-4000  [01]  1477.606694: simple_strtoul <-kstrtoul
783
784   noprint-parent:
785    bash-4000  [01]  1477.606694: simple_strtoul
786
787
788   sym-offset - Display not only the function name, but also the
789                offset in the function. For example, instead of
790                seeing just "ktime_get", you will see
791                "ktime_get+0xb/0x20".
792
793   sym-offset:
794    bash-4000  [01]  1477.606694: simple_strtoul+0x6/0xa0
795
796   sym-addr - this will also display the function address as well
797              as the function name.
798
799   sym-addr:
800    bash-4000  [01]  1477.606694: simple_strtoul <c0339346>
801
802   verbose - This deals with the trace file when the
803             latency-format option is enabled.
804
805     bash  4000 1 0 00000000 00010a95 [58127d26] 1720.415ms \
806     (+0.000ms): simple_strtoul (kstrtoul)
807
808   raw - This will display raw numbers. This option is best for
809         use with user applications that can translate the raw
810         numbers better than having it done in the kernel.
811
812   hex - Similar to raw, but the numbers will be in a hexadecimal
813         format.
814
815   bin - This will print out the formats in raw binary.
816
817   block - When set, reading trace_pipe will not block when polled.
818
819   stacktrace - This is one of the options that changes the trace
820                itself. When a trace is recorded, so is the stack
821                of functions. This allows for back traces of
822                trace sites.
823
824   trace_printk - Can disable trace_printk() from writing into the buffer.
825
826   branch - Enable branch tracing with the tracer.
827
828   annotate - It is sometimes confusing when the CPU buffers are full
829              and one CPU buffer had a lot of events recently, thus
830              a shorter time frame, were another CPU may have only had
831              a few events, which lets it have older events. When
832              the trace is reported, it shows the oldest events first,
833              and it may look like only one CPU ran (the one with the
834              oldest events). When the annotate option is set, it will
835              display when a new CPU buffer started:
836
837           <idle>-0     [001] dNs4 21169.031481: wake_up_idle_cpu <-add_timer_on
838           <idle>-0     [001] dNs4 21169.031482: _raw_spin_unlock_irqrestore <-add_timer_on
839           <idle>-0     [001] .Ns4 21169.031484: sub_preempt_count <-_raw_spin_unlock_irqrestore
840 ##### CPU 2 buffer started ####
841           <idle>-0     [002] .N.1 21169.031484: rcu_idle_exit <-cpu_idle
842           <idle>-0     [001] .Ns3 21169.031484: _raw_spin_unlock <-clocksource_watchdog
843           <idle>-0     [001] .Ns3 21169.031485: sub_preempt_count <-_raw_spin_unlock
844
845   userstacktrace - This option changes the trace. It records a
846                    stacktrace of the current userspace thread.
847
848   sym-userobj - when user stacktrace are enabled, look up which
849                 object the address belongs to, and print a
850                 relative address. This is especially useful when
851                 ASLR is on, otherwise you don't get a chance to
852                 resolve the address to object/file/line after
853                 the app is no longer running
854
855                 The lookup is performed when you read
856                 trace,trace_pipe. Example:
857
858                 a.out-1623  [000] 40874.465068: /root/a.out[+0x480] <-/root/a.out[+0
859 x494] <- /root/a.out[+0x4a8] <- /lib/libc-2.7.so[+0x1e1a6]
860
861
862   printk-msg-only - When set, trace_printk()s will only show the format
863                     and not their parameters (if trace_bprintk() or
864                     trace_bputs() was used to save the trace_printk()).
865
866   context-info - Show only the event data. Hides the comm, PID,
867                  timestamp, CPU, and other useful data.
868
869   latency-format - This option changes the trace. When
870                    it is enabled, the trace displays
871                    additional information about the
872                    latencies, as described in "Latency
873                    trace format".
874
875   sleep-time - When running function graph tracer, to include
876                the time a task schedules out in its function.
877                When enabled, it will account time the task has been
878                scheduled out as part of the function call.
879
880   graph-time - When running function graph tracer, to include the
881                time to call nested functions. When this is not set,
882                the time reported for the function will only include
883                the time the function itself executed for, not the time
884                for functions that it called.
885
886   record-cmd - When any event or tracer is enabled, a hook is enabled
887                in the sched_switch trace point to fill comm cache
888                with mapped pids and comms. But this may cause some
889                overhead, and if you only care about pids, and not the
890                name of the task, disabling this option can lower the
891                impact of tracing.
892
893   overwrite - This controls what happens when the trace buffer is
894               full. If "1" (default), the oldest events are
895               discarded and overwritten. If "0", then the newest
896               events are discarded.
897                 (see per_cpu/cpu0/stats for overrun and dropped)
898
899   disable_on_free - When the free_buffer is closed, tracing will
900                     stop (tracing_on set to 0).
901
902   irq-info - Shows the interrupt, preempt count, need resched data.
903              When disabled, the trace looks like:
904
905 # tracer: function
906 #
907 # entries-in-buffer/entries-written: 144405/9452052   #P:4
908 #
909 #           TASK-PID   CPU#      TIMESTAMP  FUNCTION
910 #              | |       |          |         |
911           <idle>-0     [002]  23636.756054: ttwu_do_activate.constprop.89 <-try_to_wake_up
912           <idle>-0     [002]  23636.756054: activate_task <-ttwu_do_activate.constprop.89
913           <idle>-0     [002]  23636.756055: enqueue_task <-activate_task
914
915
916   markers - When set, the trace_marker is writable (only by root).
917             When disabled, the trace_marker will error with EINVAL
918             on write.
919
920
921   function-trace - The latency tracers will enable function tracing
922             if this option is enabled (default it is). When
923             it is disabled, the latency tracers do not trace
924             functions. This keeps the overhead of the tracer down
925             when performing latency tests.
926
927  Note: Some tracers have their own options. They only appear
928        when the tracer is active.
929
930
931
932 irqsoff
933 -------
934
935 When interrupts are disabled, the CPU can not react to any other
936 external event (besides NMIs and SMIs). This prevents the timer
937 interrupt from triggering or the mouse interrupt from letting
938 the kernel know of a new mouse event. The result is a latency
939 with the reaction time.
940
941 The irqsoff tracer tracks the time for which interrupts are
942 disabled. When a new maximum latency is hit, the tracer saves
943 the trace leading up to that latency point so that every time a
944 new maximum is reached, the old saved trace is discarded and the
945 new trace is saved.
946
947 To reset the maximum, echo 0 into tracing_max_latency. Here is
948 an example:
949
950  # echo 0 > options/function-trace
951  # echo irqsoff > current_tracer
952  # echo 1 > tracing_on
953  # echo 0 > tracing_max_latency
954  # ls -ltr
955  [...]
956  # echo 0 > tracing_on
957  # cat trace
958 # tracer: irqsoff
959 #
960 # irqsoff latency trace v1.1.5 on 3.8.0-test+
961 # --------------------------------------------------------------------
962 # latency: 16 us, #4/4, CPU#0 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
963 #    -----------------
964 #    | task: swapper/0-0 (uid:0 nice:0 policy:0 rt_prio:0)
965 #    -----------------
966 #  => started at: run_timer_softirq
967 #  => ended at:   run_timer_softirq
968 #
969 #
970 #                  _------=> CPU#            
971 #                 / _-----=> irqs-off        
972 #                | / _----=> need-resched    
973 #                || / _---=> hardirq/softirq 
974 #                ||| / _--=> preempt-depth   
975 #                |||| /     delay             
976 #  cmd     pid   ||||| time  |   caller      
977 #     \   /      |||||  \    |   /           
978   <idle>-0       0d.s2    0us+: _raw_spin_lock_irq <-run_timer_softirq
979   <idle>-0       0dNs3   17us : _raw_spin_unlock_irq <-run_timer_softirq
980   <idle>-0       0dNs3   17us+: trace_hardirqs_on <-run_timer_softirq
981   <idle>-0       0dNs3   25us : <stack trace>
982  => _raw_spin_unlock_irq
983  => run_timer_softirq
984  => __do_softirq
985  => call_softirq
986  => do_softirq
987  => irq_exit
988  => smp_apic_timer_interrupt
989  => apic_timer_interrupt
990  => rcu_idle_exit
991  => cpu_idle
992  => rest_init
993  => start_kernel
994  => x86_64_start_reservations
995  => x86_64_start_kernel
996
997 Here we see that that we had a latency of 16 microseconds (which is
998 very good). The _raw_spin_lock_irq in run_timer_softirq disabled
999 interrupts. The difference between the 16 and the displayed
1000 timestamp 25us occurred because the clock was incremented
1001 between the time of recording the max latency and the time of
1002 recording the function that had that latency.
1003
1004 Note the above example had function-trace not set. If we set
1005 function-trace, we get a much larger output:
1006
1007  with echo 1 > options/function-trace
1008
1009 # tracer: irqsoff
1010 #
1011 # irqsoff latency trace v1.1.5 on 3.8.0-test+
1012 # --------------------------------------------------------------------
1013 # latency: 71 us, #168/168, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1014 #    -----------------
1015 #    | task: bash-2042 (uid:0 nice:0 policy:0 rt_prio:0)
1016 #    -----------------
1017 #  => started at: ata_scsi_queuecmd
1018 #  => ended at:   ata_scsi_queuecmd
1019 #
1020 #
1021 #                  _------=> CPU#            
1022 #                 / _-----=> irqs-off        
1023 #                | / _----=> need-resched    
1024 #                || / _---=> hardirq/softirq 
1025 #                ||| / _--=> preempt-depth   
1026 #                |||| /     delay             
1027 #  cmd     pid   ||||| time  |   caller      
1028 #     \   /      |||||  \    |   /           
1029     bash-2042    3d...    0us : _raw_spin_lock_irqsave <-ata_scsi_queuecmd
1030     bash-2042    3d...    0us : add_preempt_count <-_raw_spin_lock_irqsave
1031     bash-2042    3d..1    1us : ata_scsi_find_dev <-ata_scsi_queuecmd
1032     bash-2042    3d..1    1us : __ata_scsi_find_dev <-ata_scsi_find_dev
1033     bash-2042    3d..1    2us : ata_find_dev.part.14 <-__ata_scsi_find_dev
1034     bash-2042    3d..1    2us : ata_qc_new_init <-__ata_scsi_queuecmd
1035     bash-2042    3d..1    3us : ata_sg_init <-__ata_scsi_queuecmd
1036     bash-2042    3d..1    4us : ata_scsi_rw_xlat <-__ata_scsi_queuecmd
1037     bash-2042    3d..1    4us : ata_build_rw_tf <-ata_scsi_rw_xlat
1038 [...]
1039     bash-2042    3d..1   67us : delay_tsc <-__delay
1040     bash-2042    3d..1   67us : add_preempt_count <-delay_tsc
1041     bash-2042    3d..2   67us : sub_preempt_count <-delay_tsc
1042     bash-2042    3d..1   67us : add_preempt_count <-delay_tsc
1043     bash-2042    3d..2   68us : sub_preempt_count <-delay_tsc
1044     bash-2042    3d..1   68us+: ata_bmdma_start <-ata_bmdma_qc_issue
1045     bash-2042    3d..1   71us : _raw_spin_unlock_irqrestore <-ata_scsi_queuecmd
1046     bash-2042    3d..1   71us : _raw_spin_unlock_irqrestore <-ata_scsi_queuecmd
1047     bash-2042    3d..1   72us+: trace_hardirqs_on <-ata_scsi_queuecmd
1048     bash-2042    3d..1  120us : <stack trace>
1049  => _raw_spin_unlock_irqrestore
1050  => ata_scsi_queuecmd
1051  => scsi_dispatch_cmd
1052  => scsi_request_fn
1053  => __blk_run_queue_uncond
1054  => __blk_run_queue
1055  => blk_queue_bio
1056  => generic_make_request
1057  => submit_bio
1058  => submit_bh
1059  => __ext3_get_inode_loc
1060  => ext3_iget
1061  => ext3_lookup
1062  => lookup_real
1063  => __lookup_hash
1064  => walk_component
1065  => lookup_last
1066  => path_lookupat
1067  => filename_lookup
1068  => user_path_at_empty
1069  => user_path_at
1070  => vfs_fstatat
1071  => vfs_stat
1072  => sys_newstat
1073  => system_call_fastpath
1074
1075
1076 Here we traced a 71 microsecond latency. But we also see all the
1077 functions that were called during that time. Note that by
1078 enabling function tracing, we incur an added overhead. This
1079 overhead may extend the latency times. But nevertheless, this
1080 trace has provided some very helpful debugging information.
1081
1082
1083 preemptoff
1084 ----------
1085
1086 When preemption is disabled, we may be able to receive
1087 interrupts but the task cannot be preempted and a higher
1088 priority task must wait for preemption to be enabled again
1089 before it can preempt a lower priority task.
1090
1091 The preemptoff tracer traces the places that disable preemption.
1092 Like the irqsoff tracer, it records the maximum latency for
1093 which preemption was disabled. The control of preemptoff tracer
1094 is much like the irqsoff tracer.
1095
1096  # echo 0 > options/function-trace
1097  # echo preemptoff > current_tracer
1098  # echo 1 > tracing_on
1099  # echo 0 > tracing_max_latency
1100  # ls -ltr
1101  [...]
1102  # echo 0 > tracing_on
1103  # cat trace
1104 # tracer: preemptoff
1105 #
1106 # preemptoff latency trace v1.1.5 on 3.8.0-test+
1107 # --------------------------------------------------------------------
1108 # latency: 46 us, #4/4, CPU#1 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1109 #    -----------------
1110 #    | task: sshd-1991 (uid:0 nice:0 policy:0 rt_prio:0)
1111 #    -----------------
1112 #  => started at: do_IRQ
1113 #  => ended at:   do_IRQ
1114 #
1115 #
1116 #                  _------=> CPU#            
1117 #                 / _-----=> irqs-off        
1118 #                | / _----=> need-resched    
1119 #                || / _---=> hardirq/softirq 
1120 #                ||| / _--=> preempt-depth   
1121 #                |||| /     delay             
1122 #  cmd     pid   ||||| time  |   caller      
1123 #     \   /      |||||  \    |   /           
1124     sshd-1991    1d.h.    0us+: irq_enter <-do_IRQ
1125     sshd-1991    1d..1   46us : irq_exit <-do_IRQ
1126     sshd-1991    1d..1   47us+: trace_preempt_on <-do_IRQ
1127     sshd-1991    1d..1   52us : <stack trace>
1128  => sub_preempt_count
1129  => irq_exit
1130  => do_IRQ
1131  => ret_from_intr
1132
1133
1134 This has some more changes. Preemption was disabled when an
1135 interrupt came in (notice the 'h'), and was enabled on exit.
1136 But we also see that interrupts have been disabled when entering
1137 the preempt off section and leaving it (the 'd'). We do not know if
1138 interrupts were enabled in the mean time or shortly after this
1139 was over.
1140
1141 # tracer: preemptoff
1142 #
1143 # preemptoff latency trace v1.1.5 on 3.8.0-test+
1144 # --------------------------------------------------------------------
1145 # latency: 83 us, #241/241, CPU#1 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1146 #    -----------------
1147 #    | task: bash-1994 (uid:0 nice:0 policy:0 rt_prio:0)
1148 #    -----------------
1149 #  => started at: wake_up_new_task
1150 #  => ended at:   task_rq_unlock
1151 #
1152 #
1153 #                  _------=> CPU#            
1154 #                 / _-----=> irqs-off        
1155 #                | / _----=> need-resched    
1156 #                || / _---=> hardirq/softirq 
1157 #                ||| / _--=> preempt-depth   
1158 #                |||| /     delay             
1159 #  cmd     pid   ||||| time  |   caller      
1160 #     \   /      |||||  \    |   /           
1161     bash-1994    1d..1    0us : _raw_spin_lock_irqsave <-wake_up_new_task
1162     bash-1994    1d..1    0us : select_task_rq_fair <-select_task_rq
1163     bash-1994    1d..1    1us : __rcu_read_lock <-select_task_rq_fair
1164     bash-1994    1d..1    1us : source_load <-select_task_rq_fair
1165     bash-1994    1d..1    1us : source_load <-select_task_rq_fair
1166 [...]
1167     bash-1994    1d..1   12us : irq_enter <-smp_apic_timer_interrupt
1168     bash-1994    1d..1   12us : rcu_irq_enter <-irq_enter
1169     bash-1994    1d..1   13us : add_preempt_count <-irq_enter
1170     bash-1994    1d.h1   13us : exit_idle <-smp_apic_timer_interrupt
1171     bash-1994    1d.h1   13us : hrtimer_interrupt <-smp_apic_timer_interrupt
1172     bash-1994    1d.h1   13us : _raw_spin_lock <-hrtimer_interrupt
1173     bash-1994    1d.h1   14us : add_preempt_count <-_raw_spin_lock
1174     bash-1994    1d.h2   14us : ktime_get_update_offsets <-hrtimer_interrupt
1175 [...]
1176     bash-1994    1d.h1   35us : lapic_next_event <-clockevents_program_event
1177     bash-1994    1d.h1   35us : irq_exit <-smp_apic_timer_interrupt
1178     bash-1994    1d.h1   36us : sub_preempt_count <-irq_exit
1179     bash-1994    1d..2   36us : do_softirq <-irq_exit
1180     bash-1994    1d..2   36us : __do_softirq <-call_softirq
1181     bash-1994    1d..2   36us : __local_bh_disable <-__do_softirq
1182     bash-1994    1d.s2   37us : add_preempt_count <-_raw_spin_lock_irq
1183     bash-1994    1d.s3   38us : _raw_spin_unlock <-run_timer_softirq
1184     bash-1994    1d.s3   39us : sub_preempt_count <-_raw_spin_unlock
1185     bash-1994    1d.s2   39us : call_timer_fn <-run_timer_softirq
1186 [...]
1187     bash-1994    1dNs2   81us : cpu_needs_another_gp <-rcu_process_callbacks
1188     bash-1994    1dNs2   82us : __local_bh_enable <-__do_softirq
1189     bash-1994    1dNs2   82us : sub_preempt_count <-__local_bh_enable
1190     bash-1994    1dN.2   82us : idle_cpu <-irq_exit
1191     bash-1994    1dN.2   83us : rcu_irq_exit <-irq_exit
1192     bash-1994    1dN.2   83us : sub_preempt_count <-irq_exit
1193     bash-1994    1.N.1   84us : _raw_spin_unlock_irqrestore <-task_rq_unlock
1194     bash-1994    1.N.1   84us+: trace_preempt_on <-task_rq_unlock
1195     bash-1994    1.N.1  104us : <stack trace>
1196  => sub_preempt_count
1197  => _raw_spin_unlock_irqrestore
1198  => task_rq_unlock
1199  => wake_up_new_task
1200  => do_fork
1201  => sys_clone
1202  => stub_clone
1203
1204
1205 The above is an example of the preemptoff trace with
1206 function-trace set. Here we see that interrupts were not disabled
1207 the entire time. The irq_enter code lets us know that we entered
1208 an interrupt 'h'. Before that, the functions being traced still
1209 show that it is not in an interrupt, but we can see from the
1210 functions themselves that this is not the case.
1211
1212 preemptirqsoff
1213 --------------
1214
1215 Knowing the locations that have interrupts disabled or
1216 preemption disabled for the longest times is helpful. But
1217 sometimes we would like to know when either preemption and/or
1218 interrupts are disabled.
1219
1220 Consider the following code:
1221
1222     local_irq_disable();
1223     call_function_with_irqs_off();
1224     preempt_disable();
1225     call_function_with_irqs_and_preemption_off();
1226     local_irq_enable();
1227     call_function_with_preemption_off();
1228     preempt_enable();
1229
1230 The irqsoff tracer will record the total length of
1231 call_function_with_irqs_off() and
1232 call_function_with_irqs_and_preemption_off().
1233
1234 The preemptoff tracer will record the total length of
1235 call_function_with_irqs_and_preemption_off() and
1236 call_function_with_preemption_off().
1237
1238 But neither will trace the time that interrupts and/or
1239 preemption is disabled. This total time is the time that we can
1240 not schedule. To record this time, use the preemptirqsoff
1241 tracer.
1242
1243 Again, using this trace is much like the irqsoff and preemptoff
1244 tracers.
1245
1246  # echo 0 > options/function-trace
1247  # echo preemptirqsoff > current_tracer
1248  # echo 1 > tracing_on
1249  # echo 0 > tracing_max_latency
1250  # ls -ltr
1251  [...]
1252  # echo 0 > tracing_on
1253  # cat trace
1254 # tracer: preemptirqsoff
1255 #
1256 # preemptirqsoff latency trace v1.1.5 on 3.8.0-test+
1257 # --------------------------------------------------------------------
1258 # latency: 100 us, #4/4, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1259 #    -----------------
1260 #    | task: ls-2230 (uid:0 nice:0 policy:0 rt_prio:0)
1261 #    -----------------
1262 #  => started at: ata_scsi_queuecmd
1263 #  => ended at:   ata_scsi_queuecmd
1264 #
1265 #
1266 #                  _------=> CPU#            
1267 #                 / _-----=> irqs-off        
1268 #                | / _----=> need-resched    
1269 #                || / _---=> hardirq/softirq 
1270 #                ||| / _--=> preempt-depth   
1271 #                |||| /     delay             
1272 #  cmd     pid   ||||| time  |   caller      
1273 #     \   /      |||||  \    |   /           
1274       ls-2230    3d...    0us+: _raw_spin_lock_irqsave <-ata_scsi_queuecmd
1275       ls-2230    3...1  100us : _raw_spin_unlock_irqrestore <-ata_scsi_queuecmd
1276       ls-2230    3...1  101us+: trace_preempt_on <-ata_scsi_queuecmd
1277       ls-2230    3...1  111us : <stack trace>
1278  => sub_preempt_count
1279  => _raw_spin_unlock_irqrestore
1280  => ata_scsi_queuecmd
1281  => scsi_dispatch_cmd
1282  => scsi_request_fn
1283  => __blk_run_queue_uncond
1284  => __blk_run_queue
1285  => blk_queue_bio
1286  => generic_make_request
1287  => submit_bio
1288  => submit_bh
1289  => ext3_bread
1290  => ext3_dir_bread
1291  => htree_dirblock_to_tree
1292  => ext3_htree_fill_tree
1293  => ext3_readdir
1294  => vfs_readdir
1295  => sys_getdents
1296  => system_call_fastpath
1297
1298
1299 The trace_hardirqs_off_thunk is called from assembly on x86 when
1300 interrupts are disabled in the assembly code. Without the
1301 function tracing, we do not know if interrupts were enabled
1302 within the preemption points. We do see that it started with
1303 preemption enabled.
1304
1305 Here is a trace with function-trace set:
1306
1307 # tracer: preemptirqsoff
1308 #
1309 # preemptirqsoff latency trace v1.1.5 on 3.8.0-test+
1310 # --------------------------------------------------------------------
1311 # latency: 161 us, #339/339, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1312 #    -----------------
1313 #    | task: ls-2269 (uid:0 nice:0 policy:0 rt_prio:0)
1314 #    -----------------
1315 #  => started at: schedule
1316 #  => ended at:   mutex_unlock
1317 #
1318 #
1319 #                  _------=> CPU#            
1320 #                 / _-----=> irqs-off        
1321 #                | / _----=> need-resched    
1322 #                || / _---=> hardirq/softirq 
1323 #                ||| / _--=> preempt-depth   
1324 #                |||| /     delay             
1325 #  cmd     pid   ||||| time  |   caller      
1326 #     \   /      |||||  \    |   /           
1327 kworker/-59      3...1    0us : __schedule <-schedule
1328 kworker/-59      3d..1    0us : rcu_preempt_qs <-rcu_note_context_switch
1329 kworker/-59      3d..1    1us : add_preempt_count <-_raw_spin_lock_irq
1330 kworker/-59      3d..2    1us : deactivate_task <-__schedule
1331 kworker/-59      3d..2    1us : dequeue_task <-deactivate_task
1332 kworker/-59      3d..2    2us : update_rq_clock <-dequeue_task
1333 kworker/-59      3d..2    2us : dequeue_task_fair <-dequeue_task
1334 kworker/-59      3d..2    2us : update_curr <-dequeue_task_fair
1335 kworker/-59      3d..2    2us : update_min_vruntime <-update_curr
1336 kworker/-59      3d..2    3us : cpuacct_charge <-update_curr
1337 kworker/-59      3d..2    3us : __rcu_read_lock <-cpuacct_charge
1338 kworker/-59      3d..2    3us : __rcu_read_unlock <-cpuacct_charge
1339 kworker/-59      3d..2    3us : update_cfs_rq_blocked_load <-dequeue_task_fair
1340 kworker/-59      3d..2    4us : clear_buddies <-dequeue_task_fair
1341 kworker/-59      3d..2    4us : account_entity_dequeue <-dequeue_task_fair
1342 kworker/-59      3d..2    4us : update_min_vruntime <-dequeue_task_fair
1343 kworker/-59      3d..2    4us : update_cfs_shares <-dequeue_task_fair
1344 kworker/-59      3d..2    5us : hrtick_update <-dequeue_task_fair
1345 kworker/-59      3d..2    5us : wq_worker_sleeping <-__schedule
1346 kworker/-59      3d..2    5us : kthread_data <-wq_worker_sleeping
1347 kworker/-59      3d..2    5us : put_prev_task_fair <-__schedule
1348 kworker/-59      3d..2    6us : pick_next_task_fair <-pick_next_task
1349 kworker/-59      3d..2    6us : clear_buddies <-pick_next_task_fair
1350 kworker/-59      3d..2    6us : set_next_entity <-pick_next_task_fair
1351 kworker/-59      3d..2    6us : update_stats_wait_end <-set_next_entity
1352       ls-2269    3d..2    7us : finish_task_switch <-__schedule
1353       ls-2269    3d..2    7us : _raw_spin_unlock_irq <-finish_task_switch
1354       ls-2269    3d..2    8us : do_IRQ <-ret_from_intr
1355       ls-2269    3d..2    8us : irq_enter <-do_IRQ
1356       ls-2269    3d..2    8us : rcu_irq_enter <-irq_enter
1357       ls-2269    3d..2    9us : add_preempt_count <-irq_enter
1358       ls-2269    3d.h2    9us : exit_idle <-do_IRQ
1359 [...]
1360       ls-2269    3d.h3   20us : sub_preempt_count <-_raw_spin_unlock
1361       ls-2269    3d.h2   20us : irq_exit <-do_IRQ
1362       ls-2269    3d.h2   21us : sub_preempt_count <-irq_exit
1363       ls-2269    3d..3   21us : do_softirq <-irq_exit
1364       ls-2269    3d..3   21us : __do_softirq <-call_softirq
1365       ls-2269    3d..3   21us+: __local_bh_disable <-__do_softirq
1366       ls-2269    3d.s4   29us : sub_preempt_count <-_local_bh_enable_ip
1367       ls-2269    3d.s5   29us : sub_preempt_count <-_local_bh_enable_ip
1368       ls-2269    3d.s5   31us : do_IRQ <-ret_from_intr
1369       ls-2269    3d.s5   31us : irq_enter <-do_IRQ
1370       ls-2269    3d.s5   31us : rcu_irq_enter <-irq_enter
1371 [...]
1372       ls-2269    3d.s5   31us : rcu_irq_enter <-irq_enter
1373       ls-2269    3d.s5   32us : add_preempt_count <-irq_enter
1374       ls-2269    3d.H5   32us : exit_idle <-do_IRQ
1375       ls-2269    3d.H5   32us : handle_irq <-do_IRQ
1376       ls-2269    3d.H5   32us : irq_to_desc <-handle_irq
1377       ls-2269    3d.H5   33us : handle_fasteoi_irq <-handle_irq
1378 [...]
1379       ls-2269    3d.s5  158us : _raw_spin_unlock_irqrestore <-rtl8139_poll
1380       ls-2269    3d.s3  158us : net_rps_action_and_irq_enable.isra.65 <-net_rx_action
1381       ls-2269    3d.s3  159us : __local_bh_enable <-__do_softirq
1382       ls-2269    3d.s3  159us : sub_preempt_count <-__local_bh_enable
1383       ls-2269    3d..3  159us : idle_cpu <-irq_exit
1384       ls-2269    3d..3  159us : rcu_irq_exit <-irq_exit
1385       ls-2269    3d..3  160us : sub_preempt_count <-irq_exit
1386       ls-2269    3d...  161us : __mutex_unlock_slowpath <-mutex_unlock
1387       ls-2269    3d...  162us+: trace_hardirqs_on <-mutex_unlock
1388       ls-2269    3d...  186us : <stack trace>
1389  => __mutex_unlock_slowpath
1390  => mutex_unlock
1391  => process_output
1392  => n_tty_write
1393  => tty_write
1394  => vfs_write
1395  => sys_write
1396  => system_call_fastpath
1397
1398 This is an interesting trace. It started with kworker running and
1399 scheduling out and ls taking over. But as soon as ls released the
1400 rq lock and enabled interrupts (but not preemption) an interrupt
1401 triggered. When the interrupt finished, it started running softirqs.
1402 But while the softirq was running, another interrupt triggered.
1403 When an interrupt is running inside a softirq, the annotation is 'H'.
1404
1405
1406 wakeup
1407 ------
1408
1409 One common case that people are interested in tracing is the
1410 time it takes for a task that is woken to actually wake up.
1411 Now for non Real-Time tasks, this can be arbitrary. But tracing
1412 it none the less can be interesting. 
1413
1414 Without function tracing:
1415
1416  # echo 0 > options/function-trace
1417  # echo wakeup > current_tracer
1418  # echo 1 > tracing_on
1419  # echo 0 > tracing_max_latency
1420  # chrt -f 5 sleep 1
1421  # echo 0 > tracing_on
1422  # cat trace
1423 # tracer: wakeup
1424 #
1425 # wakeup latency trace v1.1.5 on 3.8.0-test+
1426 # --------------------------------------------------------------------
1427 # latency: 15 us, #4/4, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1428 #    -----------------
1429 #    | task: kworker/3:1H-312 (uid:0 nice:-20 policy:0 rt_prio:0)
1430 #    -----------------
1431 #
1432 #                  _------=> CPU#            
1433 #                 / _-----=> irqs-off        
1434 #                | / _----=> need-resched    
1435 #                || / _---=> hardirq/softirq 
1436 #                ||| / _--=> preempt-depth   
1437 #                |||| /     delay             
1438 #  cmd     pid   ||||| time  |   caller      
1439 #     \   /      |||||  \    |   /           
1440   <idle>-0       3dNs7    0us :      0:120:R   + [003]   312:100:R kworker/3:1H
1441   <idle>-0       3dNs7    1us+: ttwu_do_activate.constprop.87 <-try_to_wake_up
1442   <idle>-0       3d..3   15us : __schedule <-schedule
1443   <idle>-0       3d..3   15us :      0:120:R ==> [003]   312:100:R kworker/3:1H
1444
1445 The tracer only traces the highest priority task in the system
1446 to avoid tracing the normal circumstances. Here we see that
1447 the kworker with a nice priority of -20 (not very nice), took
1448 just 15 microseconds from the time it woke up, to the time it
1449 ran.
1450
1451 Non Real-Time tasks are not that interesting. A more interesting
1452 trace is to concentrate only on Real-Time tasks.
1453
1454 wakeup_rt
1455 ---------
1456
1457 In a Real-Time environment it is very important to know the
1458 wakeup time it takes for the highest priority task that is woken
1459 up to the time that it executes. This is also known as "schedule
1460 latency". I stress the point that this is about RT tasks. It is
1461 also important to know the scheduling latency of non-RT tasks,
1462 but the average schedule latency is better for non-RT tasks.
1463 Tools like LatencyTop are more appropriate for such
1464 measurements.
1465
1466 Real-Time environments are interested in the worst case latency.
1467 That is the longest latency it takes for something to happen,
1468 and not the average. We can have a very fast scheduler that may
1469 only have a large latency once in a while, but that would not
1470 work well with Real-Time tasks.  The wakeup_rt tracer was designed
1471 to record the worst case wakeups of RT tasks. Non-RT tasks are
1472 not recorded because the tracer only records one worst case and
1473 tracing non-RT tasks that are unpredictable will overwrite the
1474 worst case latency of RT tasks (just run the normal wakeup
1475 tracer for a while to see that effect).
1476
1477 Since this tracer only deals with RT tasks, we will run this
1478 slightly differently than we did with the previous tracers.
1479 Instead of performing an 'ls', we will run 'sleep 1' under
1480 'chrt' which changes the priority of the task.
1481
1482  # echo 0 > options/function-trace
1483  # echo wakeup_rt > current_tracer
1484  # echo 1 > tracing_on
1485  # echo 0 > tracing_max_latency
1486  # chrt -f 5 sleep 1
1487  # echo 0 > tracing_on
1488  # cat trace
1489 # tracer: wakeup
1490 #
1491 # tracer: wakeup_rt
1492 #
1493 # wakeup_rt latency trace v1.1.5 on 3.8.0-test+
1494 # --------------------------------------------------------------------
1495 # latency: 5 us, #4/4, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1496 #    -----------------
1497 #    | task: sleep-2389 (uid:0 nice:0 policy:1 rt_prio:5)
1498 #    -----------------
1499 #
1500 #                  _------=> CPU#            
1501 #                 / _-----=> irqs-off        
1502 #                | / _----=> need-resched    
1503 #                || / _---=> hardirq/softirq 
1504 #                ||| / _--=> preempt-depth   
1505 #                |||| /     delay             
1506 #  cmd     pid   ||||| time  |   caller      
1507 #     \   /      |||||  \    |   /           
1508   <idle>-0       3d.h4    0us :      0:120:R   + [003]  2389: 94:R sleep
1509   <idle>-0       3d.h4    1us+: ttwu_do_activate.constprop.87 <-try_to_wake_up
1510   <idle>-0       3d..3    5us : __schedule <-schedule
1511   <idle>-0       3d..3    5us :      0:120:R ==> [003]  2389: 94:R sleep
1512
1513
1514 Running this on an idle system, we see that it only took 5 microseconds
1515 to perform the task switch.  Note, since the trace point in the schedule
1516 is before the actual "switch", we stop the tracing when the recorded task
1517 is about to schedule in. This may change if we add a new marker at the
1518 end of the scheduler.
1519
1520 Notice that the recorded task is 'sleep' with the PID of 2389
1521 and it has an rt_prio of 5. This priority is user-space priority
1522 and not the internal kernel priority. The policy is 1 for
1523 SCHED_FIFO and 2 for SCHED_RR.
1524
1525 Note, that the trace data shows the internal priority (99 - rtprio).
1526
1527   <idle>-0       3d..3    5us :      0:120:R ==> [003]  2389: 94:R sleep
1528
1529 The 0:120:R means idle was running with a nice priority of 0 (120 - 20)
1530 and in the running state 'R'. The sleep task was scheduled in with
1531 2389: 94:R. That is the priority is the kernel rtprio (99 - 5 = 94)
1532 and it too is in the running state.
1533
1534 Doing the same with chrt -r 5 and function-trace set.
1535
1536   echo 1 > options/function-trace
1537
1538 # tracer: wakeup_rt
1539 #
1540 # wakeup_rt latency trace v1.1.5 on 3.8.0-test+
1541 # --------------------------------------------------------------------
1542 # latency: 29 us, #85/85, CPU#3 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1543 #    -----------------
1544 #    | task: sleep-2448 (uid:0 nice:0 policy:1 rt_prio:5)
1545 #    -----------------
1546 #
1547 #                  _------=> CPU#            
1548 #                 / _-----=> irqs-off        
1549 #                | / _----=> need-resched    
1550 #                || / _---=> hardirq/softirq 
1551 #                ||| / _--=> preempt-depth   
1552 #                |||| /     delay             
1553 #  cmd     pid   ||||| time  |   caller      
1554 #     \   /      |||||  \    |   /           
1555   <idle>-0       3d.h4    1us+:      0:120:R   + [003]  2448: 94:R sleep
1556   <idle>-0       3d.h4    2us : ttwu_do_activate.constprop.87 <-try_to_wake_up
1557   <idle>-0       3d.h3    3us : check_preempt_curr <-ttwu_do_wakeup
1558   <idle>-0       3d.h3    3us : resched_curr <-check_preempt_curr
1559   <idle>-0       3dNh3    4us : task_woken_rt <-ttwu_do_wakeup
1560   <idle>-0       3dNh3    4us : _raw_spin_unlock <-try_to_wake_up
1561   <idle>-0       3dNh3    4us : sub_preempt_count <-_raw_spin_unlock
1562   <idle>-0       3dNh2    5us : ttwu_stat <-try_to_wake_up
1563   <idle>-0       3dNh2    5us : _raw_spin_unlock_irqrestore <-try_to_wake_up
1564   <idle>-0       3dNh2    6us : sub_preempt_count <-_raw_spin_unlock_irqrestore
1565   <idle>-0       3dNh1    6us : _raw_spin_lock <-__run_hrtimer
1566   <idle>-0       3dNh1    6us : add_preempt_count <-_raw_spin_lock
1567   <idle>-0       3dNh2    7us : _raw_spin_unlock <-hrtimer_interrupt
1568   <idle>-0       3dNh2    7us : sub_preempt_count <-_raw_spin_unlock
1569   <idle>-0       3dNh1    7us : tick_program_event <-hrtimer_interrupt
1570   <idle>-0       3dNh1    7us : clockevents_program_event <-tick_program_event
1571   <idle>-0       3dNh1    8us : ktime_get <-clockevents_program_event
1572   <idle>-0       3dNh1    8us : lapic_next_event <-clockevents_program_event
1573   <idle>-0       3dNh1    8us : irq_exit <-smp_apic_timer_interrupt
1574   <idle>-0       3dNh1    9us : sub_preempt_count <-irq_exit
1575   <idle>-0       3dN.2    9us : idle_cpu <-irq_exit
1576   <idle>-0       3dN.2    9us : rcu_irq_exit <-irq_exit
1577   <idle>-0       3dN.2   10us : rcu_eqs_enter_common.isra.45 <-rcu_irq_exit
1578   <idle>-0       3dN.2   10us : sub_preempt_count <-irq_exit
1579   <idle>-0       3.N.1   11us : rcu_idle_exit <-cpu_idle
1580   <idle>-0       3dN.1   11us : rcu_eqs_exit_common.isra.43 <-rcu_idle_exit
1581   <idle>-0       3.N.1   11us : tick_nohz_idle_exit <-cpu_idle
1582   <idle>-0       3dN.1   12us : menu_hrtimer_cancel <-tick_nohz_idle_exit
1583   <idle>-0       3dN.1   12us : ktime_get <-tick_nohz_idle_exit
1584   <idle>-0       3dN.1   12us : tick_do_update_jiffies64 <-tick_nohz_idle_exit
1585   <idle>-0       3dN.1   13us : update_cpu_load_nohz <-tick_nohz_idle_exit
1586   <idle>-0       3dN.1   13us : _raw_spin_lock <-update_cpu_load_nohz
1587   <idle>-0       3dN.1   13us : add_preempt_count <-_raw_spin_lock
1588   <idle>-0       3dN.2   13us : __update_cpu_load <-update_cpu_load_nohz
1589   <idle>-0       3dN.2   14us : sched_avg_update <-__update_cpu_load
1590   <idle>-0       3dN.2   14us : _raw_spin_unlock <-update_cpu_load_nohz
1591   <idle>-0       3dN.2   14us : sub_preempt_count <-_raw_spin_unlock
1592   <idle>-0       3dN.1   15us : calc_load_exit_idle <-tick_nohz_idle_exit
1593   <idle>-0       3dN.1   15us : touch_softlockup_watchdog <-tick_nohz_idle_exit
1594   <idle>-0       3dN.1   15us : hrtimer_cancel <-tick_nohz_idle_exit
1595   <idle>-0       3dN.1   15us : hrtimer_try_to_cancel <-hrtimer_cancel
1596   <idle>-0       3dN.1   16us : lock_hrtimer_base.isra.18 <-hrtimer_try_to_cancel
1597   <idle>-0       3dN.1   16us : _raw_spin_lock_irqsave <-lock_hrtimer_base.isra.18
1598   <idle>-0       3dN.1   16us : add_preempt_count <-_raw_spin_lock_irqsave
1599   <idle>-0       3dN.2   17us : __remove_hrtimer <-remove_hrtimer.part.16
1600   <idle>-0       3dN.2   17us : hrtimer_force_reprogram <-__remove_hrtimer
1601   <idle>-0       3dN.2   17us : tick_program_event <-hrtimer_force_reprogram
1602   <idle>-0       3dN.2   18us : clockevents_program_event <-tick_program_event
1603   <idle>-0       3dN.2   18us : ktime_get <-clockevents_program_event
1604   <idle>-0       3dN.2   18us : lapic_next_event <-clockevents_program_event
1605   <idle>-0       3dN.2   19us : _raw_spin_unlock_irqrestore <-hrtimer_try_to_cancel
1606   <idle>-0       3dN.2   19us : sub_preempt_count <-_raw_spin_unlock_irqrestore
1607   <idle>-0       3dN.1   19us : hrtimer_forward <-tick_nohz_idle_exit
1608   <idle>-0       3dN.1   20us : ktime_add_safe <-hrtimer_forward
1609   <idle>-0       3dN.1   20us : ktime_add_safe <-hrtimer_forward
1610   <idle>-0       3dN.1   20us : hrtimer_start_range_ns <-hrtimer_start_expires.constprop.11
1611   <idle>-0       3dN.1   20us : __hrtimer_start_range_ns <-hrtimer_start_range_ns
1612   <idle>-0       3dN.1   21us : lock_hrtimer_base.isra.18 <-__hrtimer_start_range_ns
1613   <idle>-0       3dN.1   21us : _raw_spin_lock_irqsave <-lock_hrtimer_base.isra.18
1614   <idle>-0       3dN.1   21us : add_preempt_count <-_raw_spin_lock_irqsave
1615   <idle>-0       3dN.2   22us : ktime_add_safe <-__hrtimer_start_range_ns
1616   <idle>-0       3dN.2   22us : enqueue_hrtimer <-__hrtimer_start_range_ns
1617   <idle>-0       3dN.2   22us : tick_program_event <-__hrtimer_start_range_ns
1618   <idle>-0       3dN.2   23us : clockevents_program_event <-tick_program_event
1619   <idle>-0       3dN.2   23us : ktime_get <-clockevents_program_event
1620   <idle>-0       3dN.2   23us : lapic_next_event <-clockevents_program_event
1621   <idle>-0       3dN.2   24us : _raw_spin_unlock_irqrestore <-__hrtimer_start_range_ns
1622   <idle>-0       3dN.2   24us : sub_preempt_count <-_raw_spin_unlock_irqrestore
1623   <idle>-0       3dN.1   24us : account_idle_ticks <-tick_nohz_idle_exit
1624   <idle>-0       3dN.1   24us : account_idle_time <-account_idle_ticks
1625   <idle>-0       3.N.1   25us : sub_preempt_count <-cpu_idle
1626   <idle>-0       3.N..   25us : schedule <-cpu_idle
1627   <idle>-0       3.N..   25us : __schedule <-preempt_schedule
1628   <idle>-0       3.N..   26us : add_preempt_count <-__schedule
1629   <idle>-0       3.N.1   26us : rcu_note_context_switch <-__schedule
1630   <idle>-0       3.N.1   26us : rcu_sched_qs <-rcu_note_context_switch
1631   <idle>-0       3dN.1   27us : rcu_preempt_qs <-rcu_note_context_switch
1632   <idle>-0       3.N.1   27us : _raw_spin_lock_irq <-__schedule
1633   <idle>-0       3dN.1   27us : add_preempt_count <-_raw_spin_lock_irq
1634   <idle>-0       3dN.2   28us : put_prev_task_idle <-__schedule
1635   <idle>-0       3dN.2   28us : pick_next_task_stop <-pick_next_task
1636   <idle>-0       3dN.2   28us : pick_next_task_rt <-pick_next_task
1637   <idle>-0       3dN.2   29us : dequeue_pushable_task <-pick_next_task_rt
1638   <idle>-0       3d..3   29us : __schedule <-preempt_schedule
1639   <idle>-0       3d..3   30us :      0:120:R ==> [003]  2448: 94:R sleep
1640
1641 This isn't that big of a trace, even with function tracing enabled,
1642 so I included the entire trace.
1643
1644 The interrupt went off while when the system was idle. Somewhere
1645 before task_woken_rt() was called, the NEED_RESCHED flag was set,
1646 this is indicated by the first occurrence of the 'N' flag.
1647
1648 Latency tracing and events
1649 --------------------------
1650 As function tracing can induce a much larger latency, but without
1651 seeing what happens within the latency it is hard to know what
1652 caused it. There is a middle ground, and that is with enabling
1653 events.
1654
1655  # echo 0 > options/function-trace
1656  # echo wakeup_rt > current_tracer
1657  # echo 1 > events/enable
1658  # echo 1 > tracing_on
1659  # echo 0 > tracing_max_latency
1660  # chrt -f 5 sleep 1
1661  # echo 0 > tracing_on
1662  # cat trace
1663 # tracer: wakeup_rt
1664 #
1665 # wakeup_rt latency trace v1.1.5 on 3.8.0-test+
1666 # --------------------------------------------------------------------
1667 # latency: 6 us, #12/12, CPU#2 | (M:preempt VP:0, KP:0, SP:0 HP:0 #P:4)
1668 #    -----------------
1669 #    | task: sleep-5882 (uid:0 nice:0 policy:1 rt_prio:5)
1670 #    -----------------
1671 #
1672 #                  _------=> CPU#            
1673 #                 / _-----=> irqs-off        
1674 #                | / _----=> need-resched    
1675 #                || / _---=> hardirq/softirq 
1676 #                ||| / _--=> preempt-depth   
1677 #                |||| /     delay             
1678 #  cmd     pid   ||||| time  |   caller      
1679 #     \   /      |||||  \    |   /           
1680   <idle>-0       2d.h4    0us :      0:120:R   + [002]  5882: 94:R sleep
1681   <idle>-0       2d.h4    0us : ttwu_do_activate.constprop.87 <-try_to_wake_up
1682   <idle>-0       2d.h4    1us : sched_wakeup: comm=sleep pid=5882 prio=94 success=1 target_cpu=002
1683   <idle>-0       2dNh2    1us : hrtimer_expire_exit: hrtimer=ffff88007796feb8
1684   <idle>-0       2.N.2    2us : power_end: cpu_id=2
1685   <idle>-0       2.N.2    3us : cpu_idle: state=4294967295 cpu_id=2
1686   <idle>-0       2dN.3    4us : hrtimer_cancel: hrtimer=ffff88007d50d5e0
1687   <idle>-0       2dN.3    4us : hrtimer_start: hrtimer=ffff88007d50d5e0 function=tick_sched_timer expires=34311211000000 softexpires=34311211000000
1688   <idle>-0       2.N.2    5us : rcu_utilization: Start context switch
1689   <idle>-0       2.N.2    5us : rcu_utilization: End context switch
1690   <idle>-0       2d..3    6us : __schedule <-schedule
1691   <idle>-0       2d..3    6us :      0:120:R ==> [002]  5882: 94:R sleep
1692
1693
1694 function
1695 --------
1696
1697 This tracer is the function tracer. Enabling the function tracer
1698 can be done from the debug file system. Make sure the
1699 ftrace_enabled is set; otherwise this tracer is a nop.
1700 See the "ftrace_enabled" section below.
1701
1702  # sysctl kernel.ftrace_enabled=1
1703  # echo function > current_tracer
1704  # echo 1 > tracing_on
1705  # usleep 1
1706  # echo 0 > tracing_on
1707  # cat trace
1708 # tracer: function
1709 #
1710 # entries-in-buffer/entries-written: 24799/24799   #P:4
1711 #
1712 #                              _-----=> irqs-off
1713 #                             / _----=> need-resched
1714 #                            | / _---=> hardirq/softirq
1715 #                            || / _--=> preempt-depth
1716 #                            ||| /     delay
1717 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
1718 #              | |       |   ||||       |         |
1719             bash-1994  [002] ....  3082.063030: mutex_unlock <-rb_simple_write
1720             bash-1994  [002] ....  3082.063031: __mutex_unlock_slowpath <-mutex_unlock
1721             bash-1994  [002] ....  3082.063031: __fsnotify_parent <-fsnotify_modify
1722             bash-1994  [002] ....  3082.063032: fsnotify <-fsnotify_modify
1723             bash-1994  [002] ....  3082.063032: __srcu_read_lock <-fsnotify
1724             bash-1994  [002] ....  3082.063032: add_preempt_count <-__srcu_read_lock
1725             bash-1994  [002] ...1  3082.063032: sub_preempt_count <-__srcu_read_lock
1726             bash-1994  [002] ....  3082.063033: __srcu_read_unlock <-fsnotify
1727 [...]
1728
1729
1730 Note: function tracer uses ring buffers to store the above
1731 entries. The newest data may overwrite the oldest data.
1732 Sometimes using echo to stop the trace is not sufficient because
1733 the tracing could have overwritten the data that you wanted to
1734 record. For this reason, it is sometimes better to disable
1735 tracing directly from a program. This allows you to stop the
1736 tracing at the point that you hit the part that you are
1737 interested in. To disable the tracing directly from a C program,
1738 something like following code snippet can be used:
1739
1740 int trace_fd;
1741 [...]
1742 int main(int argc, char *argv[]) {
1743         [...]
1744         trace_fd = open(tracing_file("tracing_on"), O_WRONLY);
1745         [...]
1746         if (condition_hit()) {
1747                 write(trace_fd, "0", 1);
1748         }
1749         [...]
1750 }
1751
1752
1753 Single thread tracing
1754 ---------------------
1755
1756 By writing into set_ftrace_pid you can trace a
1757 single thread. For example:
1758
1759 # cat set_ftrace_pid
1760 no pid
1761 # echo 3111 > set_ftrace_pid
1762 # cat set_ftrace_pid
1763 3111
1764 # echo function > current_tracer
1765 # cat trace | head
1766  # tracer: function
1767  #
1768  #           TASK-PID    CPU#    TIMESTAMP  FUNCTION
1769  #              | |       |          |         |
1770      yum-updatesd-3111  [003]  1637.254676: finish_task_switch <-thread_return
1771      yum-updatesd-3111  [003]  1637.254681: hrtimer_cancel <-schedule_hrtimeout_range
1772      yum-updatesd-3111  [003]  1637.254682: hrtimer_try_to_cancel <-hrtimer_cancel
1773      yum-updatesd-3111  [003]  1637.254683: lock_hrtimer_base <-hrtimer_try_to_cancel
1774      yum-updatesd-3111  [003]  1637.254685: fget_light <-do_sys_poll
1775      yum-updatesd-3111  [003]  1637.254686: pipe_poll <-do_sys_poll
1776 # echo > set_ftrace_pid
1777 # cat trace |head
1778  # tracer: function
1779  #
1780  #           TASK-PID    CPU#    TIMESTAMP  FUNCTION
1781  #              | |       |          |         |
1782  ##### CPU 3 buffer started ####
1783      yum-updatesd-3111  [003]  1701.957688: free_poll_entry <-poll_freewait
1784      yum-updatesd-3111  [003]  1701.957689: remove_wait_queue <-free_poll_entry
1785      yum-updatesd-3111  [003]  1701.957691: fput <-free_poll_entry
1786      yum-updatesd-3111  [003]  1701.957692: audit_syscall_exit <-sysret_audit
1787      yum-updatesd-3111  [003]  1701.957693: path_put <-audit_syscall_exit
1788
1789 If you want to trace a function when executing, you could use
1790 something like this simple program:
1791
1792 #include <stdio.h>
1793 #include <stdlib.h>
1794 #include <sys/types.h>
1795 #include <sys/stat.h>
1796 #include <fcntl.h>
1797 #include <unistd.h>
1798 #include <string.h>
1799
1800 #define _STR(x) #x
1801 #define STR(x) _STR(x)
1802 #define MAX_PATH 256
1803
1804 const char *find_debugfs(void)
1805 {
1806        static char debugfs[MAX_PATH+1];
1807        static int debugfs_found;
1808        char type[100];
1809        FILE *fp;
1810
1811        if (debugfs_found)
1812                return debugfs;
1813
1814        if ((fp = fopen("/proc/mounts","r")) == NULL) {
1815                perror("/proc/mounts");
1816                return NULL;
1817        }
1818
1819        while (fscanf(fp, "%*s %"
1820                      STR(MAX_PATH)
1821                      "s %99s %*s %*d %*d\n",
1822                      debugfs, type) == 2) {
1823                if (strcmp(type, "debugfs") == 0)
1824                        break;
1825        }
1826        fclose(fp);
1827
1828        if (strcmp(type, "debugfs") != 0) {
1829                fprintf(stderr, "debugfs not mounted");
1830                return NULL;
1831        }
1832
1833        strcat(debugfs, "/tracing/");
1834        debugfs_found = 1;
1835
1836        return debugfs;
1837 }
1838
1839 const char *tracing_file(const char *file_name)
1840 {
1841        static char trace_file[MAX_PATH+1];
1842        snprintf(trace_file, MAX_PATH, "%s/%s", find_debugfs(), file_name);
1843        return trace_file;
1844 }
1845
1846 int main (int argc, char **argv)
1847 {
1848         if (argc < 1)
1849                 exit(-1);
1850
1851         if (fork() > 0) {
1852                 int fd, ffd;
1853                 char line[64];
1854                 int s;
1855
1856                 ffd = open(tracing_file("current_tracer"), O_WRONLY);
1857                 if (ffd < 0)
1858                         exit(-1);
1859                 write(ffd, "nop", 3);
1860
1861                 fd = open(tracing_file("set_ftrace_pid"), O_WRONLY);
1862                 s = sprintf(line, "%d\n", getpid());
1863                 write(fd, line, s);
1864
1865                 write(ffd, "function", 8);
1866
1867                 close(fd);
1868                 close(ffd);
1869
1870                 execvp(argv[1], argv+1);
1871         }
1872
1873         return 0;
1874 }
1875
1876 Or this simple script!
1877
1878 ------
1879 #!/bin/bash
1880
1881 debugfs=`sed -ne 's/^debugfs \(.*\) debugfs.*/\1/p' /proc/mounts`
1882 echo nop > $debugfs/tracing/current_tracer
1883 echo 0 > $debugfs/tracing/tracing_on
1884 echo $$ > $debugfs/tracing/set_ftrace_pid
1885 echo function > $debugfs/tracing/current_tracer
1886 echo 1 > $debugfs/tracing/tracing_on
1887 exec "$@"
1888 ------
1889
1890
1891 function graph tracer
1892 ---------------------------
1893
1894 This tracer is similar to the function tracer except that it
1895 probes a function on its entry and its exit. This is done by
1896 using a dynamically allocated stack of return addresses in each
1897 task_struct. On function entry the tracer overwrites the return
1898 address of each function traced to set a custom probe. Thus the
1899 original return address is stored on the stack of return address
1900 in the task_struct.
1901
1902 Probing on both ends of a function leads to special features
1903 such as:
1904
1905 - measure of a function's time execution
1906 - having a reliable call stack to draw function calls graph
1907
1908 This tracer is useful in several situations:
1909
1910 - you want to find the reason of a strange kernel behavior and
1911   need to see what happens in detail on any areas (or specific
1912   ones).
1913
1914 - you are experiencing weird latencies but it's difficult to
1915   find its origin.
1916
1917 - you want to find quickly which path is taken by a specific
1918   function
1919
1920 - you just want to peek inside a working kernel and want to see
1921   what happens there.
1922
1923 # tracer: function_graph
1924 #
1925 # CPU  DURATION                  FUNCTION CALLS
1926 # |     |   |                     |   |   |   |
1927
1928  0)               |  sys_open() {
1929  0)               |    do_sys_open() {
1930  0)               |      getname() {
1931  0)               |        kmem_cache_alloc() {
1932  0)   1.382 us    |          __might_sleep();
1933  0)   2.478 us    |        }
1934  0)               |        strncpy_from_user() {
1935  0)               |          might_fault() {
1936  0)   1.389 us    |            __might_sleep();
1937  0)   2.553 us    |          }
1938  0)   3.807 us    |        }
1939  0)   7.876 us    |      }
1940  0)               |      alloc_fd() {
1941  0)   0.668 us    |        _spin_lock();
1942  0)   0.570 us    |        expand_files();
1943  0)   0.586 us    |        _spin_unlock();
1944
1945
1946 There are several columns that can be dynamically
1947 enabled/disabled. You can use every combination of options you
1948 want, depending on your needs.
1949
1950 - The cpu number on which the function executed is default
1951   enabled.  It is sometimes better to only trace one cpu (see
1952   tracing_cpu_mask file) or you might sometimes see unordered
1953   function calls while cpu tracing switch.
1954
1955         hide: echo nofuncgraph-cpu > trace_options
1956         show: echo funcgraph-cpu > trace_options
1957
1958 - The duration (function's time of execution) is displayed on
1959   the closing bracket line of a function or on the same line
1960   than the current function in case of a leaf one. It is default
1961   enabled.
1962
1963         hide: echo nofuncgraph-duration > trace_options
1964         show: echo funcgraph-duration > trace_options
1965
1966 - The overhead field precedes the duration field in case of
1967   reached duration thresholds.
1968
1969         hide: echo nofuncgraph-overhead > trace_options
1970         show: echo funcgraph-overhead > trace_options
1971         depends on: funcgraph-duration
1972
1973   ie:
1974
1975   3) # 1837.709 us |          } /* __switch_to */
1976   3)               |          finish_task_switch() {
1977   3)   0.313 us    |            _raw_spin_unlock_irq();
1978   3)   3.177 us    |          }
1979   3) # 1889.063 us |        } /* __schedule */
1980   3) ! 140.417 us  |      } /* __schedule */
1981   3) # 2034.948 us |    } /* schedule */
1982   3) * 33998.59 us |  } /* schedule_preempt_disabled */
1983
1984   [...]
1985
1986   1)   0.260 us    |              msecs_to_jiffies();
1987   1)   0.313 us    |              __rcu_read_unlock();
1988   1) + 61.770 us   |            }
1989   1) + 64.479 us   |          }
1990   1)   0.313 us    |          rcu_bh_qs();
1991   1)   0.313 us    |          __local_bh_enable();
1992   1) ! 217.240 us  |        }
1993   1)   0.365 us    |        idle_cpu();
1994   1)               |        rcu_irq_exit() {
1995   1)   0.417 us    |          rcu_eqs_enter_common.isra.47();
1996   1)   3.125 us    |        }
1997   1) ! 227.812 us  |      }
1998   1) ! 457.395 us  |    }
1999   1) @ 119760.2 us |  }
2000
2001   [...]
2002
2003   2)               |    handle_IPI() {
2004   1)   6.979 us    |                  }
2005   2)   0.417 us    |      scheduler_ipi();
2006   1)   9.791 us    |                }
2007   1) + 12.917 us   |              }
2008   2)   3.490 us    |    }
2009   1) + 15.729 us   |            }
2010   1) + 18.542 us   |          }
2011   2) $ 3594274 us  |  }
2012
2013   + means that the function exceeded 10 usecs.
2014   ! means that the function exceeded 100 usecs.
2015   # means that the function exceeded 1000 usecs.
2016   * means that the function exceeded 10 msecs.
2017   @ means that the function exceeded 100 msecs.
2018   $ means that the function exceeded 1 sec.
2019
2020
2021 - The task/pid field displays the thread cmdline and pid which
2022   executed the function. It is default disabled.
2023
2024         hide: echo nofuncgraph-proc > trace_options
2025         show: echo funcgraph-proc > trace_options
2026
2027   ie:
2028
2029   # tracer: function_graph
2030   #
2031   # CPU  TASK/PID        DURATION                  FUNCTION CALLS
2032   # |    |    |           |   |                     |   |   |   |
2033   0)    sh-4802     |               |                  d_free() {
2034   0)    sh-4802     |               |                    call_rcu() {
2035   0)    sh-4802     |               |                      __call_rcu() {
2036   0)    sh-4802     |   0.616 us    |                        rcu_process_gp_end();
2037   0)    sh-4802     |   0.586 us    |                        check_for_new_grace_period();
2038   0)    sh-4802     |   2.899 us    |                      }
2039   0)    sh-4802     |   4.040 us    |                    }
2040   0)    sh-4802     |   5.151 us    |                  }
2041   0)    sh-4802     | + 49.370 us   |                }
2042
2043
2044 - The absolute time field is an absolute timestamp given by the
2045   system clock since it started. A snapshot of this time is
2046   given on each entry/exit of functions
2047
2048         hide: echo nofuncgraph-abstime > trace_options
2049         show: echo funcgraph-abstime > trace_options
2050
2051   ie:
2052
2053   #
2054   #      TIME       CPU  DURATION                  FUNCTION CALLS
2055   #       |         |     |   |                     |   |   |   |
2056   360.774522 |   1)   0.541 us    |                                          }
2057   360.774522 |   1)   4.663 us    |                                        }
2058   360.774523 |   1)   0.541 us    |                                        __wake_up_bit();
2059   360.774524 |   1)   6.796 us    |                                      }
2060   360.774524 |   1)   7.952 us    |                                    }
2061   360.774525 |   1)   9.063 us    |                                  }
2062   360.774525 |   1)   0.615 us    |                                  journal_mark_dirty();
2063   360.774527 |   1)   0.578 us    |                                  __brelse();
2064   360.774528 |   1)               |                                  reiserfs_prepare_for_journal() {
2065   360.774528 |   1)               |                                    unlock_buffer() {
2066   360.774529 |   1)               |                                      wake_up_bit() {
2067   360.774529 |   1)               |                                        bit_waitqueue() {
2068   360.774530 |   1)   0.594 us    |                                          __phys_addr();
2069
2070
2071 The function name is always displayed after the closing bracket
2072 for a function if the start of that function is not in the
2073 trace buffer.
2074
2075 Display of the function name after the closing bracket may be
2076 enabled for functions whose start is in the trace buffer,
2077 allowing easier searching with grep for function durations.
2078 It is default disabled.
2079
2080         hide: echo nofuncgraph-tail > trace_options
2081         show: echo funcgraph-tail > trace_options
2082
2083   Example with nofuncgraph-tail (default):
2084   0)               |      putname() {
2085   0)               |        kmem_cache_free() {
2086   0)   0.518 us    |          __phys_addr();
2087   0)   1.757 us    |        }
2088   0)   2.861 us    |      }
2089
2090   Example with funcgraph-tail:
2091   0)               |      putname() {
2092   0)               |        kmem_cache_free() {
2093   0)   0.518 us    |          __phys_addr();
2094   0)   1.757 us    |        } /* kmem_cache_free() */
2095   0)   2.861 us    |      } /* putname() */
2096
2097 You can put some comments on specific functions by using
2098 trace_printk() For example, if you want to put a comment inside
2099 the __might_sleep() function, you just have to include
2100 <linux/ftrace.h> and call trace_printk() inside __might_sleep()
2101
2102 trace_printk("I'm a comment!\n")
2103
2104 will produce:
2105
2106  1)               |             __might_sleep() {
2107  1)               |                /* I'm a comment! */
2108  1)   1.449 us    |             }
2109
2110
2111 You can disable the hierarchical function call formatting and instead print a
2112 flat list of function entry and return events.  This uses the format described
2113 in the Output Formatting section and respects all the trace options that
2114 control that formatting.  Hierarchical formatting is the default.
2115
2116         hierachical: echo nofuncgraph-flat > trace_options
2117         flat: echo funcgraph-flat > trace_options
2118
2119   ie:
2120
2121   # tracer: function_graph
2122   #
2123   # entries-in-buffer/entries-written: 68355/68355   #P:2
2124   #
2125   #                              _-----=> irqs-off
2126   #                             / _----=> need-resched
2127   #                            | / _---=> hardirq/softirq
2128   #                            || / _--=> preempt-depth
2129   #                            ||| /     delay
2130   #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2131   #              | |       |   ||||       |         |
2132                 sh-1806  [001] d...   198.843443: graph_ent: func=_raw_spin_lock
2133                 sh-1806  [001] d...   198.843445: graph_ent: func=__raw_spin_lock
2134                 sh-1806  [001] d..1   198.843447: graph_ret: func=__raw_spin_lock
2135                 sh-1806  [001] d..1   198.843449: graph_ret: func=_raw_spin_lock
2136                 sh-1806  [001] d..1   198.843451: graph_ent: func=_raw_spin_unlock_irqrestore
2137                 sh-1806  [001] d...   198.843453: graph_ret: func=_raw_spin_unlock_irqrestore
2138
2139
2140 You might find other useful features for this tracer in the
2141 following "dynamic ftrace" section such as tracing only specific
2142 functions or tasks.
2143
2144 dynamic ftrace
2145 --------------
2146
2147 If CONFIG_DYNAMIC_FTRACE is set, the system will run with
2148 virtually no overhead when function tracing is disabled. The way
2149 this works is the mcount function call (placed at the start of
2150 every kernel function, produced by the -pg switch in gcc),
2151 starts of pointing to a simple return. (Enabling FTRACE will
2152 include the -pg switch in the compiling of the kernel.)
2153
2154 At compile time every C file object is run through the
2155 recordmcount program (located in the scripts directory). This
2156 program will parse the ELF headers in the C object to find all
2157 the locations in the .text section that call mcount. (Note, only
2158 white listed .text sections are processed, since processing other
2159 sections like .init.text may cause races due to those sections
2160 being freed unexpectedly).
2161
2162 A new section called "__mcount_loc" is created that holds
2163 references to all the mcount call sites in the .text section.
2164 The recordmcount program re-links this section back into the
2165 original object. The final linking stage of the kernel will add all these
2166 references into a single table.
2167
2168 On boot up, before SMP is initialized, the dynamic ftrace code
2169 scans this table and updates all the locations into nops. It
2170 also records the locations, which are added to the
2171 available_filter_functions list.  Modules are processed as they
2172 are loaded and before they are executed.  When a module is
2173 unloaded, it also removes its functions from the ftrace function
2174 list. This is automatic in the module unload code, and the
2175 module author does not need to worry about it.
2176
2177 When tracing is enabled, the process of modifying the function
2178 tracepoints is dependent on architecture. The old method is to use
2179 kstop_machine to prevent races with the CPUs executing code being
2180 modified (which can cause the CPU to do undesirable things, especially
2181 if the modified code crosses cache (or page) boundaries), and the nops are
2182 patched back to calls. But this time, they do not call mcount
2183 (which is just a function stub). They now call into the ftrace
2184 infrastructure.
2185
2186 The new method of modifying the function tracepoints is to place
2187 a breakpoint at the location to be modified, sync all CPUs, modify
2188 the rest of the instruction not covered by the breakpoint. Sync
2189 all CPUs again, and then remove the breakpoint with the finished
2190 version to the ftrace call site.
2191
2192 Some archs do not even need to monkey around with the synchronization,
2193 and can just slap the new code on top of the old without any
2194 problems with other CPUs executing it at the same time.
2195
2196 One special side-effect to the recording of the functions being
2197 traced is that we can now selectively choose which functions we
2198 wish to trace and which ones we want the mcount calls to remain
2199 as nops.
2200
2201 Two files are used, one for enabling and one for disabling the
2202 tracing of specified functions. They are:
2203
2204   set_ftrace_filter
2205
2206 and
2207
2208   set_ftrace_notrace
2209
2210 A list of available functions that you can add to these files is
2211 listed in:
2212
2213    available_filter_functions
2214
2215  # cat available_filter_functions
2216 put_prev_task_idle
2217 kmem_cache_create
2218 pick_next_task_rt
2219 get_online_cpus
2220 pick_next_task_fair
2221 mutex_lock
2222 [...]
2223
2224 If I am only interested in sys_nanosleep and hrtimer_interrupt:
2225
2226  # echo sys_nanosleep hrtimer_interrupt > set_ftrace_filter
2227  # echo function > current_tracer
2228  # echo 1 > tracing_on
2229  # usleep 1
2230  # echo 0 > tracing_on
2231  # cat trace
2232 # tracer: function
2233 #
2234 # entries-in-buffer/entries-written: 5/5   #P:4
2235 #
2236 #                              _-----=> irqs-off
2237 #                             / _----=> need-resched
2238 #                            | / _---=> hardirq/softirq
2239 #                            || / _--=> preempt-depth
2240 #                            ||| /     delay
2241 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2242 #              | |       |   ||||       |         |
2243           usleep-2665  [001] ....  4186.475355: sys_nanosleep <-system_call_fastpath
2244           <idle>-0     [001] d.h1  4186.475409: hrtimer_interrupt <-smp_apic_timer_interrupt
2245           usleep-2665  [001] d.h1  4186.475426: hrtimer_interrupt <-smp_apic_timer_interrupt
2246           <idle>-0     [003] d.h1  4186.475426: hrtimer_interrupt <-smp_apic_timer_interrupt
2247           <idle>-0     [002] d.h1  4186.475427: hrtimer_interrupt <-smp_apic_timer_interrupt
2248
2249 To see which functions are being traced, you can cat the file:
2250
2251  # cat set_ftrace_filter
2252 hrtimer_interrupt
2253 sys_nanosleep
2254
2255
2256 Perhaps this is not enough. The filters also allow simple wild
2257 cards. Only the following are currently available
2258
2259   <match>*  - will match functions that begin with <match>
2260   *<match>  - will match functions that end with <match>
2261   *<match>* - will match functions that have <match> in it
2262
2263 These are the only wild cards which are supported.
2264
2265   <match>*<match> will not work.
2266
2267 Note: It is better to use quotes to enclose the wild cards,
2268       otherwise the shell may expand the parameters into names
2269       of files in the local directory.
2270
2271  # echo 'hrtimer_*' > set_ftrace_filter
2272
2273 Produces:
2274
2275 # tracer: function
2276 #
2277 # entries-in-buffer/entries-written: 897/897   #P:4
2278 #
2279 #                              _-----=> irqs-off
2280 #                             / _----=> need-resched
2281 #                            | / _---=> hardirq/softirq
2282 #                            || / _--=> preempt-depth
2283 #                            ||| /     delay
2284 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2285 #              | |       |   ||||       |         |
2286           <idle>-0     [003] dN.1  4228.547803: hrtimer_cancel <-tick_nohz_idle_exit
2287           <idle>-0     [003] dN.1  4228.547804: hrtimer_try_to_cancel <-hrtimer_cancel
2288           <idle>-0     [003] dN.2  4228.547805: hrtimer_force_reprogram <-__remove_hrtimer
2289           <idle>-0     [003] dN.1  4228.547805: hrtimer_forward <-tick_nohz_idle_exit
2290           <idle>-0     [003] dN.1  4228.547805: hrtimer_start_range_ns <-hrtimer_start_expires.constprop.11
2291           <idle>-0     [003] d..1  4228.547858: hrtimer_get_next_event <-get_next_timer_interrupt
2292           <idle>-0     [003] d..1  4228.547859: hrtimer_start <-__tick_nohz_idle_enter
2293           <idle>-0     [003] d..2  4228.547860: hrtimer_force_reprogram <-__rem
2294
2295 Notice that we lost the sys_nanosleep.
2296
2297  # cat set_ftrace_filter
2298 hrtimer_run_queues
2299 hrtimer_run_pending
2300 hrtimer_init
2301 hrtimer_cancel
2302 hrtimer_try_to_cancel
2303 hrtimer_forward
2304 hrtimer_start
2305 hrtimer_reprogram
2306 hrtimer_force_reprogram
2307 hrtimer_get_next_event
2308 hrtimer_interrupt
2309 hrtimer_nanosleep
2310 hrtimer_wakeup
2311 hrtimer_get_remaining
2312 hrtimer_get_res
2313 hrtimer_init_sleeper
2314
2315
2316 This is because the '>' and '>>' act just like they do in bash.
2317 To rewrite the filters, use '>'
2318 To append to the filters, use '>>'
2319
2320 To clear out a filter so that all functions will be recorded
2321 again:
2322
2323  # echo > set_ftrace_filter
2324  # cat set_ftrace_filter
2325  #
2326
2327 Again, now we want to append.
2328
2329  # echo sys_nanosleep > set_ftrace_filter
2330  # cat set_ftrace_filter
2331 sys_nanosleep
2332  # echo 'hrtimer_*' >> set_ftrace_filter
2333  # cat set_ftrace_filter
2334 hrtimer_run_queues
2335 hrtimer_run_pending
2336 hrtimer_init
2337 hrtimer_cancel
2338 hrtimer_try_to_cancel
2339 hrtimer_forward
2340 hrtimer_start
2341 hrtimer_reprogram
2342 hrtimer_force_reprogram
2343 hrtimer_get_next_event
2344 hrtimer_interrupt
2345 sys_nanosleep
2346 hrtimer_nanosleep
2347 hrtimer_wakeup
2348 hrtimer_get_remaining
2349 hrtimer_get_res
2350 hrtimer_init_sleeper
2351
2352
2353 The set_ftrace_notrace prevents those functions from being
2354 traced.
2355
2356  # echo '*preempt*' '*lock*' > set_ftrace_notrace
2357
2358 Produces:
2359
2360 # tracer: function
2361 #
2362 # entries-in-buffer/entries-written: 39608/39608   #P:4
2363 #
2364 #                              _-----=> irqs-off
2365 #                             / _----=> need-resched
2366 #                            | / _---=> hardirq/softirq
2367 #                            || / _--=> preempt-depth
2368 #                            ||| /     delay
2369 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2370 #              | |       |   ||||       |         |
2371             bash-1994  [000] ....  4342.324896: file_ra_state_init <-do_dentry_open
2372             bash-1994  [000] ....  4342.324897: open_check_o_direct <-do_last
2373             bash-1994  [000] ....  4342.324897: ima_file_check <-do_last
2374             bash-1994  [000] ....  4342.324898: process_measurement <-ima_file_check
2375             bash-1994  [000] ....  4342.324898: ima_get_action <-process_measurement
2376             bash-1994  [000] ....  4342.324898: ima_match_policy <-ima_get_action
2377             bash-1994  [000] ....  4342.324899: do_truncate <-do_last
2378             bash-1994  [000] ....  4342.324899: should_remove_suid <-do_truncate
2379             bash-1994  [000] ....  4342.324899: notify_change <-do_truncate
2380             bash-1994  [000] ....  4342.324900: current_fs_time <-notify_change
2381             bash-1994  [000] ....  4342.324900: current_kernel_time <-current_fs_time
2382             bash-1994  [000] ....  4342.324900: timespec_trunc <-current_fs_time
2383
2384 We can see that there's no more lock or preempt tracing.
2385
2386
2387 Dynamic ftrace with the function graph tracer
2388 ---------------------------------------------
2389
2390 Although what has been explained above concerns both the
2391 function tracer and the function-graph-tracer, there are some
2392 special features only available in the function-graph tracer.
2393
2394 If you want to trace only one function and all of its children,
2395 you just have to echo its name into set_graph_function:
2396
2397  echo __do_fault > set_graph_function
2398
2399 will produce the following "expanded" trace of the __do_fault()
2400 function:
2401
2402  0)               |  __do_fault() {
2403  0)               |    filemap_fault() {
2404  0)               |      find_lock_page() {
2405  0)   0.804 us    |        find_get_page();
2406  0)               |        __might_sleep() {
2407  0)   1.329 us    |        }
2408  0)   3.904 us    |      }
2409  0)   4.979 us    |    }
2410  0)   0.653 us    |    _spin_lock();
2411  0)   0.578 us    |    page_add_file_rmap();
2412  0)   0.525 us    |    native_set_pte_at();
2413  0)   0.585 us    |    _spin_unlock();
2414  0)               |    unlock_page() {
2415  0)   0.541 us    |      page_waitqueue();
2416  0)   0.639 us    |      __wake_up_bit();
2417  0)   2.786 us    |    }
2418  0) + 14.237 us   |  }
2419  0)               |  __do_fault() {
2420  0)               |    filemap_fault() {
2421  0)               |      find_lock_page() {
2422  0)   0.698 us    |        find_get_page();
2423  0)               |        __might_sleep() {
2424  0)   1.412 us    |        }
2425  0)   3.950 us    |      }
2426  0)   5.098 us    |    }
2427  0)   0.631 us    |    _spin_lock();
2428  0)   0.571 us    |    page_add_file_rmap();
2429  0)   0.526 us    |    native_set_pte_at();
2430  0)   0.586 us    |    _spin_unlock();
2431  0)               |    unlock_page() {
2432  0)   0.533 us    |      page_waitqueue();
2433  0)   0.638 us    |      __wake_up_bit();
2434  0)   2.793 us    |    }
2435  0) + 14.012 us   |  }
2436
2437 You can also expand several functions at once:
2438
2439  echo sys_open > set_graph_function
2440  echo sys_close >> set_graph_function
2441
2442 Now if you want to go back to trace all functions you can clear
2443 this special filter via:
2444
2445  echo > set_graph_function
2446
2447
2448 ftrace_enabled
2449 --------------
2450
2451 Note, the proc sysctl ftrace_enable is a big on/off switch for the
2452 function tracer. By default it is enabled (when function tracing is
2453 enabled in the kernel). If it is disabled, all function tracing is
2454 disabled. This includes not only the function tracers for ftrace, but
2455 also for any other uses (perf, kprobes, stack tracing, profiling, etc).
2456
2457 Please disable this with care.
2458
2459 This can be disable (and enabled) with:
2460
2461   sysctl kernel.ftrace_enabled=0
2462   sysctl kernel.ftrace_enabled=1
2463
2464  or
2465
2466   echo 0 > /proc/sys/kernel/ftrace_enabled
2467   echo 1 > /proc/sys/kernel/ftrace_enabled
2468
2469
2470 Filter commands
2471 ---------------
2472
2473 A few commands are supported by the set_ftrace_filter interface.
2474 Trace commands have the following format:
2475
2476 <function>:<command>:<parameter>
2477
2478 The following commands are supported:
2479
2480 - mod
2481   This command enables function filtering per module. The
2482   parameter defines the module. For example, if only the write*
2483   functions in the ext3 module are desired, run:
2484
2485    echo 'write*:mod:ext3' > set_ftrace_filter
2486
2487   This command interacts with the filter in the same way as
2488   filtering based on function names. Thus, adding more functions
2489   in a different module is accomplished by appending (>>) to the
2490   filter file. Remove specific module functions by prepending
2491   '!':
2492
2493    echo '!writeback*:mod:ext3' >> set_ftrace_filter
2494
2495   Mod command supports module globbing. Disable tracing for all
2496   functions except a specific module:
2497
2498    echo '!*:mod:!ext3' >> set_ftrace_filter
2499
2500   Disable tracing for all modules, but still trace kernel:
2501
2502    echo '!*:mod:*' >> set_ftrace_filter
2503
2504   Enable filter only for kernel:
2505
2506    echo '*write*:mod:!*' >> set_ftrace_filter
2507
2508   Enable filter for module globbing:
2509
2510    echo '*write*:mod:*snd*' >> set_ftrace_filter
2511
2512 - traceon/traceoff
2513   These commands turn tracing on and off when the specified
2514   functions are hit. The parameter determines how many times the
2515   tracing system is turned on and off. If unspecified, there is
2516   no limit. For example, to disable tracing when a schedule bug
2517   is hit the first 5 times, run:
2518
2519    echo '__schedule_bug:traceoff:5' > set_ftrace_filter
2520
2521   To always disable tracing when __schedule_bug is hit:
2522
2523    echo '__schedule_bug:traceoff' > set_ftrace_filter
2524
2525   These commands are cumulative whether or not they are appended
2526   to set_ftrace_filter. To remove a command, prepend it by '!'
2527   and drop the parameter:
2528
2529    echo '!__schedule_bug:traceoff:0' > set_ftrace_filter
2530
2531     The above removes the traceoff command for __schedule_bug
2532     that have a counter. To remove commands without counters:
2533
2534    echo '!__schedule_bug:traceoff' > set_ftrace_filter
2535
2536 - snapshot
2537   Will cause a snapshot to be triggered when the function is hit.
2538
2539    echo 'native_flush_tlb_others:snapshot' > set_ftrace_filter
2540
2541   To only snapshot once:
2542
2543    echo 'native_flush_tlb_others:snapshot:1' > set_ftrace_filter
2544
2545   To remove the above commands:
2546
2547    echo '!native_flush_tlb_others:snapshot' > set_ftrace_filter
2548    echo '!native_flush_tlb_others:snapshot:0' > set_ftrace_filter
2549
2550 - enable_event/disable_event
2551   These commands can enable or disable a trace event. Note, because
2552   function tracing callbacks are very sensitive, when these commands
2553   are registered, the trace point is activated, but disabled in
2554   a "soft" mode. That is, the tracepoint will be called, but
2555   just will not be traced. The event tracepoint stays in this mode
2556   as long as there's a command that triggers it.
2557
2558    echo 'try_to_wake_up:enable_event:sched:sched_switch:2' > \
2559          set_ftrace_filter
2560
2561   The format is:
2562
2563     <function>:enable_event:<system>:<event>[:count]
2564     <function>:disable_event:<system>:<event>[:count]
2565
2566   To remove the events commands:
2567
2568
2569    echo '!try_to_wake_up:enable_event:sched:sched_switch:0' > \
2570          set_ftrace_filter
2571    echo '!schedule:disable_event:sched:sched_switch' > \
2572          set_ftrace_filter
2573
2574 - dump
2575   When the function is hit, it will dump the contents of the ftrace
2576   ring buffer to the console. This is useful if you need to debug
2577   something, and want to dump the trace when a certain function
2578   is hit. Perhaps its a function that is called before a tripple
2579   fault happens and does not allow you to get a regular dump.
2580
2581 - cpudump
2582   When the function is hit, it will dump the contents of the ftrace
2583   ring buffer for the current CPU to the console. Unlike the "dump"
2584   command, it only prints out the contents of the ring buffer for the
2585   CPU that executed the function that triggered the dump.
2586
2587 trace_pipe
2588 ----------
2589
2590 The trace_pipe outputs the same content as the trace file, but
2591 the effect on the tracing is different. Every read from
2592 trace_pipe is consumed. This means that subsequent reads will be
2593 different. The trace is live.
2594
2595  # echo function > current_tracer
2596  # cat trace_pipe > /tmp/trace.out &
2597 [1] 4153
2598  # echo 1 > tracing_on
2599  # usleep 1
2600  # echo 0 > tracing_on
2601  # cat trace
2602 # tracer: function
2603 #
2604 # entries-in-buffer/entries-written: 0/0   #P:4
2605 #
2606 #                              _-----=> irqs-off
2607 #                             / _----=> need-resched
2608 #                            | / _---=> hardirq/softirq
2609 #                            || / _--=> preempt-depth
2610 #                            ||| /     delay
2611 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2612 #              | |       |   ||||       |         |
2613
2614  #
2615  # cat /tmp/trace.out
2616             bash-1994  [000] ....  5281.568961: mutex_unlock <-rb_simple_write
2617             bash-1994  [000] ....  5281.568963: __mutex_unlock_slowpath <-mutex_unlock
2618             bash-1994  [000] ....  5281.568963: __fsnotify_parent <-fsnotify_modify
2619             bash-1994  [000] ....  5281.568964: fsnotify <-fsnotify_modify
2620             bash-1994  [000] ....  5281.568964: __srcu_read_lock <-fsnotify
2621             bash-1994  [000] ....  5281.568964: add_preempt_count <-__srcu_read_lock
2622             bash-1994  [000] ...1  5281.568965: sub_preempt_count <-__srcu_read_lock
2623             bash-1994  [000] ....  5281.568965: __srcu_read_unlock <-fsnotify
2624             bash-1994  [000] ....  5281.568967: sys_dup2 <-system_call_fastpath
2625
2626
2627 Note, reading the trace_pipe file will block until more input is
2628 added.
2629
2630 trace entries
2631 -------------
2632
2633 Having too much or not enough data can be troublesome in
2634 diagnosing an issue in the kernel. The file buffer_size_kb is
2635 used to modify the size of the internal trace buffers. The
2636 number listed is the number of entries that can be recorded per
2637 CPU. To know the full size, multiply the number of possible CPUs
2638 with the number of entries.
2639
2640  # cat buffer_size_kb
2641 1408 (units kilobytes)
2642
2643 Or simply read buffer_total_size_kb
2644
2645  # cat buffer_total_size_kb 
2646 5632
2647
2648 To modify the buffer, simple echo in a number (in 1024 byte segments).
2649
2650  # echo 10000 > buffer_size_kb
2651  # cat buffer_size_kb
2652 10000 (units kilobytes)
2653
2654 It will try to allocate as much as possible. If you allocate too
2655 much, it can cause Out-Of-Memory to trigger.
2656
2657  # echo 1000000000000 > buffer_size_kb
2658 -bash: echo: write error: Cannot allocate memory
2659  # cat buffer_size_kb
2660 85
2661
2662 The per_cpu buffers can be changed individually as well:
2663
2664  # echo 10000 > per_cpu/cpu0/buffer_size_kb
2665  # echo 100 > per_cpu/cpu1/buffer_size_kb
2666
2667 When the per_cpu buffers are not the same, the buffer_size_kb
2668 at the top level will just show an X
2669
2670  # cat buffer_size_kb
2671 X
2672
2673 This is where the buffer_total_size_kb is useful:
2674
2675  # cat buffer_total_size_kb 
2676 12916
2677
2678 Writing to the top level buffer_size_kb will reset all the buffers
2679 to be the same again.
2680
2681 Snapshot
2682 --------
2683 CONFIG_TRACER_SNAPSHOT makes a generic snapshot feature
2684 available to all non latency tracers. (Latency tracers which
2685 record max latency, such as "irqsoff" or "wakeup", can't use
2686 this feature, since those are already using the snapshot
2687 mechanism internally.)
2688
2689 Snapshot preserves a current trace buffer at a particular point
2690 in time without stopping tracing. Ftrace swaps the current
2691 buffer with a spare buffer, and tracing continues in the new
2692 current (=previous spare) buffer.
2693
2694 The following debugfs files in "tracing" are related to this
2695 feature:
2696
2697   snapshot:
2698
2699         This is used to take a snapshot and to read the output
2700         of the snapshot. Echo 1 into this file to allocate a
2701         spare buffer and to take a snapshot (swap), then read
2702         the snapshot from this file in the same format as
2703         "trace" (described above in the section "The File
2704         System"). Both reads snapshot and tracing are executable
2705         in parallel. When the spare buffer is allocated, echoing
2706         0 frees it, and echoing else (positive) values clear the
2707         snapshot contents.
2708         More details are shown in the table below.
2709
2710         status\input  |     0      |     1      |    else    |
2711         --------------+------------+------------+------------+
2712         not allocated |(do nothing)| alloc+swap |(do nothing)|
2713         --------------+------------+------------+------------+
2714         allocated     |    free    |    swap    |   clear    |
2715         --------------+------------+------------+------------+
2716
2717 Here is an example of using the snapshot feature.
2718
2719  # echo 1 > events/sched/enable
2720  # echo 1 > snapshot
2721  # cat snapshot
2722 # tracer: nop
2723 #
2724 # entries-in-buffer/entries-written: 71/71   #P:8
2725 #
2726 #                              _-----=> irqs-off
2727 #                             / _----=> need-resched
2728 #                            | / _---=> hardirq/softirq
2729 #                            || / _--=> preempt-depth
2730 #                            ||| /     delay
2731 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2732 #              | |       |   ||||       |         |
2733           <idle>-0     [005] d...  2440.603828: sched_switch: prev_comm=swapper/5 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=snapshot-test-2 next_pid=2242 next_prio=120
2734            sleep-2242  [005] d...  2440.603846: sched_switch: prev_comm=snapshot-test-2 prev_pid=2242 prev_prio=120 prev_state=R ==> next_comm=kworker/5:1 next_pid=60 next_prio=120
2735 [...]
2736           <idle>-0     [002] d...  2440.707230: sched_switch: prev_comm=swapper/2 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=snapshot-test-2 next_pid=2229 next_prio=120
2737
2738  # cat trace
2739 # tracer: nop
2740 #
2741 # entries-in-buffer/entries-written: 77/77   #P:8
2742 #
2743 #                              _-----=> irqs-off
2744 #                             / _----=> need-resched
2745 #                            | / _---=> hardirq/softirq
2746 #                            || / _--=> preempt-depth
2747 #                            ||| /     delay
2748 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2749 #              | |       |   ||||       |         |
2750           <idle>-0     [007] d...  2440.707395: sched_switch: prev_comm=swapper/7 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=snapshot-test-2 next_pid=2243 next_prio=120
2751  snapshot-test-2-2229  [002] d...  2440.707438: sched_switch: prev_comm=snapshot-test-2 prev_pid=2229 prev_prio=120 prev_state=S ==> next_comm=swapper/2 next_pid=0 next_prio=120
2752 [...]
2753
2754
2755 If you try to use this snapshot feature when current tracer is
2756 one of the latency tracers, you will get the following results.
2757
2758  # echo wakeup > current_tracer
2759  # echo 1 > snapshot
2760 bash: echo: write error: Device or resource busy
2761  # cat snapshot
2762 cat: snapshot: Device or resource busy
2763
2764
2765 Instances
2766 ---------
2767 In the debugfs tracing directory is a directory called "instances".
2768 This directory can have new directories created inside of it using
2769 mkdir, and removing directories with rmdir. The directory created
2770 with mkdir in this directory will already contain files and other
2771 directories after it is created.
2772
2773  # mkdir instances/foo
2774  # ls instances/foo
2775 buffer_size_kb  buffer_total_size_kb  events  free_buffer  per_cpu
2776 set_event  snapshot  trace  trace_clock  trace_marker  trace_options
2777 trace_pipe  tracing_on
2778
2779 As you can see, the new directory looks similar to the tracing directory
2780 itself. In fact, it is very similar, except that the buffer and
2781 events are agnostic from the main director, or from any other
2782 instances that are created.
2783
2784 The files in the new directory work just like the files with the
2785 same name in the tracing directory except the buffer that is used
2786 is a separate and new buffer. The files affect that buffer but do not
2787 affect the main buffer with the exception of trace_options. Currently,
2788 the trace_options affect all instances and the top level buffer
2789 the same, but this may change in future releases. That is, options
2790 may become specific to the instance they reside in.
2791
2792 Notice that none of the function tracer files are there, nor is
2793 current_tracer and available_tracers. This is because the buffers
2794 can currently only have events enabled for them.
2795
2796  # mkdir instances/foo
2797  # mkdir instances/bar
2798  # mkdir instances/zoot
2799  # echo 100000 > buffer_size_kb
2800  # echo 1000 > instances/foo/buffer_size_kb
2801  # echo 5000 > instances/bar/per_cpu/cpu1/buffer_size_kb
2802  # echo function > current_trace
2803  # echo 1 > instances/foo/events/sched/sched_wakeup/enable
2804  # echo 1 > instances/foo/events/sched/sched_wakeup_new/enable
2805  # echo 1 > instances/foo/events/sched/sched_switch/enable
2806  # echo 1 > instances/bar/events/irq/enable
2807  # echo 1 > instances/zoot/events/syscalls/enable
2808  # cat trace_pipe
2809 CPU:2 [LOST 11745 EVENTS]
2810             bash-2044  [002] .... 10594.481032: _raw_spin_lock_irqsave <-get_page_from_freelist
2811             bash-2044  [002] d... 10594.481032: add_preempt_count <-_raw_spin_lock_irqsave
2812             bash-2044  [002] d..1 10594.481032: __rmqueue <-get_page_from_freelist
2813             bash-2044  [002] d..1 10594.481033: _raw_spin_unlock <-get_page_from_freelist
2814             bash-2044  [002] d..1 10594.481033: sub_preempt_count <-_raw_spin_unlock
2815             bash-2044  [002] d... 10594.481033: get_pageblock_flags_group <-get_pageblock_migratetype
2816             bash-2044  [002] d... 10594.481034: __mod_zone_page_state <-get_page_from_freelist
2817             bash-2044  [002] d... 10594.481034: zone_statistics <-get_page_from_freelist
2818             bash-2044  [002] d... 10594.481034: __inc_zone_state <-zone_statistics
2819             bash-2044  [002] d... 10594.481034: __inc_zone_state <-zone_statistics
2820             bash-2044  [002] .... 10594.481035: arch_dup_task_struct <-copy_process
2821 [...]
2822
2823  # cat instances/foo/trace_pipe
2824             bash-1998  [000] d..4   136.676759: sched_wakeup: comm=kworker/0:1 pid=59 prio=120 success=1 target_cpu=000
2825             bash-1998  [000] dN.4   136.676760: sched_wakeup: comm=bash pid=1998 prio=120 success=1 target_cpu=000
2826           <idle>-0     [003] d.h3   136.676906: sched_wakeup: comm=rcu_preempt pid=9 prio=120 success=1 target_cpu=003
2827           <idle>-0     [003] d..3   136.676909: sched_switch: prev_comm=swapper/3 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=rcu_preempt next_pid=9 next_prio=120
2828      rcu_preempt-9     [003] d..3   136.676916: sched_switch: prev_comm=rcu_preempt prev_pid=9 prev_prio=120 prev_state=S ==> next_comm=swapper/3 next_pid=0 next_prio=120
2829             bash-1998  [000] d..4   136.677014: sched_wakeup: comm=kworker/0:1 pid=59 prio=120 success=1 target_cpu=000
2830             bash-1998  [000] dN.4   136.677016: sched_wakeup: comm=bash pid=1998 prio=120 success=1 target_cpu=000
2831             bash-1998  [000] d..3   136.677018: sched_switch: prev_comm=bash prev_pid=1998 prev_prio=120 prev_state=R+ ==> next_comm=kworker/0:1 next_pid=59 next_prio=120
2832      kworker/0:1-59    [000] d..4   136.677022: sched_wakeup: comm=sshd pid=1995 prio=120 success=1 target_cpu=001
2833      kworker/0:1-59    [000] d..3   136.677025: sched_switch: prev_comm=kworker/0:1 prev_pid=59 prev_prio=120 prev_state=S ==> next_comm=bash next_pid=1998 next_prio=120
2834 [...]
2835
2836  # cat instances/bar/trace_pipe
2837      migration/1-14    [001] d.h3   138.732674: softirq_raise: vec=3 [action=NET_RX]
2838           <idle>-0     [001] dNh3   138.732725: softirq_raise: vec=3 [action=NET_RX]
2839             bash-1998  [000] d.h1   138.733101: softirq_raise: vec=1 [action=TIMER]
2840             bash-1998  [000] d.h1   138.733102: softirq_raise: vec=9 [action=RCU]
2841             bash-1998  [000] ..s2   138.733105: softirq_entry: vec=1 [action=TIMER]
2842             bash-1998  [000] ..s2   138.733106: softirq_exit: vec=1 [action=TIMER]
2843             bash-1998  [000] ..s2   138.733106: softirq_entry: vec=9 [action=RCU]
2844             bash-1998  [000] ..s2   138.733109: softirq_exit: vec=9 [action=RCU]
2845             sshd-1995  [001] d.h1   138.733278: irq_handler_entry: irq=21 name=uhci_hcd:usb4
2846             sshd-1995  [001] d.h1   138.733280: irq_handler_exit: irq=21 ret=unhandled
2847             sshd-1995  [001] d.h1   138.733281: irq_handler_entry: irq=21 name=eth0
2848             sshd-1995  [001] d.h1   138.733283: irq_handler_exit: irq=21 ret=handled
2849 [...]
2850
2851  # cat instances/zoot/trace
2852 # tracer: nop
2853 #
2854 # entries-in-buffer/entries-written: 18996/18996   #P:4
2855 #
2856 #                              _-----=> irqs-off
2857 #                             / _----=> need-resched
2858 #                            | / _---=> hardirq/softirq
2859 #                            || / _--=> preempt-depth
2860 #                            ||| /     delay
2861 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
2862 #              | |       |   ||||       |         |
2863             bash-1998  [000] d...   140.733501: sys_write -> 0x2
2864             bash-1998  [000] d...   140.733504: sys_dup2(oldfd: a, newfd: 1)
2865             bash-1998  [000] d...   140.733506: sys_dup2 -> 0x1
2866             bash-1998  [000] d...   140.733508: sys_fcntl(fd: a, cmd: 1, arg: 0)
2867             bash-1998  [000] d...   140.733509: sys_fcntl -> 0x1
2868             bash-1998  [000] d...   140.733510: sys_close(fd: a)
2869             bash-1998  [000] d...   140.733510: sys_close -> 0x0
2870             bash-1998  [000] d...   140.733514: sys_rt_sigprocmask(how: 0, nset: 0, oset: 6e2768, sigsetsize: 8)
2871             bash-1998  [000] d...   140.733515: sys_rt_sigprocmask -> 0x0
2872             bash-1998  [000] d...   140.733516: sys_rt_sigaction(sig: 2, act: 7fff718846f0, oact: 7fff71884650, sigsetsize: 8)
2873             bash-1998  [000] d...   140.733516: sys_rt_sigaction -> 0x0
2874
2875 You can see that the trace of the top most trace buffer shows only
2876 the function tracing. The foo instance displays wakeups and task
2877 switches.
2878
2879 To remove the instances, simply delete their directories:
2880
2881  # rmdir instances/foo
2882  # rmdir instances/bar
2883  # rmdir instances/zoot
2884
2885 Note, if a process has a trace file open in one of the instance
2886 directories, the rmdir will fail with EBUSY.
2887
2888
2889 Stack trace
2890 -----------
2891 Since the kernel has a fixed sized stack, it is important not to
2892 waste it in functions. A kernel developer must be conscience of
2893 what they allocate on the stack. If they add too much, the system
2894 can be in danger of a stack overflow, and corruption will occur,
2895 usually leading to a system panic.
2896
2897 There are some tools that check this, usually with interrupts
2898 periodically checking usage. But if you can perform a check
2899 at every function call that will become very useful. As ftrace provides
2900 a function tracer, it makes it convenient to check the stack size
2901 at every function call. This is enabled via the stack tracer.
2902
2903 CONFIG_STACK_TRACER enables the ftrace stack tracing functionality.
2904 To enable it, write a '1' into /proc/sys/kernel/stack_tracer_enabled.
2905
2906  # echo 1 > /proc/sys/kernel/stack_tracer_enabled
2907
2908 You can also enable it from the kernel command line to trace
2909 the stack size of the kernel during boot up, by adding "stacktrace"
2910 to the kernel command line parameter.
2911
2912 After running it for a few minutes, the output looks like:
2913
2914  # cat stack_max_size
2915 2928
2916
2917  # cat stack_trace
2918         Depth    Size   Location    (18 entries)
2919         -----    ----   --------
2920   0)     2928     224   update_sd_lb_stats+0xbc/0x4ac
2921   1)     2704     160   find_busiest_group+0x31/0x1f1
2922   2)     2544     256   load_balance+0xd9/0x662
2923   3)     2288      80   idle_balance+0xbb/0x130
2924   4)     2208     128   __schedule+0x26e/0x5b9
2925   5)     2080      16   schedule+0x64/0x66
2926   6)     2064     128   schedule_timeout+0x34/0xe0
2927   7)     1936     112   wait_for_common+0x97/0xf1
2928   8)     1824      16   wait_for_completion+0x1d/0x1f
2929   9)     1808     128   flush_work+0xfe/0x119
2930  10)     1680      16   tty_flush_to_ldisc+0x1e/0x20
2931  11)     1664      48   input_available_p+0x1d/0x5c
2932  12)     1616      48   n_tty_poll+0x6d/0x134
2933  13)     1568      64   tty_poll+0x64/0x7f
2934  14)     1504     880   do_select+0x31e/0x511
2935  15)      624     400   core_sys_select+0x177/0x216
2936  16)      224      96   sys_select+0x91/0xb9
2937  17)      128     128   system_call_fastpath+0x16/0x1b
2938
2939 Note, if -mfentry is being used by gcc, functions get traced before
2940 they set up the stack frame. This means that leaf level functions
2941 are not tested by the stack tracer when -mfentry is used.
2942
2943 Currently, -mfentry is used by gcc 4.6.0 and above on x86 only.
2944
2945 ---------
2946
2947 More details can be found in the source code, in the
2948 kernel/trace/*.c files.