diff options
| author | Ingo Molnar <mingo@elte.hu> | 2010-12-02 05:20:11 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-12-02 05:20:11 -0500 |
| commit | e4b546a3643fbfc510d5ef7db538e4d3ab00effb (patch) | |
| tree | 315d13bdb2dfb1149e44c85043c9d02dc7db219d | |
| parent | b3d006c0e745bfd2dab4984ffe3279d5cf4e926a (diff) | |
| parent | d7470b6afca85ed4388fff57fc9d89f5a3be02ff (diff) | |
Merge branch 'perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux-2.6 into perf/core
| -rw-r--r-- | tools/perf/Documentation/perf-annotate.txt | 37 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-buildid-list.txt | 3 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-diff.txt | 19 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-kvm.txt | 8 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-lock.txt | 15 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-probe.txt | 2 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-record.txt | 17 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-report.txt | 49 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-sched.txt | 18 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-script.txt | 7 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-stat.txt | 39 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-test.txt | 2 | ||||
| -rw-r--r-- | tools/perf/Documentation/perf-top.txt | 28 | ||||
| -rw-r--r-- | tools/perf/builtin-diff.c | 2 | ||||
| -rw-r--r-- | tools/perf/builtin-stat.c | 146 |
15 files changed, 324 insertions, 68 deletions
diff --git a/tools/perf/Documentation/perf-annotate.txt b/tools/perf/Documentation/perf-annotate.txt index b2c63309a651..6f5a498608b2 100644 --- a/tools/perf/Documentation/perf-annotate.txt +++ b/tools/perf/Documentation/perf-annotate.txt | |||
| @@ -24,12 +24,47 @@ OPTIONS | |||
| 24 | --input=:: | 24 | --input=:: |
| 25 | Input file name. (default: perf.data) | 25 | Input file name. (default: perf.data) |
| 26 | 26 | ||
| 27 | -d:: | ||
| 28 | --dsos=<dso[,dso...]>:: | ||
| 29 | Only consider symbols in these dsos. | ||
| 30 | -s:: | ||
| 31 | --symbol=<symbol>:: | ||
| 32 | Symbol to annotate. | ||
| 33 | |||
| 34 | -f:: | ||
| 35 | --force:: | ||
| 36 | Don't complain, do it. | ||
| 37 | |||
| 38 | -v:: | ||
| 39 | --verbose:: | ||
| 40 | Be more verbose. (Show symbol address, etc) | ||
| 41 | |||
| 42 | -D:: | ||
| 43 | --dump-raw-trace:: | ||
| 44 | Dump raw trace in ASCII. | ||
| 45 | |||
| 46 | -k:: | ||
| 47 | --vmlinux=<file>:: | ||
| 48 | vmlinux pathname. | ||
| 49 | |||
| 50 | -m:: | ||
| 51 | --modules:: | ||
| 52 | Load module symbols. WARNING: use only with -k and LIVE kernel. | ||
| 53 | |||
| 54 | -l:: | ||
| 55 | --print-line:: | ||
| 56 | Print matching source lines (may be slow). | ||
| 57 | |||
| 58 | -P:: | ||
| 59 | --full-paths:: | ||
| 60 | Don't shorten the displayed pathnames. | ||
| 61 | |||
| 27 | --stdio:: Use the stdio interface. | 62 | --stdio:: Use the stdio interface. |
| 28 | 63 | ||
| 29 | --tui:: Use the TUI interface Use of --tui requires a tty, if one is not | 64 | --tui:: Use the TUI interface Use of --tui requires a tty, if one is not |
| 30 | present, as when piping to other commands, the stdio interface is | 65 | present, as when piping to other commands, the stdio interface is |
| 31 | used. This interfaces starts by centering on the line with more | 66 | used. This interfaces starts by centering on the line with more |
| 32 | samples, TAB/UNTAB cycles thru the lines with more samples. | 67 | samples, TAB/UNTAB cycles through the lines with more samples. |
| 33 | 68 | ||
| 34 | SEE ALSO | 69 | SEE ALSO |
| 35 | -------- | 70 | -------- |
diff --git a/tools/perf/Documentation/perf-buildid-list.txt b/tools/perf/Documentation/perf-buildid-list.txt index 01b642c0bf8f..5eaac6f26d51 100644 --- a/tools/perf/Documentation/perf-buildid-list.txt +++ b/tools/perf/Documentation/perf-buildid-list.txt | |||
| @@ -18,6 +18,9 @@ perf report. | |||
| 18 | 18 | ||
| 19 | OPTIONS | 19 | OPTIONS |
| 20 | ------- | 20 | ------- |
| 21 | -H:: | ||
| 22 | --with-hits:: | ||
| 23 | Show only DSOs with hits. | ||
| 21 | -i:: | 24 | -i:: |
| 22 | --input=:: | 25 | --input=:: |
| 23 | Input file name. (default: perf.data) | 26 | Input file name. (default: perf.data) |
diff --git a/tools/perf/Documentation/perf-diff.txt b/tools/perf/Documentation/perf-diff.txt index 20d97d84ea1c..6a9ec2b35310 100644 --- a/tools/perf/Documentation/perf-diff.txt +++ b/tools/perf/Documentation/perf-diff.txt | |||
| @@ -19,6 +19,18 @@ If no parameters are passed it will assume perf.data.old and perf.data. | |||
| 19 | 19 | ||
| 20 | OPTIONS | 20 | OPTIONS |
| 21 | ------- | 21 | ------- |
| 22 | -M:: | ||
| 23 | --displacement:: | ||
| 24 | Show position displacement relative to baseline. | ||
| 25 | |||
| 26 | -D:: | ||
| 27 | --dump-raw-trace:: | ||
| 28 | Dump raw trace in ASCII. | ||
| 29 | |||
| 30 | -m:: | ||
| 31 | --modules:: | ||
| 32 | Load module symbols. WARNING: use only with -k and LIVE kernel | ||
| 33 | |||
| 22 | -d:: | 34 | -d:: |
| 23 | --dsos=:: | 35 | --dsos=:: |
| 24 | Only consider symbols in these dsos. CSV that understands | 36 | Only consider symbols in these dsos. CSV that understands |
| @@ -42,7 +54,7 @@ OPTIONS | |||
| 42 | --field-separator=:: | 54 | --field-separator=:: |
| 43 | 55 | ||
| 44 | Use a special separator character and don't pad with spaces, replacing | 56 | Use a special separator character and don't pad with spaces, replacing |
| 45 | all occurances of this separator in symbol names (and other output) | 57 | all occurrences of this separator in symbol names (and other output) |
| 46 | with a '.' character, that thus it's the only non valid separator. | 58 | with a '.' character, that thus it's the only non valid separator. |
| 47 | 59 | ||
| 48 | -v:: | 60 | -v:: |
| @@ -50,6 +62,11 @@ OPTIONS | |||
| 50 | Be verbose, for instance, show the raw counts in addition to the | 62 | Be verbose, for instance, show the raw counts in addition to the |
| 51 | diff. | 63 | diff. |
| 52 | 64 | ||
| 65 | -f:: | ||
| 66 | --force:: | ||
| 67 | Don't complain, do it. | ||
| 68 | |||
| 69 | |||
| 53 | SEE ALSO | 70 | SEE ALSO |
| 54 | -------- | 71 | -------- |
| 55 | linkperf:perf-record[1] | 72 | linkperf:perf-record[1] |
diff --git a/tools/perf/Documentation/perf-kvm.txt b/tools/perf/Documentation/perf-kvm.txt index d004e19fe6d6..dd84cb2f0a88 100644 --- a/tools/perf/Documentation/perf-kvm.txt +++ b/tools/perf/Documentation/perf-kvm.txt | |||
| @@ -22,7 +22,7 @@ There are a couple of variants of perf kvm: | |||
| 22 | a performance counter profile of guest os in realtime | 22 | a performance counter profile of guest os in realtime |
| 23 | of an arbitrary workload. | 23 | of an arbitrary workload. |
| 24 | 24 | ||
| 25 | 'perf kvm record <command>' to record the performance couinter profile | 25 | 'perf kvm record <command>' to record the performance counter profile |
| 26 | of an arbitrary workload and save it into a perf data file. If both | 26 | of an arbitrary workload and save it into a perf data file. If both |
| 27 | --host and --guest are input, the perf data file name is perf.data.kvm. | 27 | --host and --guest are input, the perf data file name is perf.data.kvm. |
| 28 | If there is no --host but --guest, the file name is perf.data.guest. | 28 | If there is no --host but --guest, the file name is perf.data.guest. |
| @@ -40,6 +40,12 @@ There are a couple of variants of perf kvm: | |||
| 40 | 40 | ||
| 41 | OPTIONS | 41 | OPTIONS |
| 42 | ------- | 42 | ------- |
| 43 | -i:: | ||
| 44 | --input=:: | ||
| 45 | Input file name. | ||
| 46 | -o:: | ||
| 47 | --output:: | ||
| 48 | Output file name. | ||
| 43 | --host=:: | 49 | --host=:: |
| 44 | Collect host side performance profile. | 50 | Collect host side performance profile. |
| 45 | --guest=:: | 51 | --guest=:: |
diff --git a/tools/perf/Documentation/perf-lock.txt b/tools/perf/Documentation/perf-lock.txt index b317102138c8..921de259ea10 100644 --- a/tools/perf/Documentation/perf-lock.txt +++ b/tools/perf/Documentation/perf-lock.txt | |||
| @@ -24,6 +24,21 @@ and statistics with this 'perf lock' command. | |||
| 24 | 24 | ||
| 25 | 'perf lock report' reports statistical data. | 25 | 'perf lock report' reports statistical data. |
| 26 | 26 | ||
| 27 | OPTIONS | ||
| 28 | ------- | ||
| 29 | |||
| 30 | -i:: | ||
| 31 | --input=<file>:: | ||
| 32 | Input file name. | ||
| 33 | |||
| 34 | -v:: | ||
| 35 | --verbose:: | ||
| 36 | Be more verbose (show symbol address, etc). | ||
| 37 | |||
| 38 | -D:: | ||
| 39 | --dump-raw-trace:: | ||
| 40 | Dump raw trace in ASCII. | ||
| 41 | |||
| 27 | SEE ALSO | 42 | SEE ALSO |
| 28 | -------- | 43 | -------- |
| 29 | linkperf:perf[1] | 44 | linkperf:perf[1] |
diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt index 62de1b7f4e76..4e2323276984 100644 --- a/tools/perf/Documentation/perf-probe.txt +++ b/tools/perf/Documentation/perf-probe.txt | |||
| @@ -115,7 +115,7 @@ Each probe argument follows below syntax. | |||
| 115 | 115 | ||
| 116 | LINE SYNTAX | 116 | LINE SYNTAX |
| 117 | ----------- | 117 | ----------- |
| 118 | Line range is descripted by following syntax. | 118 | Line range is described by following syntax. |
| 119 | 119 | ||
| 120 | "FUNC[:RLN[+NUM|-RLN2]]|SRC:ALN[+NUM|-ALN2]" | 120 | "FUNC[:RLN[+NUM|-RLN2]]|SRC:ALN[+NUM|-ALN2]" |
| 121 | 121 | ||
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt index a91f9f9e6e5c..0ad1bc75ab49 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt | |||
| @@ -39,15 +39,24 @@ OPTIONS | |||
| 39 | be passed as follows: '\mem:addr[:[r][w][x]]'. | 39 | be passed as follows: '\mem:addr[:[r][w][x]]'. |
| 40 | If you want to profile read-write accesses in 0x1000, just set | 40 | If you want to profile read-write accesses in 0x1000, just set |
| 41 | 'mem:0x1000:rw'. | 41 | 'mem:0x1000:rw'. |
| 42 | |||
| 43 | --filter=<filter>:: | ||
| 44 | Event filter. | ||
| 45 | |||
| 42 | -a:: | 46 | -a:: |
| 43 | System-wide collection. | 47 | --all-cpus:: |
| 48 | System-wide collection from all CPUs. | ||
| 44 | 49 | ||
| 45 | -l:: | 50 | -l:: |
| 46 | Scale counter values. | 51 | Scale counter values. |
| 47 | 52 | ||
| 48 | -p:: | 53 | -p:: |
| 49 | --pid=:: | 54 | --pid=:: |
| 50 | Record events on existing pid. | 55 | Record events on existing process ID. |
| 56 | |||
| 57 | -t:: | ||
| 58 | --tid=:: | ||
| 59 | Record events on existing thread ID. | ||
| 51 | 60 | ||
| 52 | -r:: | 61 | -r:: |
| 53 | --realtime=:: | 62 | --realtime=:: |
| @@ -109,8 +118,8 @@ Collect raw sample records from all opened counters (default for tracepoint coun | |||
| 109 | 118 | ||
| 110 | -C:: | 119 | -C:: |
| 111 | --cpu:: | 120 | --cpu:: |
| 112 | Collect samples only on the list of cpus provided. Multiple CPUs can be provided as a | 121 | Collect samples only on the list of CPUs provided. Multiple CPUs can be provided as a |
| 113 | comma-sperated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. | 122 | comma-separated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. |
| 114 | In per-thread mode with inheritance mode on (default), samples are captured only when | 123 | In per-thread mode with inheritance mode on (default), samples are captured only when |
| 115 | the thread executes on the designated CPUs. Default is to monitor all CPUs. | 124 | the thread executes on the designated CPUs. Default is to monitor all CPUs. |
| 116 | 125 | ||
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt index 12052c9ed0ba..59a1f57f2bb7 100644 --- a/tools/perf/Documentation/perf-report.txt +++ b/tools/perf/Documentation/perf-report.txt | |||
| @@ -20,6 +20,11 @@ OPTIONS | |||
| 20 | -i:: | 20 | -i:: |
| 21 | --input=:: | 21 | --input=:: |
| 22 | Input file name. (default: perf.data) | 22 | Input file name. (default: perf.data) |
| 23 | |||
| 24 | -v:: | ||
| 25 | --verbose:: | ||
| 26 | Be more verbose. (show symbol address, etc) | ||
| 27 | |||
| 23 | -d:: | 28 | -d:: |
| 24 | --dsos=:: | 29 | --dsos=:: |
| 25 | Only consider symbols in these dsos. CSV that understands | 30 | Only consider symbols in these dsos. CSV that understands |
| @@ -27,6 +32,10 @@ OPTIONS | |||
| 27 | -n:: | 32 | -n:: |
| 28 | --show-nr-samples:: | 33 | --show-nr-samples:: |
| 29 | Show the number of samples for each symbol | 34 | Show the number of samples for each symbol |
| 35 | |||
| 36 | --showcpuutilization:: | ||
| 37 | Show sample percentage for different cpu modes. | ||
| 38 | |||
| 30 | -T:: | 39 | -T:: |
| 31 | --threads:: | 40 | --threads:: |
| 32 | Show per-thread event counters | 41 | Show per-thread event counters |
| @@ -39,12 +48,24 @@ OPTIONS | |||
| 39 | Only consider these symbols. CSV that understands | 48 | Only consider these symbols. CSV that understands |
| 40 | file://filename entries. | 49 | file://filename entries. |
| 41 | 50 | ||
| 51 | -U:: | ||
| 52 | --hide-unresolved:: | ||
| 53 | Only display entries resolved to a symbol. | ||
| 54 | |||
| 42 | -s:: | 55 | -s:: |
| 43 | --sort=:: | 56 | --sort=:: |
| 44 | Sort by key(s): pid, comm, dso, symbol, parent. | 57 | Sort by key(s): pid, comm, dso, symbol, parent. |
| 45 | 58 | ||
| 59 | -p:: | ||
| 60 | --parent=<regex>:: | ||
| 61 | regex filter to identify parent, see: '--sort parent' | ||
| 62 | |||
| 63 | -x:: | ||
| 64 | --exclude-other:: | ||
| 65 | Only display entries with parent-match. | ||
| 66 | |||
| 46 | -w:: | 67 | -w:: |
| 47 | --field-width=:: | 68 | --column-widths=<width[,width...]>:: |
| 48 | Force each column width to the provided list, for large terminal | 69 | Force each column width to the provided list, for large terminal |
| 49 | readability. | 70 | readability. |
| 50 | 71 | ||
| @@ -52,19 +73,26 @@ OPTIONS | |||
| 52 | --field-separator=:: | 73 | --field-separator=:: |
| 53 | 74 | ||
| 54 | Use a special separator character and don't pad with spaces, replacing | 75 | Use a special separator character and don't pad with spaces, replacing |
| 55 | all occurances of this separator in symbol names (and other output) | 76 | all occurrences of this separator in symbol names (and other output) |
| 56 | with a '.' character, that thus it's the only non valid separator. | 77 | with a '.' character, that thus it's the only non valid separator. |
| 57 | 78 | ||
| 79 | -D:: | ||
| 80 | --dump-raw-trace:: | ||
| 81 | Dump raw trace in ASCII. | ||
| 82 | |||
| 58 | -g [type,min]:: | 83 | -g [type,min]:: |
| 59 | --call-graph:: | 84 | --call-graph:: |
| 60 | Display callchains using type and min percent threshold. | 85 | Display call chains using type and min percent threshold. |
| 61 | type can be either: | 86 | type can be either: |
| 62 | - flat: single column, linear exposure of callchains. | 87 | - flat: single column, linear exposure of call chains. |
| 63 | - graph: use a graph tree, displaying absolute overhead rates. | 88 | - graph: use a graph tree, displaying absolute overhead rates. |
| 64 | - fractal: like graph, but displays relative rates. Each branch of | 89 | - fractal: like graph, but displays relative rates. Each branch of |
| 65 | the tree is considered as a new profiled object. + | 90 | the tree is considered as a new profiled object. + |
| 66 | Default: fractal,0.5. | 91 | Default: fractal,0.5. |
| 67 | 92 | ||
| 93 | --pretty=<key>:: | ||
| 94 | Pretty printing style. key: normal, raw | ||
| 95 | |||
| 68 | --stdio:: Use the stdio interface. | 96 | --stdio:: Use the stdio interface. |
| 69 | 97 | ||
| 70 | --tui:: Use the TUI interface, that is integrated with annotate and allows | 98 | --tui:: Use the TUI interface, that is integrated with annotate and allows |
| @@ -72,6 +100,19 @@ OPTIONS | |||
| 72 | requires a tty, if one is not present, as when piping to other | 100 | requires a tty, if one is not present, as when piping to other |
| 73 | commands, the stdio interface is used. | 101 | commands, the stdio interface is used. |
| 74 | 102 | ||
| 103 | -k:: | ||
| 104 | --vmlinux=<file>:: | ||
| 105 | vmlinux pathname | ||
| 106 | |||
| 107 | -m:: | ||
| 108 | --modules:: | ||
| 109 | Load module symbols. WARNING: This should only be used with -k and | ||
| 110 | a LIVE kernel. | ||
| 111 | |||
| 112 | -f:: | ||
| 113 | --force:: | ||
| 114 | Don't complain, do it. | ||
| 115 | |||
| 75 | SEE ALSO | 116 | SEE ALSO |
| 76 | -------- | 117 | -------- |
| 77 | linkperf:perf-stat[1] | 118 | linkperf:perf-stat[1] |
diff --git a/tools/perf/Documentation/perf-sched.txt b/tools/perf/Documentation/perf-sched.txt index 8417644a6166..46822d5fde1c 100644 --- a/tools/perf/Documentation/perf-sched.txt +++ b/tools/perf/Documentation/perf-sched.txt | |||
| @@ -8,11 +8,11 @@ perf-sched - Tool to trace/measure scheduler properties (latencies) | |||
| 8 | SYNOPSIS | 8 | SYNOPSIS |
| 9 | -------- | 9 | -------- |
| 10 | [verse] | 10 | [verse] |
| 11 | 'perf sched' {record|latency|replay|trace} | 11 | 'perf sched' {record|latency|map|replay|trace} |
| 12 | 12 | ||
| 13 | DESCRIPTION | 13 | DESCRIPTION |
| 14 | ----------- | 14 | ----------- |
| 15 | There are four variants of perf sched: | 15 | There are five variants of perf sched: |
| 16 | 16 | ||
| 17 | 'perf sched record <command>' to record the scheduling events | 17 | 'perf sched record <command>' to record the scheduling events |
| 18 | of an arbitrary workload. | 18 | of an arbitrary workload. |
| @@ -30,8 +30,22 @@ There are four variants of perf sched: | |||
| 30 | of the workload as it occurred when it was recorded - and can repeat | 30 | of the workload as it occurred when it was recorded - and can repeat |
| 31 | it a number of times, measuring its performance.) | 31 | it a number of times, measuring its performance.) |
| 32 | 32 | ||
| 33 | 'perf sched map' to print a textual context-switching outline of | ||
| 34 | workload captured via perf sched record. Columns stand for | ||
| 35 | individual CPUs, and the two-letter shortcuts stand for tasks that | ||
| 36 | are running on a CPU. A '*' denotes the CPU that had the event, and | ||
| 37 | a dot signals an idle CPU. | ||
| 38 | |||
| 33 | OPTIONS | 39 | OPTIONS |
| 34 | ------- | 40 | ------- |
| 41 | -i:: | ||
| 42 | --input=<file>:: | ||
| 43 | Input file name. (default: perf.data) | ||
| 44 | |||
| 45 | -v:: | ||
| 46 | --verbose:: | ||
| 47 | Be more verbose. (show symbol address, etc) | ||
| 48 | |||
| 35 | -D:: | 49 | -D:: |
| 36 | --dump-raw-trace=:: | 50 | --dump-raw-trace=:: |
| 37 | Display verbose dump of the sched data. | 51 | Display verbose dump of the sched data. |
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt index f442acc105bc..29ad94293cd2 100644 --- a/tools/perf/Documentation/perf-script.txt +++ b/tools/perf/Documentation/perf-script.txt | |||
| @@ -104,6 +104,13 @@ OPTIONS | |||
| 104 | normally don't - this option allows the latter to be run in | 104 | normally don't - this option allows the latter to be run in |
| 105 | system-wide mode. | 105 | system-wide mode. |
| 106 | 106 | ||
| 107 | -i:: | ||
| 108 | --input=:: | ||
| 109 | Input file name. | ||
| 110 | |||
| 111 | -d:: | ||
| 112 | --debug-mode:: | ||
| 113 | Do various checks like samples ordering and lost events. | ||
| 107 | 114 | ||
| 108 | SEE ALSO | 115 | SEE ALSO |
| 109 | -------- | 116 | -------- |
diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt index c405bcad6ac7..b6da7affbbee 100644 --- a/tools/perf/Documentation/perf-stat.txt +++ b/tools/perf/Documentation/perf-stat.txt | |||
| @@ -8,8 +8,8 @@ perf-stat - Run a command and gather performance counter statistics | |||
| 8 | SYNOPSIS | 8 | SYNOPSIS |
| 9 | -------- | 9 | -------- |
| 10 | [verse] | 10 | [verse] |
| 11 | 'perf stat' [-e <EVENT> | --event=EVENT] [-S] [-a] <command> | 11 | 'perf stat' [-e <EVENT> | --event=EVENT] [-a] <command> |
| 12 | 'perf stat' [-e <EVENT> | --event=EVENT] [-S] [-a] -- <command> [<options>] | 12 | 'perf stat' [-e <EVENT> | --event=EVENT] [-a] -- <command> [<options>] |
| 13 | 13 | ||
| 14 | DESCRIPTION | 14 | DESCRIPTION |
| 15 | ----------- | 15 | ----------- |
| @@ -35,21 +35,33 @@ OPTIONS | |||
| 35 | child tasks do not inherit counters | 35 | child tasks do not inherit counters |
| 36 | -p:: | 36 | -p:: |
| 37 | --pid=<pid>:: | 37 | --pid=<pid>:: |
| 38 | stat events on existing pid | 38 | stat events on existing process id |
| 39 | |||
| 40 | -t:: | ||
| 41 | --tid=<tid>:: | ||
| 42 | stat events on existing thread id | ||
| 43 | |||
| 39 | 44 | ||
| 40 | -a:: | 45 | -a:: |
| 41 | system-wide collection | 46 | --all-cpus:: |
| 47 | system-wide collection from all CPUs | ||
| 42 | 48 | ||
| 43 | -c:: | 49 | -c:: |
| 44 | scale counter values | 50 | --scale:: |
| 51 | scale/normalize counter values | ||
| 52 | |||
| 53 | -r:: | ||
| 54 | --repeat=<n>:: | ||
| 55 | repeat command and print average + stddev (max: 100) | ||
| 45 | 56 | ||
| 46 | -B:: | 57 | -B:: |
| 58 | --big-num:: | ||
| 47 | print large numbers with thousands' separators according to locale | 59 | print large numbers with thousands' separators according to locale |
| 48 | 60 | ||
| 49 | -C:: | 61 | -C:: |
| 50 | --cpu=:: | 62 | --cpu=:: |
| 51 | Count only on the list of cpus provided. Multiple CPUs can be provided as a | 63 | Count only on the list of CPUs provided. Multiple CPUs can be provided as a |
| 52 | comma-sperated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. | 64 | comma-separated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. |
| 53 | In per-thread mode, this option is ignored. The -a option is still necessary | 65 | In per-thread mode, this option is ignored. The -a option is still necessary |
| 54 | to activate system-wide monitoring. Default is to count on all CPUs. | 66 | to activate system-wide monitoring. Default is to count on all CPUs. |
| 55 | 67 | ||
| @@ -58,6 +70,19 @@ to activate system-wide monitoring. Default is to count on all CPUs. | |||
| 58 | Do not aggregate counts across all monitored CPUs in system-wide mode (-a). | 70 | Do not aggregate counts across all monitored CPUs in system-wide mode (-a). |
| 59 | This option is only valid in system-wide mode. | 71 | This option is only valid in system-wide mode. |
| 60 | 72 | ||
| 73 | -n:: | ||
| 74 | --null:: | ||
| 75 | null run - don't start any counters | ||
| 76 | |||
| 77 | -v:: | ||
| 78 | --verbose:: | ||
| 79 | be more verbose (show counter open errors, etc) | ||
| 80 | |||
| 81 | -x SEP:: | ||
| 82 | --field-separator SEP:: | ||
| 83 | print counts using a CSV-style output to make it easy to import directly into | ||
| 84 | spreadsheets. Columns are separated by the string specified in SEP. | ||
| 85 | |||
| 61 | EXAMPLES | 86 | EXAMPLES |
| 62 | -------- | 87 | -------- |
| 63 | 88 | ||
diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentation/perf-test.txt index 1c4b5f5b7f71..2c3b462f64b0 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt | |||
| @@ -12,7 +12,7 @@ SYNOPSIS | |||
| 12 | 12 | ||
| 13 | DESCRIPTION | 13 | DESCRIPTION |
| 14 | ----------- | 14 | ----------- |
| 15 | This command does assorted sanity tests, initially thru linked routines but | 15 | This command does assorted sanity tests, initially through linked routines but |
| 16 | also will look for a directory with more tests in the form of scripts. | 16 | also will look for a directory with more tests in the form of scripts. |
| 17 | 17 | ||
| 18 | OPTIONS | 18 | OPTIONS |
diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt index 1f9687663f2a..f6eb1cdafb77 100644 --- a/tools/perf/Documentation/perf-top.txt +++ b/tools/perf/Documentation/perf-top.txt | |||
| @@ -12,7 +12,7 @@ SYNOPSIS | |||
| 12 | 12 | ||
| 13 | DESCRIPTION | 13 | DESCRIPTION |
| 14 | ----------- | 14 | ----------- |
| 15 | This command generates and displays a performance counter profile in realtime. | 15 | This command generates and displays a performance counter profile in real time. |
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | OPTIONS | 18 | OPTIONS |
| @@ -27,8 +27,8 @@ OPTIONS | |||
| 27 | 27 | ||
| 28 | -C <cpu-list>:: | 28 | -C <cpu-list>:: |
| 29 | --cpu=<cpu>:: | 29 | --cpu=<cpu>:: |
| 30 | Monitor only on the list of cpus provided. Multiple CPUs can be provided as a | 30 | Monitor only on the list of CPUs provided. Multiple CPUs can be provided as a |
| 31 | comma-sperated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. | 31 | comma-separated list with no space: 0,1. Ranges of CPUs are specified with -: 0-2. |
| 32 | Default is to monitor all CPUS. | 32 | Default is to monitor all CPUS. |
| 33 | 33 | ||
| 34 | -d <seconds>:: | 34 | -d <seconds>:: |
| @@ -50,6 +50,10 @@ Default is to monitor all CPUS. | |||
| 50 | --count-filter=<count>:: | 50 | --count-filter=<count>:: |
| 51 | Only display functions with more events than this. | 51 | Only display functions with more events than this. |
| 52 | 52 | ||
| 53 | -g:: | ||
| 54 | --group:: | ||
| 55 | Put the counters into a counter group. | ||
| 56 | |||
| 53 | -F <freq>:: | 57 | -F <freq>:: |
| 54 | --freq=<freq>:: | 58 | --freq=<freq>:: |
| 55 | Profile at this frequency. | 59 | Profile at this frequency. |
| @@ -68,7 +72,11 @@ Default is to monitor all CPUS. | |||
| 68 | 72 | ||
| 69 | -p <pid>:: | 73 | -p <pid>:: |
| 70 | --pid=<pid>:: | 74 | --pid=<pid>:: |
| 71 | Profile events on existing pid. | 75 | Profile events on existing Process ID. |
| 76 | |||
| 77 | -t <tid>:: | ||
| 78 | --tid=<tid>:: | ||
| 79 | Profile events on existing thread ID. | ||
| 72 | 80 | ||
| 73 | -r <priority>:: | 81 | -r <priority>:: |
| 74 | --realtime=<priority>:: | 82 | --realtime=<priority>:: |
| @@ -78,6 +86,18 @@ Default is to monitor all CPUS. | |||
| 78 | --sym-annotate=<symbol>:: | 86 | --sym-annotate=<symbol>:: |
| 79 | Annotate this symbol. | 87 | Annotate this symbol. |
| 80 | 88 | ||
| 89 | -K:: | ||
| 90 | --hide_kernel_symbols:: | ||
| 91 | Hide kernel symbols. | ||
| 92 | |||
| 93 | -U:: | ||
| 94 | --hide_user_symbols:: | ||
| 95 | Hide user symbols. | ||
| 96 | |||
| 97 | -D:: | ||
| 98 | --dump-symtab:: | ||
| 99 | Dump the symbol table used for profiling. | ||
| 100 | |||
| 81 | -v:: | 101 | -v:: |
| 82 | --verbose:: | 102 | --verbose:: |
| 83 | Be more verbose (show counter open errors, etc). | 103 | Be more verbose (show counter open errors, etc). |
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index fca1d4402910..221b823bc26f 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
| @@ -173,7 +173,7 @@ static const char * const diff_usage[] = { | |||
| 173 | static const struct option options[] = { | 173 | static const struct option options[] = { |
| 174 | OPT_INCR('v', "verbose", &verbose, | 174 | OPT_INCR('v', "verbose", &verbose, |
| 175 | "be more verbose (show symbol address, etc)"), | 175 | "be more verbose (show symbol address, etc)"), |
| 176 | OPT_BOOLEAN('m', "displacement", &show_displacement, | 176 | OPT_BOOLEAN('M', "displacement", &show_displacement, |
| 177 | "Show position displacement relative to baseline"), | 177 | "Show position displacement relative to baseline"), |
| 178 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, | 178 | OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, |
| 179 | "dump raw trace in ASCII"), | 179 | "dump raw trace in ASCII"), |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 970a7f2a083d..7ff746da7e6c 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
| @@ -52,6 +52,8 @@ | |||
| 52 | #include <math.h> | 52 | #include <math.h> |
| 53 | #include <locale.h> | 53 | #include <locale.h> |
| 54 | 54 | ||
| 55 | #define DEFAULT_SEPARATOR " " | ||
| 56 | |||
| 55 | static struct perf_event_attr default_attrs[] = { | 57 | static struct perf_event_attr default_attrs[] = { |
| 56 | 58 | ||
| 57 | { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK }, | 59 | { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK }, |
| @@ -82,8 +84,11 @@ static pid_t *all_tids = NULL; | |||
| 82 | static int thread_num = 0; | 84 | static int thread_num = 0; |
| 83 | static pid_t child_pid = -1; | 85 | static pid_t child_pid = -1; |
| 84 | static bool null_run = false; | 86 | static bool null_run = false; |
| 85 | static bool big_num = false; | 87 | static bool big_num = true; |
| 88 | static int big_num_opt = -1; | ||
| 86 | static const char *cpu_list; | 89 | static const char *cpu_list; |
| 90 | static const char *csv_sep = NULL; | ||
| 91 | static bool csv_output = false; | ||
| 87 | 92 | ||
| 88 | 93 | ||
| 89 | static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; | 94 | static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; |
| @@ -449,12 +454,18 @@ static void print_noise(int counter, double avg) | |||
| 449 | static void nsec_printout(int cpu, int counter, double avg) | 454 | static void nsec_printout(int cpu, int counter, double avg) |
| 450 | { | 455 | { |
| 451 | double msecs = avg / 1e6; | 456 | double msecs = avg / 1e6; |
| 457 | char cpustr[16] = { '\0', }; | ||
| 458 | const char *fmt = csv_output ? "%s%.6f%s%s" : "%s%18.6f%s%-24s"; | ||
| 452 | 459 | ||
| 453 | if (no_aggr) | 460 | if (no_aggr) |
| 454 | fprintf(stderr, "CPU%-4d %18.6f %-24s", | 461 | sprintf(cpustr, "CPU%*d%s", |
| 455 | cpumap[cpu], msecs, event_name(counter)); | 462 | csv_output ? 0 : -4, |
| 456 | else | 463 | cpumap[cpu], csv_sep); |
| 457 | fprintf(stderr, " %18.6f %-24s", msecs, event_name(counter)); | 464 | |
| 465 | fprintf(stderr, fmt, cpustr, msecs, csv_sep, event_name(counter)); | ||
| 466 | |||
| 467 | if (csv_output) | ||
| 468 | return; | ||
| 458 | 469 | ||
| 459 | if (MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) { | 470 | if (MATCH_EVENT(SOFTWARE, SW_TASK_CLOCK, counter)) { |
| 460 | fprintf(stderr, " # %10.3f CPUs ", | 471 | fprintf(stderr, " # %10.3f CPUs ", |
| @@ -466,18 +477,26 @@ static void abs_printout(int cpu, int counter, double avg) | |||
| 466 | { | 477 | { |
| 467 | double total, ratio = 0.0; | 478 | double total, ratio = 0.0; |
| 468 | char cpustr[16] = { '\0', }; | 479 | char cpustr[16] = { '\0', }; |
| 480 | const char *fmt; | ||
| 481 | |||
| 482 | if (csv_output) | ||
| 483 | fmt = "%s%.0f%s%s"; | ||
| 484 | else if (big_num) | ||
| 485 | fmt = "%s%'18.0f%s%-24s"; | ||
| 486 | else | ||
| 487 | fmt = "%s%18.0f%s%-24s"; | ||
| 469 | 488 | ||
| 470 | if (no_aggr) | 489 | if (no_aggr) |
| 471 | sprintf(cpustr, "CPU%-4d", cpumap[cpu]); | 490 | sprintf(cpustr, "CPU%*d%s", |
| 491 | csv_output ? 0 : -4, | ||
| 492 | cpumap[cpu], csv_sep); | ||
| 472 | else | 493 | else |
| 473 | cpu = 0; | 494 | cpu = 0; |
| 474 | 495 | ||
| 475 | if (big_num) | 496 | fprintf(stderr, fmt, cpustr, avg, csv_sep, event_name(counter)); |
| 476 | fprintf(stderr, "%s %'18.0f %-24s", | 497 | |
| 477 | cpustr, avg, event_name(counter)); | 498 | if (csv_output) |
| 478 | else | 499 | return; |
| 479 | fprintf(stderr, "%s %18.0f %-24s", | ||
| 480 | cpustr, avg, event_name(counter)); | ||
| 481 | 500 | ||
| 482 | if (MATCH_EVENT(HARDWARE, HW_INSTRUCTIONS, counter)) { | 501 | if (MATCH_EVENT(HARDWARE, HW_INSTRUCTIONS, counter)) { |
| 483 | total = avg_stats(&runtime_cycles_stats[cpu]); | 502 | total = avg_stats(&runtime_cycles_stats[cpu]); |
| @@ -515,8 +534,9 @@ static void print_counter_aggr(int counter) | |||
| 515 | int scaled = event_scaled[counter]; | 534 | int scaled = event_scaled[counter]; |
| 516 | 535 | ||
| 517 | if (scaled == -1) { | 536 | if (scaled == -1) { |
| 518 | fprintf(stderr, " %18s %-24s\n", | 537 | fprintf(stderr, "%*s%s%-24s\n", |
| 519 | "<not counted>", event_name(counter)); | 538 | csv_output ? 0 : 18, |
| 539 | "<not counted>", csv_sep, event_name(counter)); | ||
| 520 | return; | 540 | return; |
| 521 | } | 541 | } |
| 522 | 542 | ||
| @@ -525,6 +545,11 @@ static void print_counter_aggr(int counter) | |||
| 525 | else | 545 | else |
| 526 | abs_printout(-1, counter, avg); | 546 | abs_printout(-1, counter, avg); |
| 527 | 547 | ||
| 548 | if (csv_output) { | ||
| 549 | fputc('\n', stderr); | ||
| 550 | return; | ||
| 551 | } | ||
| 552 | |||
| 528 | print_noise(counter, avg); | 553 | print_noise(counter, avg); |
| 529 | 554 | ||
| 530 | if (scaled) { | 555 | if (scaled) { |
| @@ -554,8 +579,12 @@ static void print_counter(int counter) | |||
| 554 | ena = cpu_counts[cpu][counter].ena; | 579 | ena = cpu_counts[cpu][counter].ena; |
| 555 | run = cpu_counts[cpu][counter].run; | 580 | run = cpu_counts[cpu][counter].run; |
| 556 | if (run == 0 || ena == 0) { | 581 | if (run == 0 || ena == 0) { |
| 557 | fprintf(stderr, "CPU%-4d %18s %-24s", cpumap[cpu], | 582 | fprintf(stderr, "CPU%*d%s%*s%s%-24s", |
| 558 | "<not counted>", event_name(counter)); | 583 | csv_output ? 0 : -4, |
| 584 | cpumap[cpu], csv_sep, | ||
| 585 | csv_output ? 0 : 18, | ||
| 586 | "<not counted>", csv_sep, | ||
| 587 | event_name(counter)); | ||
| 559 | 588 | ||
| 560 | fprintf(stderr, "\n"); | 589 | fprintf(stderr, "\n"); |
| 561 | continue; | 590 | continue; |
| @@ -566,11 +595,13 @@ static void print_counter(int counter) | |||
| 566 | else | 595 | else |
| 567 | abs_printout(cpu, counter, val); | 596 | abs_printout(cpu, counter, val); |
| 568 | 597 | ||
| 569 | print_noise(counter, 1.0); | 598 | if (!csv_output) { |
| 599 | print_noise(counter, 1.0); | ||
| 570 | 600 | ||
| 571 | if (run != ena) { | 601 | if (run != ena) { |
| 572 | fprintf(stderr, " (scaled from %.2f%%)", | 602 | fprintf(stderr, " (scaled from %.2f%%)", |
| 573 | 100.0 * run / ena); | 603 | 100.0 * run / ena); |
| 604 | } | ||
| 574 | } | 605 | } |
| 575 | fprintf(stderr, "\n"); | 606 | fprintf(stderr, "\n"); |
| 576 | } | 607 | } |
| @@ -582,21 +613,23 @@ static void print_stat(int argc, const char **argv) | |||
| 582 | 613 | ||
| 583 | fflush(stdout); | 614 | fflush(stdout); |
| 584 | 615 | ||
| 585 | fprintf(stderr, "\n"); | 616 | if (!csv_output) { |
| 586 | fprintf(stderr, " Performance counter stats for "); | 617 | fprintf(stderr, "\n"); |
| 587 | if(target_pid == -1 && target_tid == -1) { | 618 | fprintf(stderr, " Performance counter stats for "); |
| 588 | fprintf(stderr, "\'%s", argv[0]); | 619 | if(target_pid == -1 && target_tid == -1) { |
| 589 | for (i = 1; i < argc; i++) | 620 | fprintf(stderr, "\'%s", argv[0]); |
| 590 | fprintf(stderr, " %s", argv[i]); | 621 | for (i = 1; i < argc; i++) |
| 591 | } else if (target_pid != -1) | 622 | fprintf(stderr, " %s", argv[i]); |
| 592 | fprintf(stderr, "process id \'%d", target_pid); | 623 | } else if (target_pid != -1) |
| 593 | else | 624 | fprintf(stderr, "process id \'%d", target_pid); |
| 594 | fprintf(stderr, "thread id \'%d", target_tid); | 625 | else |
| 626 | fprintf(stderr, "thread id \'%d", target_tid); | ||
| 595 | 627 | ||
| 596 | fprintf(stderr, "\'"); | 628 | fprintf(stderr, "\'"); |
| 597 | if (run_count > 1) | 629 | if (run_count > 1) |
| 598 | fprintf(stderr, " (%d runs)", run_count); | 630 | fprintf(stderr, " (%d runs)", run_count); |
| 599 | fprintf(stderr, ":\n\n"); | 631 | fprintf(stderr, ":\n\n"); |
| 632 | } | ||
| 600 | 633 | ||
| 601 | if (no_aggr) { | 634 | if (no_aggr) { |
| 602 | for (counter = 0; counter < nr_counters; counter++) | 635 | for (counter = 0; counter < nr_counters; counter++) |
| @@ -606,15 +639,17 @@ static void print_stat(int argc, const char **argv) | |||
| 606 | print_counter_aggr(counter); | 639 | print_counter_aggr(counter); |
| 607 | } | 640 | } |
| 608 | 641 | ||
| 609 | fprintf(stderr, "\n"); | 642 | if (!csv_output) { |
| 610 | fprintf(stderr, " %18.9f seconds time elapsed", | 643 | fprintf(stderr, "\n"); |
| 611 | avg_stats(&walltime_nsecs_stats)/1e9); | 644 | fprintf(stderr, " %18.9f seconds time elapsed", |
| 612 | if (run_count > 1) { | 645 | avg_stats(&walltime_nsecs_stats)/1e9); |
| 613 | fprintf(stderr, " ( +- %7.3f%% )", | 646 | if (run_count > 1) { |
| 647 | fprintf(stderr, " ( +- %7.3f%% )", | ||
| 614 | 100*stddev_stats(&walltime_nsecs_stats) / | 648 | 100*stddev_stats(&walltime_nsecs_stats) / |
| 615 | avg_stats(&walltime_nsecs_stats)); | 649 | avg_stats(&walltime_nsecs_stats)); |
| 650 | } | ||
| 651 | fprintf(stderr, "\n\n"); | ||
| 616 | } | 652 | } |
| 617 | fprintf(stderr, "\n\n"); | ||
| 618 | } | 653 | } |
| 619 | 654 | ||
| 620 | static volatile int signr = -1; | 655 | static volatile int signr = -1; |
| @@ -644,6 +679,13 @@ static const char * const stat_usage[] = { | |||
| 644 | NULL | 679 | NULL |
| 645 | }; | 680 | }; |
| 646 | 681 | ||
| 682 | static int stat__set_big_num(const struct option *opt __used, | ||
| 683 | const char *s __used, int unset) | ||
| 684 | { | ||
| 685 | big_num_opt = unset ? 0 : 1; | ||
| 686 | return 0; | ||
| 687 | } | ||
| 688 | |||
| 647 | static const struct option options[] = { | 689 | static const struct option options[] = { |
| 648 | OPT_CALLBACK('e', "event", NULL, "event", | 690 | OPT_CALLBACK('e', "event", NULL, "event", |
| 649 | "event selector. use 'perf list' to list available events", | 691 | "event selector. use 'perf list' to list available events", |
| @@ -664,12 +706,15 @@ static const struct option options[] = { | |||
| 664 | "repeat command and print average + stddev (max: 100)"), | 706 | "repeat command and print average + stddev (max: 100)"), |
| 665 | OPT_BOOLEAN('n', "null", &null_run, | 707 | OPT_BOOLEAN('n', "null", &null_run, |
| 666 | "null run - dont start any counters"), | 708 | "null run - dont start any counters"), |
| 667 | OPT_BOOLEAN('B', "big-num", &big_num, | 709 | OPT_CALLBACK_NOOPT('B', "big-num", NULL, NULL, |
| 668 | "print large numbers with thousands\' separators"), | 710 | "print large numbers with thousands\' separators", |
| 711 | stat__set_big_num), | ||
| 669 | OPT_STRING('C', "cpu", &cpu_list, "cpu", | 712 | OPT_STRING('C', "cpu", &cpu_list, "cpu", |
| 670 | "list of cpus to monitor in system-wide"), | 713 | "list of cpus to monitor in system-wide"), |
| 671 | OPT_BOOLEAN('A', "no-aggr", &no_aggr, | 714 | OPT_BOOLEAN('A', "no-aggr", &no_aggr, |
| 672 | "disable CPU count aggregation"), | 715 | "disable CPU count aggregation"), |
| 716 | OPT_STRING('x', "field-separator", &csv_sep, "separator", | ||
| 717 | "print counts with custom separator"), | ||
| 673 | OPT_END() | 718 | OPT_END() |
| 674 | }; | 719 | }; |
| 675 | 720 | ||
| @@ -682,6 +727,25 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) | |||
| 682 | 727 | ||
| 683 | argc = parse_options(argc, argv, options, stat_usage, | 728 | argc = parse_options(argc, argv, options, stat_usage, |
| 684 | PARSE_OPT_STOP_AT_NON_OPTION); | 729 | PARSE_OPT_STOP_AT_NON_OPTION); |
| 730 | |||
| 731 | if (csv_sep) | ||
| 732 | csv_output = true; | ||
| 733 | else | ||
| 734 | csv_sep = DEFAULT_SEPARATOR; | ||
| 735 | |||
| 736 | /* | ||
| 737 | * let the spreadsheet do the pretty-printing | ||
| 738 | */ | ||
| 739 | if (csv_output) { | ||
| 740 | /* User explicitely passed -B? */ | ||
| 741 | if (big_num_opt == 1) { | ||
| 742 | fprintf(stderr, "-B option not supported with -x\n"); | ||
| 743 | usage_with_options(stat_usage, options); | ||
| 744 | } else /* Nope, so disable big number formatting */ | ||
| 745 | big_num = false; | ||
| 746 | } else if (big_num_opt == 0) /* User passed --no-big-num */ | ||
| 747 | big_num = false; | ||
| 748 | |||
| 685 | if (!argc && target_pid == -1 && target_tid == -1) | 749 | if (!argc && target_pid == -1 && target_tid == -1) |
| 686 | usage_with_options(stat_usage, options); | 750 | usage_with_options(stat_usage, options); |
| 687 | if (run_count <= 0) | 751 | if (run_count <= 0) |
