diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-03-05 15:41:17 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-03-05 15:41:17 -0500 |
| commit | efc0bfac7b966fbf4776f11a7922d6c0d92e7ac8 (patch) | |
| tree | 95dd86b790d072f5e73d0a84839d6f93756c5606 | |
| parent | 264e6579fade0e9bca9823ce7272a3cbd7f2d647 (diff) | |
trace-cmd: Add documentation that will become manpages for trace-cmd
Added a Documentation directory that will become the trace-cmd manpages.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -rw-r--r-- | Documentation/trace-cmd-extract.txt | 66 | ||||
| -rw-r--r-- | Documentation/trace-cmd-list.txt | 51 | ||||
| -rw-r--r-- | Documentation/trace-cmd-listen.txt | 55 | ||||
| -rw-r--r-- | Documentation/trace-cmd-record.txt | 225 | ||||
| -rw-r--r-- | Documentation/trace-cmd-report.txt | 285 | ||||
| -rw-r--r-- | Documentation/trace-cmd-reset.txt | 54 | ||||
| -rw-r--r-- | Documentation/trace-cmd-split.txt | 98 | ||||
| -rw-r--r-- | Documentation/trace-cmd-start.txt | 44 | ||||
| -rw-r--r-- | Documentation/trace-cmd-stop.txt | 46 | ||||
| -rw-r--r-- | Documentation/trace-cmd.txt | 73 |
10 files changed, 997 insertions, 0 deletions
diff --git a/Documentation/trace-cmd-extract.txt b/Documentation/trace-cmd-extract.txt new file mode 100644 index 0000000..1eaea3c --- /dev/null +++ b/Documentation/trace-cmd-extract.txt | |||
| @@ -0,0 +1,66 @@ | |||
| 1 | TRACE-CMD-EXTRACT(1) | ||
| 2 | =================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-extract - extract out the data from the Ftrace Linux tracer. | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd extract ['OPTIONS']* | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) extract is usually used after 'trace-cmd-start(1)' and | ||
| 15 | 'trace-cmd-stop(1)'. It can be used after the Ftrace tracer has been started | ||
| 16 | manually through the Ftrace pseudo file system. | ||
| 17 | |||
| 18 | The extract command creates a trace.dat file that can be used by | ||
| 19 | 'trace-cmd-report(1)' to read from. It reads the kernel internal ring buffer | ||
| 20 | to produce the trace.dat file. | ||
| 21 | |||
| 22 | OPTIONS | ||
| 23 | ------- | ||
| 24 | *-p* 'plugin':: | ||
| 25 | Although *extract* does not start any traces, some of the plugins require | ||
| 26 | just reading the output in ASCII format. These are the latency tracers, | ||
| 27 | since the latency tracers have a separate internal buffer. The plugin | ||
| 28 | option is therefore only necessary for the 'wakeup', 'wakeup-rt', | ||
| 29 | 'irqsoff', 'preemptoff' and 'preemptirqsoff' plugins. | ||
| 30 | |||
| 31 | With out this option, the extract command will extract from the internal | ||
| 32 | Ftrace buffers. | ||
| 33 | |||
| 34 | *-O* 'option':: | ||
| 35 | If a latency tracer is being extracted, and the *-p* option is used, then | ||
| 36 | there are some Ftrace options that can change the format. This will update | ||
| 37 | those options before extracting. To see the list of options see | ||
| 38 | 'trace-cmd-list'. To enable an option, write its name, to disable the | ||
| 39 | option append the characters 'no' to it. For example: 'noprint-parent' | ||
| 40 | will disable the 'print-parent' option that prints the parent function in | ||
| 41 | printing a function event. | ||
| 42 | |||
| 43 | *-o* 'outputfile':: | ||
| 44 | By default, the extract command will create a 'trace.dat' file. This | ||
| 45 | option will change where the file is written to. | ||
| 46 | |||
| 47 | |||
| 48 | SEE ALSO | ||
| 49 | -------- | ||
| 50 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 51 | trace-cmd-stop(1), trace-cmd-reset(1), trace-cmd-split(1), | ||
| 52 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 53 | |||
| 54 | AUTHOR | ||
| 55 | ------ | ||
| 56 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 57 | |||
| 58 | RESOURCES | ||
| 59 | --------- | ||
| 60 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 61 | |||
| 62 | COPYING | ||
| 63 | ------- | ||
| 64 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 65 | the terms of the GNU Public License (GPL). | ||
| 66 | |||
diff --git a/Documentation/trace-cmd-list.txt b/Documentation/trace-cmd-list.txt new file mode 100644 index 0000000..16d0b6b --- /dev/null +++ b/Documentation/trace-cmd-list.txt | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | TRACE-CMD-LIST(1) | ||
| 2 | ================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-list - list available plugins, events or options for Ftrace. | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd list* ['OPTIONS'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) list displays the available plugins, events or Ftrace options | ||
| 15 | that are configured on the current machine. If no option is given, then it | ||
| 16 | lists all plugins, events and Ftrace options to standard output. | ||
| 17 | |||
| 18 | OPTIONS | ||
| 19 | ------- | ||
| 20 | *-e*:: | ||
| 21 | This option will list the available events that are enabled on the | ||
| 22 | local system. | ||
| 23 | |||
| 24 | *-p*:: | ||
| 25 | This option will list the available plugins that are enabled on the | ||
| 26 | local system. | ||
| 27 | |||
| 28 | *-o*:: | ||
| 29 | This option will list the available Ftrace options that are configured on | ||
| 30 | the local system. | ||
| 31 | |||
| 32 | |||
| 33 | SEE ALSO | ||
| 34 | -------- | ||
| 35 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 36 | trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-reset(1), | ||
| 37 | trace-cmd-split(1), trace-cmd-listen(1) | ||
| 38 | |||
| 39 | AUTHOR | ||
| 40 | ------ | ||
| 41 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 42 | |||
| 43 | RESOURCES | ||
| 44 | --------- | ||
| 45 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 46 | |||
| 47 | COPYING | ||
| 48 | ------- | ||
| 49 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 50 | the terms of the GNU Public License (GPL). | ||
| 51 | |||
diff --git a/Documentation/trace-cmd-listen.txt b/Documentation/trace-cmd-listen.txt new file mode 100644 index 0000000..981fb96 --- /dev/null +++ b/Documentation/trace-cmd-listen.txt | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | TRACE-CMD-LISTEN(1) | ||
| 2 | ================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-listen - listen for incoming connection to record tracing. | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd listen* -p 'port' ['OPTIONS'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) listen sets up a port to listen to waiting for connections | ||
| 15 | from other hosts that run 'trace-cmd-record(1)' with the *-N* option. When a | ||
| 16 | connection is made, and the remote host sends data, it will create a file | ||
| 17 | called 'trace.HOST:PORT.dat'. Where HOST is the name of the remote host, and | ||
| 18 | PORT is the port that the remote host used to connect with. | ||
| 19 | |||
| 20 | OPTIONS | ||
| 21 | ------- | ||
| 22 | *-p* 'port':: | ||
| 23 | This option will specifies tha port to listen to. | ||
| 24 | |||
| 25 | *-D*:: | ||
| 26 | This options causes trace-cmd listen to go into a daemon mode and run in | ||
| 27 | the background. | ||
| 28 | |||
| 29 | *-d* 'dir':: | ||
| 30 | This option specifies a directory to write the data files into. | ||
| 31 | |||
| 32 | *-o* 'filename':: | ||
| 33 | This option overides the default 'trace' in the 'trace.HOST:PORT.dat' that | ||
| 34 | is created when a remote host connects. | ||
| 35 | |||
| 36 | |||
| 37 | SEE ALSO | ||
| 38 | -------- | ||
| 39 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 40 | trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-reset(1), | ||
| 41 | trace-cmd-split(1), trace-cmd-list(1) | ||
| 42 | |||
| 43 | AUTHOR | ||
| 44 | ------ | ||
| 45 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 46 | |||
| 47 | RESOURCES | ||
| 48 | --------- | ||
| 49 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 50 | |||
| 51 | COPYING | ||
| 52 | ------- | ||
| 53 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 54 | the terms of the GNU Public License (GPL). | ||
| 55 | |||
diff --git a/Documentation/trace-cmd-record.txt b/Documentation/trace-cmd-record.txt new file mode 100644 index 0000000..9f43d6d --- /dev/null +++ b/Documentation/trace-cmd-record.txt | |||
| @@ -0,0 +1,225 @@ | |||
| 1 | TRACE-CMD-RECORD(1) | ||
| 2 | =================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-record - record a trace from the Ftrace Linux internal tracer | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd record* ['OPTIONS'] ['command'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) record command will set up the Ftrace Linux kernel tracer to | ||
| 15 | record the specified plugins or events that happen while the 'command' | ||
| 16 | executes. If no command is given, then it will record until the user hits | ||
| 17 | Ctrl-C. | ||
| 18 | |||
| 19 | The record command of trace-cmd will set up the Ftrace tracer to start tracing | ||
| 20 | the various events or plugins that are given on the command line. It will then | ||
| 21 | create a number of tracing processes (one per CPU) that will start recording | ||
| 22 | from the kernel ring buffer straight into temporary files. When the command is | ||
| 23 | complete (or Ctrl-C is hit) all the files will be combined into a trace.dat | ||
| 24 | file that can later be read (see trace-cmd-report(1)). | ||
| 25 | |||
| 26 | OPTIONS | ||
| 27 | ------- | ||
| 28 | *-p* 'plugin':: | ||
| 29 | Specify a trace plugin. Plugins are special Ftrace tracers that usually do | ||
| 30 | more than just trace an event. Common plugins are *function*, | ||
| 31 | *function_graph*, *preemptirqsoff*, *irqsoff*, *preemptoff*, and *wakeup*. | ||
| 32 | A plugin must be supported by the running kernel. To see a list of | ||
| 33 | available plugins, see trace-cmd-list(1). | ||
| 34 | |||
| 35 | *-e* 'event':: | ||
| 36 | Specify an event to trace. Various static trace points have been added to | ||
| 37 | the Linux kernel. They are grouped by subsystem where you can enable all | ||
| 38 | events of a given subsystem or specify specific events to be enabled. The | ||
| 39 | 'event' is of the format "subsystem:event-name". You can also just specify | ||
| 40 | the subsystem without the ':event-name' or the eventname without the | ||
| 41 | "subsystem:". Using "-e sched_switch" will enable the "sched_switch" event | ||
| 42 | where as, "-e sched" will enable all events under the "sched" subsystem. | ||
| 43 | |||
| 44 | The 'event' can also contain glob expressions. That is, "*stat*" will | ||
| 45 | select all events (or subsystems) that have the characters "stat" in their | ||
| 46 | names. | ||
| 47 | |||
| 48 | The keyword 'all' can be used to enable all events. | ||
| 49 | |||
| 50 | *-f* 'filter':: | ||
| 51 | Specify a filter for the previous event. This must come after a *-e*. This | ||
| 52 | will filter what events get recorded based on the content of the event. | ||
| 53 | Filtering is passed to the kernel directly so what filtering is allowed | ||
| 54 | may depend on what verison of the kernel you have. Basically, it will | ||
| 55 | let you use C notation to check if an event should be processed or not. | ||
| 56 | |||
| 57 | ---------------------------------------- | ||
| 58 | ==, >=, <=, >, <, &, |, && and || | ||
| 59 | ---------------------------------------- | ||
| 60 | |||
| 61 | The above are usually safe to use to compare fields. | ||
| 62 | |||
| 63 | *-v*:: | ||
| 64 | This will cause all events specified after it on the command line to not | ||
| 65 | be traced. This is useful for selecting a subsystem to be traced but to | ||
| 66 | leave out various events. For Example: "-e sched -v -e "\*stat\*"" will | ||
| 67 | enable all events in the sched subsystem except those that have "stat" in | ||
| 68 | their names. | ||
| 69 | |||
| 70 | Note: the *-v* option was taken from the way grep(1) inverts the following | ||
| 71 | matches. | ||
| 72 | |||
| 73 | *-F*:: | ||
| 74 | This will filter only the executable that is given on the command line. If | ||
| 75 | no command is given, then it will filter itself (pretty pointless). | ||
| 76 | Using *-F* will let you trace only events that are caused by the given | ||
| 77 | command. | ||
| 78 | |||
| 79 | *-P* 'pid':: | ||
| 80 | Similar to *-F* but lets you specify a process ID to trace. | ||
| 81 | |||
| 82 | *-o* 'output-file':: | ||
| 83 | By default, trace-cmd report will create a 'trace.dat' file. You can | ||
| 84 | specify a different file to write to with the *-o* option. | ||
| 85 | |||
| 86 | *-l* 'function-name':: | ||
| 87 | This will limit the 'function' and 'function_graph' tracers to only trace | ||
| 88 | the given function name. More than one *-l* may be specified on the | ||
| 89 | command line to trace more than one function. The limited use of glob | ||
| 90 | expressions are also allowed. These are 'match\*' to only filter functions | ||
| 91 | that start with 'match'. '\*match' to only filter functions that end with | ||
| 92 | 'match'. '\*match\*' to only filter on functions that contain 'match'. | ||
| 93 | |||
| 94 | *-g* 'function-name':: | ||
| 95 | This option is for the function_graph plugin. It will graph the given | ||
| 96 | function. That is, it will only trace the function and all functions that | ||
| 97 | it calls. You can have more than one *-g* on the command line. | ||
| 98 | |||
| 99 | *-n* 'function-name':: | ||
| 100 | This has the opposite effect of *-l*. The function given with the *-n* | ||
| 101 | option will not be traced. This takes precedence, that is, if you include | ||
| 102 | the same function for both *-n* and *-l*, it will not be traced. | ||
| 103 | |||
| 104 | *-d*:: | ||
| 105 | Some tracer plugins enable the function tracer by default. Like the | ||
| 106 | latency tracers. This option prevents the function tracer from being | ||
| 107 | enabled at start up. | ||
| 108 | |||
| 109 | *-O* 'option':: | ||
| 110 | Ftrace has various options that can be enabled or disabled. This allows | ||
| 111 | you to set them. Appending the text 'no' to an option disables it. | ||
| 112 | For example: "-O nograph-time" will disable the "graph-time" Ftrace | ||
| 113 | option. | ||
| 114 | |||
| 115 | *-s* 'interval':: | ||
| 116 | The processes that trace-cmd creates to record from the ring buffer need | ||
| 117 | to wake up to do the recording. Setting the 'interval' to zero will cause | ||
| 118 | the processes to wakeup every time new data is written into the buffer. | ||
| 119 | But since Ftrace is recording kernel activity, the act of this processes | ||
| 120 | going back to sleep may cause new events into the ring buffer which will | ||
| 121 | wake the process back up. This will needlessly add extra data into the | ||
| 122 | ring buffer. | ||
| 123 | |||
| 124 | The 'interval' metric is microseconds. The default is set to 1000 (1 ms). | ||
| 125 | This is the time each recording process will sleep before waking up to | ||
| 126 | record any new data that was written to the ring buffer. | ||
| 127 | |||
| 128 | *-b* 'size':: | ||
| 129 | This sets the ring buffer size to 'size' kilobytes. Because the Ftrace | ||
| 130 | ring buffer is per CPU, this size is the size of each per CPU ring buffer | ||
| 131 | inside the kernel. Using "-b 10000" on a machine with 4 CPUs will make | ||
| 132 | Ftrace have a total buffer size of 40 Megs. | ||
| 133 | |||
| 134 | *-N* 'host:port':: | ||
| 135 | If another machine is running "trace-cmd listen", this option is used to | ||
| 136 | have the data sent to that machine with UDP packets. Instead of writing | ||
| 137 | to an output file, the data is sent off to a remote box. This is ideal for | ||
| 138 | embedded machines with little storage, or having a single machine that | ||
| 139 | will keep all the data in a single repository. | ||
| 140 | |||
| 141 | *-t*:: | ||
| 142 | This option is used with *-N*, when there's a need to send the live data | ||
| 143 | with TCP packets instead of UDP. Although TCP is not nearly as fast as | ||
| 144 | sending the UDP packets, but it may be needed if the network is not that | ||
| 145 | reliable, the amount of data is not that intensive, and a guarantee is | ||
| 146 | needed that all traced information is transfered successfully. | ||
| 147 | |||
| 148 | |||
| 149 | EXAMPLES | ||
| 150 | -------- | ||
| 151 | |||
| 152 | The basic way to trace all events: | ||
| 153 | |||
| 154 | ------------------------------ | ||
| 155 | # trace-cmd record -e all ls > /dev/null | ||
| 156 | # trace-cmd report | ||
| 157 | trace-cmd-13541 [003] 106260.693809: filemap_fault: address=0x128122 offset=0xce | ||
| 158 | trace-cmd-13543 [001] 106260.693809: kmalloc: call_site=81128dd4 ptr=0xffff88003dd83800 bytes_req=768 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_ZERO | ||
| 159 | ls-13545 [002] 106260.693809: kfree: call_site=810a7abb ptr=0x0 | ||
| 160 | ls-13545 [002] 106260.693818: sys_exit_write: 0x1 | ||
| 161 | |||
| 162 | |||
| 163 | ------------------------------ | ||
| 164 | |||
| 165 | |||
| 166 | |||
| 167 | To use the function tracer with sched switch tracing: | ||
| 168 | |||
| 169 | ------------------------------ | ||
| 170 | # trace-cmd record -p function -e sched_switch ls > /dev/null | ||
| 171 | # trace-cmd report | ||
| 172 | ls-13587 [002] 106467.860310: function: hrtick_start_fair <-- pick_next_task_fair | ||
| 173 | ls-13587 [002] 106467.860313: sched_switch: prev_comm=trace-cmd prev_pid=13587 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=13583 next_prio=120 | ||
| 174 | trace-cmd-13585 [001] 106467.860314: function: native_set_pte_at <-- __do_fault | ||
| 175 | trace-cmd-13586 [003] 106467.860314: function: up_read <-- do_page_fault | ||
| 176 | ls-13587 [002] 106467.860317: function: __phys_addr <-- schedule | ||
| 177 | trace-cmd-13585 [001] 106467.860318: function: _raw_spin_unlock <-- __do_fault | ||
| 178 | ls-13587 [002] 106467.860320: function: native_load_sp0 <-- __switch_to | ||
| 179 | trace-cmd-13586 [003] 106467.860322: function: down_read_trylock <-- do_page_fault | ||
| 180 | |||
| 181 | |||
| 182 | ------------------------------ | ||
| 183 | |||
| 184 | Here is a nice way to find what interrupts have the highest latency: | ||
| 185 | ------------------------------------------ | ||
| 186 | # trace-cmd record -p function_graph -e irq_handler_entry -l do_IRQ sleep 10 | ||
| 187 | # trace-cmd report | ||
| 188 | <idle>-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() { | ||
| 189 | <idle>-0 [000] 157412.933974: irq_handler_entry: irq=48 name=eth0 | ||
| 190 | <idle>-0 [000] 157412.934004: funcgraph_exit: + 36.358 us | } | ||
| 191 | <idle>-0 [000] 157413.895004: funcgraph_entry: | do_IRQ() { | ||
| 192 | <idle>-0 [000] 157413.895011: irq_handler_entry: irq=48 name=eth0 | ||
| 193 | <idle>-0 [000] 157413.895026: funcgraph_exit: + 24.014 us | } | ||
| 194 | <idle>-0 [000] 157415.891762: funcgraph_entry: | do_IRQ() { | ||
| 195 | <idle>-0 [000] 157415.891769: irq_handler_entry: irq=48 name=eth0 | ||
| 196 | <idle>-0 [000] 157415.891784: funcgraph_exit: + 22.928 us | } | ||
| 197 | <idle>-0 [000] 157415.934869: funcgraph_entry: | do_IRQ() { | ||
| 198 | <idle>-0 [000] 157415.934874: irq_handler_entry: irq=48 name=eth0 | ||
| 199 | <idle>-0 [000] 157415.934906: funcgraph_exit: + 37.512 us | } | ||
| 200 | <idle>-0 [000] 157417.888373: funcgraph_entry: | do_IRQ() { | ||
| 201 | <idle>-0 [000] 157417.888381: irq_handler_entry: irq=48 name=eth0 | ||
| 202 | <idle>-0 [000] 157417.888398: funcgraph_exit: + 25.943 us | } | ||
| 203 | |||
| 204 | |||
| 205 | ------------------------------------------ | ||
| 206 | |||
| 207 | SEE ALSO | ||
| 208 | -------- | ||
| 209 | trace-cmd(1), trace-cmd-report(1), trace-cmd-start(1), trace-cmd-stop(1), | ||
| 210 | trace-cmd-extract(1), trace-cmd-reset(1), trace-cmd-split(1), | ||
| 211 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 212 | |||
| 213 | AUTHOR | ||
| 214 | ------ | ||
| 215 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 216 | |||
| 217 | RESOURCES | ||
| 218 | --------- | ||
| 219 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 220 | |||
| 221 | COPYING | ||
| 222 | ------- | ||
| 223 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 224 | the terms of the GNU Public License (GPL). | ||
| 225 | |||
diff --git a/Documentation/trace-cmd-report.txt b/Documentation/trace-cmd-report.txt new file mode 100644 index 0000000..aa033f5 --- /dev/null +++ b/Documentation/trace-cmd-report.txt | |||
| @@ -0,0 +1,285 @@ | |||
| 1 | TRACE-CMD-REPORT(1) | ||
| 2 | =================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-report - show in ASCII a trace created by trace-cmd record | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd report* ['OPTIONS'] ['input-file'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) report command will output a human readable report of a trace | ||
| 15 | created by trace-cmd record. | ||
| 16 | |||
| 17 | OPTIONS | ||
| 18 | ------- | ||
| 19 | *-i* 'input-file':: | ||
| 20 | By default, trace-cmd report willl read the file 'trace.dat'. But the *-i* | ||
| 21 | option open up the given 'input-file' instead. Note, the input file may | ||
| 22 | also be specified as the last item on the command line. | ||
| 23 | |||
| 24 | *-e*:: | ||
| 25 | This outputs the endianess of the file. trace-cmd report is smart enough | ||
| 26 | to be able to read big endian files on little endian machines, and vise | ||
| 27 | versa. | ||
| 28 | |||
| 29 | *-f*:: | ||
| 30 | This outputs the list of functions that have been recorded in the file. | ||
| 31 | |||
| 32 | *-P*:: | ||
| 33 | This outputs the list of "trace_printk()" data. The raw trace data points | ||
| 34 | to static pointers in the kernel. This must be stored in the trace.dat | ||
| 35 | file. | ||
| 36 | |||
| 37 | *-E*:: | ||
| 38 | This lists the possible events in the file (but this list is not | ||
| 39 | necessarily the list of events in the file). | ||
| 40 | |||
| 41 | *--events*:: | ||
| 42 | This will list the event formats that are stored in the trace.dat file. | ||
| 43 | |||
| 44 | *-F* 'filter':: | ||
| 45 | Add a filter to limit what events are displayed. The format of the filter | ||
| 46 | is: | ||
| 47 | |||
| 48 | ------------------------------------------ | ||
| 49 | <events> ':' <filter> | ||
| 50 | <events> = SYSTEM'/'EVENT | SYSTEM | EVENT | <events> ',' <events> | ||
| 51 | <filter> = EVENT_FIELD <op> <value> | <filter> '&&' <filter> | | ||
| 52 | <filter> '||' <filter> | '(' <filter> ')' | '!' <filter> | ||
| 53 | <op> = '==' | '!=' | '>=' | '<=' | '>' | '<' | '&' | '|' | '^' | | ||
| 54 | '+' | '-' | '*' | '/' | '%' | ||
| 55 | <value> = NUM | STRING | EVENT_FIELD | ||
| 56 | ------------------------------------------ | ||
| 57 | |||
| 58 | SYSTEM is the name of the system to filter on. If the EVENT is left out, | ||
| 59 | then it applies to all events under the SYSTEM. If only one string is used | ||
| 60 | without the '/' to deliminate between SYSTEM and EVENT, then the filter | ||
| 61 | will be applied to all systems and events that match the given string. | ||
| 62 | |||
| 63 | Whitespace is ignored, such that "sched:next_pid==123" is equivalent to | ||
| 64 | "sched : next_pid == 123". | ||
| 65 | |||
| 66 | STRING is defined with single or double quotes (single quote must end with | ||
| 67 | single quote, and double with double). Whitespace within quotes are not | ||
| 68 | ignored. | ||
| 69 | |||
| 70 | The representation of a SYSTEM or EVENT may also be a regular expression | ||
| 71 | as defined by 'regcomp(3)'. | ||
| 72 | |||
| 73 | The EVENT_FIELD is the name of the field of an event that is being | ||
| 74 | filtered. If the event does not contain the EVENT_FIELD, that part of the | ||
| 75 | equation will be considered false. | ||
| 76 | |||
| 77 | ------------------------------------------ | ||
| 78 | -F 'sched : bogus == 1 || common_pid == 2' | ||
| 79 | ------------------------------------------ | ||
| 80 | |||
| 81 | The "bogus == 1" will always evaluate to FALSE because no event has a | ||
| 82 | field called "bogus", but the "common_pid == 2" will still be evaluated | ||
| 83 | since all events have the field "common_pid". Any "sched" event that was | ||
| 84 | traced by the process with the PID of 2 will be shown. | ||
| 85 | |||
| 86 | Note, the EVENT_FIELD is the field name as shown by an events format | ||
| 87 | (as displayed with *--events*), and not what is found in the output. | ||
| 88 | If the output shows "ID:foo" but the field that "foo" belongs to was | ||
| 89 | called "name" in the event format, then "name" must be used in the filter. | ||
| 90 | The same is true about values. If the value that is displayed is converted | ||
| 91 | by to a string symbol, the filter checks the original value and not the | ||
| 92 | value displayed. For example, to filter on all tasks that were in the | ||
| 93 | running state at a context switch: | ||
| 94 | |||
| 95 | ------------------------------------------ | ||
| 96 | -F 'sched/sched_switch : prev_state==0' | ||
| 97 | ------------------------------------------ | ||
| 98 | |||
| 99 | Although the output displays 'R', having 'prev_stat=="R"' will not work. | ||
| 100 | |||
| 101 | *-v*:: | ||
| 102 | This causes the following filters of *-F* to filter out the matching | ||
| 103 | events. | ||
| 104 | |||
| 105 | ------------------------------------------ | ||
| 106 | -v -F 'sched/sched_switch : prev_state == 0' | ||
| 107 | ------------------------------------------ | ||
| 108 | |||
| 109 | Will not display any sched_switch events that have a prev_state of 0. | ||
| 110 | Removing the *-v* will only print out those events. | ||
| 111 | |||
| 112 | *-l*:: | ||
| 113 | This adds a "latency output" format. Information about interrupts being | ||
| 114 | disabled, soft irq being disabled, the "need_resched" flag being set, | ||
| 115 | preempt count, and big kernel lock are all being recorded with every | ||
| 116 | event. But the default display does not show this information. This option | ||
| 117 | will set display this information with 6 characters. When one of the | ||
| 118 | fields is zero or N/A a \'.\' is shown. | ||
| 119 | |||
| 120 | ------------------------------------------ | ||
| 121 | <idle>-0 0d.h1. 106467.859747: function: ktime_get <-- tick_check_idle | ||
| 122 | ------------------------------------------ | ||
| 123 | |||
| 124 | The 0d.h1. denotes this information. The first character is never a '.' | ||
| 125 | and represents what CPU the trace was recorded on (CPU 0). The 'd' denotes | ||
| 126 | that interrupts were disabled. The 'h' means that this was called inside | ||
| 127 | an interrupt handler. The '1' is the preemption disabled (preempt_count) | ||
| 128 | was set to one. The two '.'s are "need_resched" flag and kernel lock | ||
| 129 | counter. If the "need_resched" flag is set, then that charater would be a | ||
| 130 | 'N'. | ||
| 131 | |||
| 132 | *-w*:: | ||
| 133 | If both the 'sched_switch' and 'sched_wakeup' events are enabled, then | ||
| 134 | this option will report the latency between the time the task was first | ||
| 135 | woken, and the time it was scheduled in. | ||
| 136 | |||
| 137 | EXAMPLES | ||
| 138 | -------- | ||
| 139 | |||
| 140 | Using a trace.dat file that was created with: | ||
| 141 | |||
| 142 | ------------------------------------------ | ||
| 143 | # trace-cmd record -p function -e all sleep 5 | ||
| 144 | |||
| 145 | |||
| 146 | ------------------------------------------ | ||
| 147 | |||
| 148 | The default report shows: | ||
| 149 | |||
| 150 | ------------------------------------------ | ||
| 151 | # trace-cmd report | ||
| 152 | trace-cmd-16129 [002] 158126.498411: function: __mutex_unlock_slowpath <-- mutex_unlock | ||
| 153 | trace-cmd-16131 [000] 158126.498411: kmem_cache_alloc: call_site=811223c5 ptr=0xffff88003ecf2b40 bytes_req=272 bytes_alloc=320 gfp_flags=GFP_KERNEL|GFP_ZERO | ||
| 154 | trace-cmd-16130 [003] 158126.498411: function: do_splice_to <-- sys_splice | ||
| 155 | sleep-16133 [001] 158126.498412: function: inotify_inode_queue_event <-- vfs_write | ||
| 156 | trace-cmd-16129 [002] 158126.498420: lock_release: 0xffff88003f1fa4f8 &sb->s_type->i_mutex_key | ||
| 157 | trace-cmd-16131 [000] 158126.498421: function: security_file_alloc <-- get_empty_filp | ||
| 158 | sleep-16133 [001] 158126.498422: function: __fsnotify_parent <-- vfs_write | ||
| 159 | trace-cmd-16130 [003] 158126.498422: function: rw_verify_area <-- do_splice_to | ||
| 160 | trace-cmd-16131 [000] 158126.498424: function: cap_file_alloc_security <-- security_file_alloc | ||
| 161 | trace-cmd-16129 [002] 158126.498425: function: syscall_trace_leave <-- int_check_syscall_exit_work | ||
| 162 | sleep-16133 [001] 158126.498426: function: inotify_dentry_parent_queue_event <-- vfs_write | ||
| 163 | trace-cmd-16130 [003] 158126.498426: function: security_file_permission <-- rw_verify_area | ||
| 164 | trace-cmd-16129 [002] 158126.498428: function: audit_syscall_exit <-- syscall_trace_leave | ||
| 165 | [...] | ||
| 166 | |||
| 167 | |||
| 168 | ------------------------------------------ | ||
| 169 | |||
| 170 | To see everything but the function traces: | ||
| 171 | |||
| 172 | ------------------------------------------ | ||
| 173 | # trace-cmd report -v -F 'function' | ||
| 174 | trace-cmd-16131 [000] 158126.498411: kmem_cache_alloc: call_site=811223c5 ptr=0xffff88003ecf2b40 bytes_req=272 bytes_alloc=320 gfp_flags=GFP_KERNEL|GFP_ZERO | ||
| 175 | trace-cmd-16129 [002] 158126.498420: lock_release: 0xffff88003f1fa4f8 &sb->s_type->i_mutex_key | ||
| 176 | trace-cmd-16130 [003] 158126.498436: lock_acquire: 0xffffffff8166bf78 read all_cpu_access_lock | ||
| 177 | trace-cmd-16131 [000] 158126.498438: lock_acquire: 0xffff88003df5b520 read &fs->lock | ||
| 178 | trace-cmd-16129 [002] 158126.498446: kfree: call_site=810a7abb ptr=0x0 | ||
| 179 | trace-cmd-16130 [003] 158126.498448: lock_acquire: 0xffff880002250a80 &per_cpu(cpu_access_lock, cpu) | ||
| 180 | trace-cmd-16129 [002] 158126.498450: sys_exit_splice: 0xfffffff5 | ||
| 181 | trace-cmd-16131 [000] 158126.498454: lock_release: 0xffff88003df5b520 &fs->lock | ||
| 182 | sleep-16133 [001] 158126.498456: kfree: call_site=810a7abb ptr=0x0 | ||
| 183 | sleep-16133 [001] 158126.498460: sys_exit_write: 0x1 | ||
| 184 | trace-cmd-16130 [003] 158126.498462: kmalloc: call_site=810bf95b ptr=0xffff88003dedc040 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL|GFP_ZERO | ||
| 185 | |||
| 186 | |||
| 187 | ------------------------------------------ | ||
| 188 | |||
| 189 | To see only the kmalloc calls that were greater than 1000 bytes: | ||
| 190 | |||
| 191 | ------------------------------------------ | ||
| 192 | #trace-cmd report -F 'kmalloc: bytes_req > 1000' | ||
| 193 | <idle>-0 [000] 158128.126641: kmalloc: call_site=81330635 ptr=0xffff88003c2fd000 bytes_req=2096 bytes_alloc=4096 gfp_flags=GFP_ATOMIC | ||
| 194 | |||
| 195 | |||
| 196 | ------------------------------------------ | ||
| 197 | |||
| 198 | To see wakeups and sched switches that left the previous task in the running | ||
| 199 | state: | ||
| 200 | ------------------------------------------ | ||
| 201 | # trace-cmd report -F 'sched: prev_state == 0 || (success == 1)' | ||
| 202 | trace-cmd-16132 [002] 158126.499951: sched_wakeup: comm=trace-cmd pid=16129 prio=120 success=1 target_cpu=002 | ||
| 203 | trace-cmd-16132 [002] 158126.500401: sched_switch: prev_comm=trace-cmd prev_pid=16132 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=16129 next_prio=120 | ||
| 204 | <idle>-0 [003] 158126.500585: sched_wakeup: comm=trace-cmd pid=16130 prio=120 success=1 target_cpu=003 | ||
| 205 | <idle>-0 [003] 158126.501241: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=16130 next_prio=120 | ||
| 206 | trace-cmd-16132 [000] 158126.502475: sched_wakeup: comm=trace-cmd pid=16131 prio=120 success=1 target_cpu=000 | ||
| 207 | trace-cmd-16131 [002] 158126.506516: sched_wakeup: comm=trace-cmd pid=16129 prio=120 success=1 target_cpu=002 | ||
| 208 | <idle>-0 [003] 158126.550110: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=16130 next_prio=120 | ||
| 209 | trace-cmd-16131 [003] 158126.570243: sched_wakeup: comm=trace-cmd pid=16129 prio=120 success=1 target_cpu=003 | ||
| 210 | trace-cmd-16130 [002] 158126.618202: sched_switch: prev_comm=trace-cmd prev_pid=16130 prev_prio=120 prev_state=R ==> next_comm=yum-updatesd next_pid=3088 next_prio=1 20 | ||
| 211 | trace-cmd-16129 [003] 158126.622379: sched_wakeup: comm=trace-cmd pid=16131 prio=120 success=1 target_cpu=003 | ||
| 212 | trace-cmd-16129 [000] 158126.649287: sched_wakeup: comm=trace-cmd pid=16131 prio=120 success=1 target_cpu=000 | ||
| 213 | |||
| 214 | |||
| 215 | ------------------------------------------ | ||
| 216 | |||
| 217 | The above needs a little explanation. The filter specifies the "sched" | ||
| 218 | subsystem, which includes both sched_switch and sched_wakeup events. Any event | ||
| 219 | that does not have the format field "prev_state" or "success", will evaluate | ||
| 220 | those expressions as FALSE, and will not produce a match. Using "||" will have | ||
| 221 | the "prev_state" test happen for the "sched_switch" event and the "success" | ||
| 222 | test happen for the "sched_wakeup" event. | ||
| 223 | |||
| 224 | |||
| 225 | ------------------------------------------ | ||
| 226 | # trace-cmd report -w -F 'sched_switch, sched_wakeup.*' | ||
| 227 | [...] | ||
| 228 | trace-cmd-16130 [003] 158131.580616: sched_wakeup: comm=trace-cmd pid=16131 prio=120 success=1 target_cpu=003 | ||
| 229 | trace-cmd-16129 [000] 158131.581502: sched_switch: prev_comm=trace-cmd prev_pid=16129 prev_prio=120 prev_state=S ==> next_comm=trace-cmd next_pid=16131 next_prio=120 Latency: 885.901 usecs | ||
| 230 | trace-cmd-16131 [000] 158131.582414: sched_wakeup: comm=trace-cmd pid=16129 prio=120 success=1 target_cpu=000 | ||
| 231 | trace-cmd-16132 [001] 158131.583219: sched_switch: prev_comm=trace-cmd prev_pid=16132 prev_prio=120 prev_state=S ==> next_comm=trace-cmd next_pid=16129 next_prio=120 Latency: 804.809 usecs | ||
| 232 | sleep-16133 [002] 158131.584121: sched_wakeup: comm=trace-cmd pid=16120 prio=120 success=1 target_cpu=002 | ||
| 233 | trace-cmd-16129 [001] 158131.584128: sched_wakeup: comm=trace-cmd pid=16132 prio=120 success=1 target_cpu=001 | ||
| 234 | sleep-16133 [002] 158131.584275: sched_switch: prev_comm=sleep prev_pid=16133 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=16120 next_prio=120 Latency: 153.915 usecs | ||
| 235 | trace-cmd-16130 [003] 158131.585284: sched_switch: prev_comm=trace-cmd prev_pid=16130 prev_prio=120 prev_state=S ==> next_comm=trace-cmd next_pid=16132 next_prio=120 Latency: 1155.677 usecs | ||
| 236 | |||
| 237 | Average wakeup latency: 26626.656 usecs | ||
| 238 | |||
| 239 | |||
| 240 | ------------------------------------------ | ||
| 241 | |||
| 242 | The above trace produces the wakeup latencies of the tasks. The "sched_switch" | ||
| 243 | event reports each individual latency after writing the event information. | ||
| 244 | At the end of the report, the average wakeup latency is reported. | ||
| 245 | |||
| 246 | ------------------------------------------ | ||
| 247 | # trace-cmd report -w -F 'sched_switch, sched_wakeup.*: prio < 100 || next_prio < 100' | ||
| 248 | <idle>-0 [003] 158131.516753: sched_wakeup: comm=ksoftirqd/3 pid=13 prio=49 success=1 target_cpu=003 | ||
| 249 | <idle>-0 [003] 158131.516855: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/3 next_pid=13 next_prio=49 Latency: 101.244 usecs | ||
| 250 | <idle>-0 [003] 158131.533781: sched_wakeup: comm=ksoftirqd/3 pid=13 prio=49 success=1 target_cpu=003 | ||
| 251 | <idle>-0 [003] 158131.533897: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/3 next_pid=13 next_prio=49 Latency: 115.608 usecs | ||
| 252 | <idle>-0 [003] 158131.569730: sched_wakeup: comm=ksoftirqd/3 pid=13 prio=49 success=1 target_cpu=003 | ||
| 253 | <idle>-0 [003] 158131.569851: sched_switch: prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/3 next_pid=13 next_prio=49 Latency: 121.024 usecs | ||
| 254 | |||
| 255 | Average wakeup latency: 110.021 usecs | ||
| 256 | |||
| 257 | |||
| 258 | ------------------------------------------ | ||
| 259 | |||
| 260 | The above version will only show the wakeups and context switches of Real Time | ||
| 261 | tasks. The 'prio' used inside the kernel starts at 0 for highest priority. | ||
| 262 | That is 'prio' 0 is equivalent to user space real time priority 99, and | ||
| 263 | priority 98 is quivalent to user space real time priority 1. | ||
| 264 | Prios less than 100 represent Real Time tasks. | ||
| 265 | |||
| 266 | |||
| 267 | SEE ALSO | ||
| 268 | -------- | ||
| 269 | trace-cmd(1), trace-cmd-record(1), trace-cmd-start(1), trace-cmd-stop(1), | ||
| 270 | trace-cmd-extract(1), trace-cmd-reset(1), trace-cmd-split(1), | ||
| 271 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 272 | |||
| 273 | AUTHOR | ||
| 274 | ------ | ||
| 275 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 276 | |||
| 277 | RESOURCES | ||
| 278 | --------- | ||
| 279 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 280 | |||
| 281 | COPYING | ||
| 282 | ------- | ||
| 283 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 284 | the terms of the GNU Public License (GPL). | ||
| 285 | |||
diff --git a/Documentation/trace-cmd-reset.txt b/Documentation/trace-cmd-reset.txt new file mode 100644 index 0000000..0473e1d --- /dev/null +++ b/Documentation/trace-cmd-reset.txt | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | TRACE-CMD-RESET(1) | ||
| 2 | ================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-reset - turn off all Ftrace tracing to bring back full performance | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd reset* ['OPTIONS'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) reset command turns off all tracing of Ftrace. This will | ||
| 15 | bring back the performance of the system before tracing was enabled. This is | ||
| 16 | necessary since 'trace-cmd-record(1)', 'trace-cmd-stop(1)' and | ||
| 17 | 'trace-cmd-extract(1)' do not disable the tracer, event after the data has | ||
| 18 | been pulled from the buffers. The rational is that the user may want to | ||
| 19 | manually enable the tracer with the Ftrace pseudo file sytem, or examine other | ||
| 20 | parts of Ftrace to see what trace-cmd did. After the reset command happens, | ||
| 21 | the data in the ring buffer, and the options that were used are all lost. | ||
| 22 | |||
| 23 | OPTIONS | ||
| 24 | ------- | ||
| 25 | *-b* 'buffer_size':: | ||
| 26 | When the kernel boots, the Ftrace ring buffer is of a miminal size (3 | ||
| 27 | pages per CPU). The first time the tracer is used, the ring buffer size | ||
| 28 | expands to what it was set for (default 1.4 Megs per CPU). | ||
| 29 | |||
| 30 | If no more tracing is to be done, this option allows you to shrink the | ||
| 31 | ring buffer down to free up available memory. | ||
| 32 | |||
| 33 | trace-cmd reset -b 1 | ||
| 34 | |||
| 35 | |||
| 36 | SEE ALSO | ||
| 37 | -------- | ||
| 38 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 39 | trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-split(1), | ||
| 40 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 41 | |||
| 42 | AUTHOR | ||
| 43 | ------ | ||
| 44 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 45 | |||
| 46 | RESOURCES | ||
| 47 | --------- | ||
| 48 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 49 | |||
| 50 | COPYING | ||
| 51 | ------- | ||
| 52 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 53 | the terms of the GNU Public License (GPL). | ||
| 54 | |||
diff --git a/Documentation/trace-cmd-split.txt b/Documentation/trace-cmd-split.txt new file mode 100644 index 0000000..43d6df3 --- /dev/null +++ b/Documentation/trace-cmd-split.txt | |||
| @@ -0,0 +1,98 @@ | |||
| 1 | TRACE-CMD-SPLIT(1) | ||
| 2 | ================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-split - split a trace.dat file into smaller files | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd split* ['OPTIONS'] ['start-time' ['end-time']] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) split is used to break up a trace.dat into small files. | ||
| 15 | The 'start-time' specifies where the new file will start at. Using | ||
| 16 | 'trace-cmd-report(1)' and copying the time stamp given at a particular event, | ||
| 17 | can be used as input for either 'start-time' or 'end-time'. The split will | ||
| 18 | stop creating files when it reaches an event after 'end-time'. If only the | ||
| 19 | end-time is needed, use 0.0 as the start-time. | ||
| 20 | |||
| 21 | If start-time is left out, then the split will start at the beginning of the | ||
| 22 | file. If end-time is left out, then split will continue to the end unless it | ||
| 23 | meets one of the reqirements specified by the options. | ||
| 24 | |||
| 25 | OPTIONS | ||
| 26 | ------- | ||
| 27 | *-i* 'file':: | ||
| 28 | If this option is not specified, then the split command will look for the | ||
| 29 | file named 'trace.dat'. This options will allow the reading of another | ||
| 30 | file other than 'trace.dat'. | ||
| 31 | |||
| 32 | *-o* 'file':: | ||
| 33 | By default, the split command will use the input file name as a basis of | ||
| 34 | where to write the split files. The output file will be the input file | ||
| 35 | with an attached \'.#\' to the end: trace.dat.1, trace.dat.2, etc. | ||
| 36 | |||
| 37 | This option will change the name of the base file used. | ||
| 38 | |||
| 39 | -o file will create file.1, file.2, etc. | ||
| 40 | |||
| 41 | *-s* 'seconds':: | ||
| 42 | This specifies how many seconds should be recorded before the new file | ||
| 43 | should stop. | ||
| 44 | |||
| 45 | *-m* 'milliseconds':: | ||
| 46 | This specifies how many milliseconds should be recorded before the new | ||
| 47 | file should stop. | ||
| 48 | |||
| 49 | *-u* 'microseconds':: | ||
| 50 | This specifies how many microseconds should be recorded before the new | ||
| 51 | file should stop. | ||
| 52 | |||
| 53 | *-e* 'events':: | ||
| 54 | This specifies how many events should be recorded before the new file | ||
| 55 | should stop. | ||
| 56 | |||
| 57 | *-p* 'pages':: | ||
| 58 | This specifies the number of pages that should be recorded before the new | ||
| 59 | file should stop. | ||
| 60 | |||
| 61 | Note: only one of *-p*, *-e*, *-u*, *-m*, *-s* may be specified at a time. | ||
| 62 | |||
| 63 | *-r*:: | ||
| 64 | This option causes the break up to repeat until end-time is reached (or | ||
| 65 | end of the input if end-time is not specified). | ||
| 66 | |||
| 67 | trace-cmd split -r -e 10000 | ||
| 68 | |||
| 69 | This will break up trace.dat into serval smaller files, each with at most | ||
| 70 | 10,000 events in it. | ||
| 71 | |||
| 72 | *-c*:: | ||
| 73 | This option causes the above break up to be per CPU. | ||
| 74 | |||
| 75 | trace-cmd split -c -p 10 | ||
| 76 | |||
| 77 | This will create a file that has 10 pages per each CPU from the input. | ||
| 78 | |||
| 79 | |||
| 80 | SEE ALSO | ||
| 81 | -------- | ||
| 82 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 83 | trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-reset(1), | ||
| 84 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 85 | |||
| 86 | AUTHOR | ||
| 87 | ------ | ||
| 88 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 89 | |||
| 90 | RESOURCES | ||
| 91 | --------- | ||
| 92 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 93 | |||
| 94 | COPYING | ||
| 95 | ------- | ||
| 96 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 97 | the terms of the GNU Public License (GPL). | ||
| 98 | |||
diff --git a/Documentation/trace-cmd-start.txt b/Documentation/trace-cmd-start.txt new file mode 100644 index 0000000..3264abf --- /dev/null +++ b/Documentation/trace-cmd-start.txt | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | TRACE-CMD-START(1) | ||
| 2 | =================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-start - start the Ftrace Linux kernel tracer without recording | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd start* ['OPTIONS'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) start enables all the Ftrace tracing the same way | ||
| 15 | trace-cmd-record(1) does. The difference is that it does not run threads to | ||
| 16 | create a trace.dat file. This is useful just to enable Ftrace and you are only | ||
| 17 | interested in the trace after some event has occurred and the trace is | ||
| 18 | stopped. Then the trace can be read straight from the Ftrace pseudo file | ||
| 19 | system or can be extracted with trace-cmd-extract(1). | ||
| 20 | |||
| 21 | OPTIONS | ||
| 22 | ------- | ||
| 23 | The options are the same as 'trace-cmd-record(1)', except that it does not | ||
| 24 | take options specific to recording (*-s*, *-o*, *-F*, *-N*, and *-t*). | ||
| 25 | |||
| 26 | SEE ALSO | ||
| 27 | -------- | ||
| 28 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-stop(1), | ||
| 29 | trace-cmd-extract(1), trace-cmd-reset(1), trace-cmd-split(1), | ||
| 30 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 31 | |||
| 32 | AUTHOR | ||
| 33 | ------ | ||
| 34 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 35 | |||
| 36 | RESOURCES | ||
| 37 | --------- | ||
| 38 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 39 | |||
| 40 | COPYING | ||
| 41 | ------- | ||
| 42 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 43 | the terms of the GNU Public License (GPL). | ||
| 44 | |||
diff --git a/Documentation/trace-cmd-stop.txt b/Documentation/trace-cmd-stop.txt new file mode 100644 index 0000000..c401af1 --- /dev/null +++ b/Documentation/trace-cmd-stop.txt | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | TRACE-CMD-STOP(1) | ||
| 2 | =================== | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd-stop - stop the Ftrace Linux kernel tracer from writing to the ring | ||
| 7 | buffer. | ||
| 8 | |||
| 9 | SYNOPSIS | ||
| 10 | -------- | ||
| 11 | *trace-cmd stop* | ||
| 12 | |||
| 13 | DESCRIPTION | ||
| 14 | ----------- | ||
| 15 | The trace-cmd(1) stop is a complement to 'trace-cmd-start(1)'. This will | ||
| 16 | disable Ftrace from writing to the ring buffer. This does not stop the | ||
| 17 | overhead that the tracing may incur. Only the updating of the ring buffer is | ||
| 18 | disabled, the Ftrace tracing may still be inducing overhead. | ||
| 19 | |||
| 20 | After stopping the trace, the 'trace-cmd-extract(1)' may strip out the data | ||
| 21 | from the ring buffer and create a trace.dat file. The Ftrace pseudo file | ||
| 22 | system may also be examined. | ||
| 23 | |||
| 24 | To disable the tracing completely to remove the overhead it causes, use | ||
| 25 | 'trace-cmd-reset(1)'. But after a reset is performed, the data that has been | ||
| 26 | recorded is lost. | ||
| 27 | |||
| 28 | SEE ALSO | ||
| 29 | -------- | ||
| 30 | trace-cmd(1), trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 31 | trace-cmd-extract(1), trace-cmd-reset(1), trace-cmd-split(1), | ||
| 32 | trace-cmd-list(1), trace-cmd-listen(1) | ||
| 33 | |||
| 34 | AUTHOR | ||
| 35 | ------ | ||
| 36 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 37 | |||
| 38 | RESOURCES | ||
| 39 | --------- | ||
| 40 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 41 | |||
| 42 | COPYING | ||
| 43 | ------- | ||
| 44 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 45 | the terms of the GNU Public License (GPL). | ||
| 46 | |||
diff --git a/Documentation/trace-cmd.txt b/Documentation/trace-cmd.txt new file mode 100644 index 0000000..6a02cbe --- /dev/null +++ b/Documentation/trace-cmd.txt | |||
| @@ -0,0 +1,73 @@ | |||
| 1 | TRACE-CMD(1) | ||
| 2 | ============ | ||
| 3 | |||
| 4 | NAME | ||
| 5 | ---- | ||
| 6 | trace-cmd - interacts with Ftrace Linux kernel internal tracer | ||
| 7 | |||
| 8 | SYNOPSIS | ||
| 9 | -------- | ||
| 10 | *trace-cmd* 'COMMAND' ['OPTIONS'] | ||
| 11 | |||
| 12 | DESCRIPTION | ||
| 13 | ----------- | ||
| 14 | The trace-cmd(1) command interacts with the Ftrace tracer that is built inside | ||
| 15 | the Linux kernel. It intefaces with the Ftrace specific files found in the | ||
| 16 | debugfs file system under the tracing directory. A 'COMMAND' must be | ||
| 17 | specified to tell trace-cmd what to do. | ||
| 18 | |||
| 19 | |||
| 20 | COMMANDS | ||
| 21 | -------- | ||
| 22 | |||
| 23 | record - record a live trace and write a trace.dat file to the | ||
| 24 | local disk or to the network. | ||
| 25 | |||
| 26 | report - reads a trace.dat file and converts the binary data to a | ||
| 27 | ASCII text readable format. | ||
| 28 | |||
| 29 | start - start the tracing without recording to a trace.dat file. | ||
| 30 | |||
| 31 | stop - stop tracing (only disables recording, overhead of tracer | ||
| 32 | is still in effect) | ||
| 33 | |||
| 34 | extract - extract the data from the kernel buffer and create a trace.dat | ||
| 35 | file. | ||
| 36 | |||
| 37 | reset - disables all tracing and gives back the system performance. | ||
| 38 | (clears all data from the kernel buffers) | ||
| 39 | |||
| 40 | split - splits a trace.dat file into smaller files. | ||
| 41 | |||
| 42 | list - list the available plugins or events that can be recorded. | ||
| 43 | |||
| 44 | listen - open up a port to listen for remote tracing connections. | ||
| 45 | |||
| 46 | |||
| 47 | OPTIONS | ||
| 48 | ------- | ||
| 49 | |||
| 50 | *-h, --help:: | ||
| 51 | Displace the help text. | ||
| 52 | |||
| 53 | Other options see the man page for the corresponding command. | ||
| 54 | |||
| 55 | SEE ALSO | ||
| 56 | -------- | ||
| 57 | trace-cmd-record(1), trace-cmd-report(1), trace-cmd-start(1), | ||
| 58 | trace-cmd-stop(1), trace-cmd-extract(1), trace-cmd-reset(1), | ||
| 59 | trace-cmd-split(1), trace-cmd-list(1), trace-cmd-listen(1) | ||
| 60 | |||
| 61 | AUTHOR | ||
| 62 | ------ | ||
| 63 | Written by Steven Rostedt, <rostedt@goodmis.org> | ||
| 64 | |||
| 65 | RESOURCES | ||
| 66 | --------- | ||
| 67 | git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git | ||
| 68 | |||
| 69 | COPYING | ||
| 70 | ------- | ||
| 71 | Copyright \(C) 2010 Red Hat, Inc. Free use of this software is granted under | ||
| 72 | the terms of the GNU Public License (GPL). | ||
| 73 | |||
