forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
9.1 KiB
305 lines
9.1 KiB
perf-diff(1) |
|
============ |
|
|
|
NAME |
|
---- |
|
perf-diff - Read perf.data files and display the differential profile |
|
|
|
SYNOPSIS |
|
-------- |
|
[verse] |
|
'perf diff' [baseline file] [data file1] [[data file2] ... ] |
|
|
|
DESCRIPTION |
|
----------- |
|
This command displays the performance difference amongst two or more perf.data |
|
files captured via perf record. |
|
|
|
If no parameters are passed it will assume perf.data.old and perf.data. |
|
|
|
The differential profile is displayed only for events matching both |
|
specified perf.data files. |
|
|
|
If no parameters are passed the samples will be sorted by dso and symbol. |
|
As the perf.data files could come from different binaries, the symbols addresses |
|
could vary. So perf diff is based on the comparison of the files and |
|
symbols name. |
|
|
|
OPTIONS |
|
------- |
|
-D:: |
|
--dump-raw-trace:: |
|
Dump raw trace in ASCII. |
|
|
|
--kallsyms=<file>:: |
|
kallsyms pathname |
|
|
|
-m:: |
|
--modules:: |
|
Load module symbols. WARNING: use only with -k and LIVE kernel |
|
|
|
-d:: |
|
--dsos=:: |
|
Only consider symbols in these dsos. CSV that understands |
|
file://filename entries. This option will affect the percentage |
|
of the Baseline/Delta column. See --percentage for more info. |
|
|
|
-C:: |
|
--comms=:: |
|
Only consider symbols in these comms. CSV that understands |
|
file://filename entries. This option will affect the percentage |
|
of the Baseline/Delta column. See --percentage for more info. |
|
|
|
-S:: |
|
--symbols=:: |
|
Only consider these symbols. CSV that understands |
|
file://filename entries. This option will affect the percentage |
|
of the Baseline/Delta column. See --percentage for more info. |
|
|
|
-s:: |
|
--sort=:: |
|
Sort by key(s): pid, comm, dso, symbol, cpu, parent, srcline. |
|
Please see description of --sort in the perf-report man page. |
|
|
|
-t:: |
|
--field-separator=:: |
|
|
|
Use a special separator character and don't pad with spaces, replacing |
|
all occurrences of this separator in symbol names (and other output) |
|
with a '.' character, that thus it's the only non valid separator. |
|
|
|
-v:: |
|
--verbose:: |
|
Be verbose, for instance, show the raw counts in addition to the |
|
diff. |
|
|
|
-q:: |
|
--quiet:: |
|
Do not show any message. (Suppress -v) |
|
|
|
-f:: |
|
--force:: |
|
Don't do ownership validation. |
|
|
|
--symfs=<directory>:: |
|
Look for files with symbols relative to this directory. |
|
|
|
-b:: |
|
--baseline-only:: |
|
Show only items with match in baseline. |
|
|
|
-c:: |
|
--compute:: |
|
Differential computation selection - delta, ratio, wdiff, cycles, |
|
delta-abs (default is delta-abs). Default can be changed using |
|
diff.compute config option. See COMPARISON METHODS section for |
|
more info. |
|
|
|
--cycles-hist:: |
|
Report a histogram and the standard deviation for cycles data. |
|
It can help us to judge if the reported cycles data is noisy or |
|
not. This option should be used with '-c cycles'. |
|
|
|
-p:: |
|
--period:: |
|
Show period values for both compared hist entries. |
|
|
|
-F:: |
|
--formula:: |
|
Show formula for given computation. |
|
|
|
-o:: |
|
--order:: |
|
Specify compute sorting column number. 0 means sorting by baseline |
|
overhead and 1 (default) means sorting by computed value of column 1 |
|
(data from the first file other base baseline). Values more than 1 |
|
can be used only if enough data files are provided. |
|
The default value can be set using the diff.order config option. |
|
|
|
--percentage:: |
|
Determine how to display the overhead percentage of filtered entries. |
|
Filters can be applied by --comms, --dsos and/or --symbols options. |
|
|
|
"relative" means it's relative to filtered entries only so that the |
|
sum of shown entries will be always 100%. "absolute" means it retains |
|
the original value before and after the filter is applied. |
|
|
|
--time:: |
|
Analyze samples within given time window. It supports time |
|
percent with multiple time ranges. Time string is 'a%/n,b%/m,...' |
|
or 'a%-b%,c%-%d,...'. |
|
|
|
For example: |
|
|
|
Select the second 10% time slice to diff: |
|
|
|
perf diff --time 10%/2 |
|
|
|
Select from 0% to 10% time slice to diff: |
|
|
|
perf diff --time 0%-10% |
|
|
|
Select the first and the second 10% time slices to diff: |
|
|
|
perf diff --time 10%/1,10%/2 |
|
|
|
Select from 0% to 10% and 30% to 40% slices to diff: |
|
|
|
perf diff --time 0%-10%,30%-40% |
|
|
|
It also supports analyzing samples within a given time window |
|
<start>,<stop>. Times have the format seconds.nanoseconds. If 'start' |
|
is not given (i.e. time string is ',x.y') then analysis starts at |
|
the beginning of the file. If stop time is not given (i.e. time |
|
string is 'x.y,') then analysis goes to the end of the file. |
|
Multiple ranges can be separated by spaces, which requires the argument |
|
to be quoted e.g. --time "1234.567,1234.789 1235," |
|
Time string is'a1.b1,c1.d1:a2.b2,c2.d2'. Use ':' to separate timestamps |
|
for different perf.data files. |
|
|
|
For example, we get the timestamp information from 'perf script'. |
|
|
|
perf script -i perf.data.old |
|
mgen 13940 [000] 3946.361400: ... |
|
|
|
perf script -i perf.data |
|
mgen 13940 [000] 3971.150589 ... |
|
|
|
perf diff --time 3946.361400,:3971.150589, |
|
|
|
It analyzes the perf.data.old from the timestamp 3946.361400 to |
|
the end of perf.data.old and analyzes the perf.data from the |
|
timestamp 3971.150589 to the end of perf.data. |
|
|
|
--cpu:: Only diff samples for the list of CPUs provided. Multiple CPUs can |
|
be provided as a comma-separated list with no space: 0,1. Ranges of |
|
CPUs are specified with -: 0-2. Default is to report samples on all |
|
CPUs. |
|
|
|
--pid=:: |
|
Only diff samples for given process ID (comma separated list). |
|
|
|
--tid=:: |
|
Only diff samples for given thread ID (comma separated list). |
|
|
|
--stream:: |
|
Enable hot streams comparison. Stream can be a callchain which is |
|
aggregated by the branch records from samples. |
|
|
|
COMPARISON |
|
---------- |
|
The comparison is governed by the baseline file. The baseline perf.data |
|
file is iterated for samples. All other perf.data files specified on |
|
the command line are searched for the baseline sample pair. If the pair |
|
is found, specified computation is made and result is displayed. |
|
|
|
All samples from non-baseline perf.data files, that do not match any |
|
baseline entry, are displayed with empty space within baseline column |
|
and possible computation results (delta) in their related column. |
|
|
|
Example files samples: |
|
- file A with samples f1, f2, f3, f4, f6 |
|
- file B with samples f2, f4, f5 |
|
- file C with samples f1, f2, f5 |
|
|
|
Example output: |
|
x - computation takes place for pair |
|
b - baseline sample percentage |
|
|
|
- perf diff A B C |
|
|
|
baseline/A compute/B compute/C samples |
|
--------------------------------------- |
|
b x f1 |
|
b x x f2 |
|
b f3 |
|
b x f4 |
|
b f6 |
|
x x f5 |
|
|
|
- perf diff B A C |
|
|
|
baseline/B compute/A compute/C samples |
|
--------------------------------------- |
|
b x x f2 |
|
b x f4 |
|
b x f5 |
|
x x f1 |
|
x f3 |
|
x f6 |
|
|
|
- perf diff C B A |
|
|
|
baseline/C compute/B compute/A samples |
|
--------------------------------------- |
|
b x f1 |
|
b x x f2 |
|
b x f5 |
|
x f3 |
|
x x f4 |
|
x f6 |
|
|
|
COMPARISON METHODS |
|
------------------ |
|
delta |
|
~~~~~ |
|
If specified the 'Delta' column is displayed with value 'd' computed as: |
|
|
|
d = A->period_percent - B->period_percent |
|
|
|
with: |
|
- A/B being matching hist entry from data/baseline file specified |
|
(or perf.data/perf.data.old) respectively. |
|
|
|
- period_percent being the % of the hist entry period value within |
|
single data file |
|
|
|
- with filtering by -C, -d and/or -S, period_percent might be changed |
|
relative to how entries are filtered. Use --percentage=absolute to |
|
prevent such fluctuation. |
|
|
|
delta-abs |
|
~~~~~~~~~ |
|
Same as 'delta` method, but sort the result with the absolute values. |
|
|
|
ratio |
|
~~~~~ |
|
If specified the 'Ratio' column is displayed with value 'r' computed as: |
|
|
|
r = A->period / B->period |
|
|
|
with: |
|
- A/B being matching hist entry from data/baseline file specified |
|
(or perf.data/perf.data.old) respectively. |
|
|
|
- period being the hist entry period value |
|
|
|
wdiff:WEIGHT-B,WEIGHT-A |
|
~~~~~~~~~~~~~~~~~~~~~~~ |
|
If specified the 'Weighted diff' column is displayed with value 'd' computed as: |
|
|
|
d = B->period * WEIGHT-A - A->period * WEIGHT-B |
|
|
|
- A/B being matching hist entry from data/baseline file specified |
|
(or perf.data/perf.data.old) respectively. |
|
|
|
- period being the hist entry period value |
|
|
|
- WEIGHT-A/WEIGHT-B being user supplied weights in the the '-c' option |
|
behind ':' separator like '-c wdiff:1,2'. |
|
- WEIGHT-A being the weight of the data file |
|
- WEIGHT-B being the weight of the baseline data file |
|
|
|
cycles |
|
~~~~~~ |
|
If specified the '[Program Block Range] Cycles Diff' column is displayed. |
|
It displays the cycles difference of same program basic block amongst |
|
two perf.data. The program basic block is the code between two branches. |
|
|
|
'[Program Block Range]' indicates the range of a program basic block. |
|
Source line is reported if it can be found otherwise uses symbol+offset |
|
instead. |
|
|
|
SEE ALSO |
|
-------- |
|
linkperf:perf-record[1], linkperf:perf-report[1]
|
|
|