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.

OPTIONS
-------
-D::
--dump-raw-trace::
        Dump raw trace in ASCII.

-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.

-f::
--force::
       Don't complain, do it.

--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 (default is delta).
        See COMPARISON METHODS section for more info.

-p::
--period::
        Show period values for both compared hist entries.

-F::
--formula::
        Show formula for given computation.

-o::
--order::
       Specify compute sorting column number.

--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.

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.

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 suplied weights in the the '-c' option
    behind ':' separator like '-c wdiff:1,2'.
    - WIEGHT-A being the weight of the data file
    - WIEGHT-B being the weight of the baseline data file

SEE ALSO
--------
linkperf:perf-record[1], linkperf:perf-report[1]
