perf-mem(1)
===========

NAME
----
perf-mem - Profile memory accesses

SYNOPSIS
--------
[verse]
'perf mem' [<options>] (record [<command>] | report)

DESCRIPTION
-----------
"perf mem record" runs a command and gathers memory operation data
from it, into perf.data. Perf record options are accepted and are passed through.

"perf mem report" displays the result. It invokes perf report with the
right set of options to display a memory access profile. By default, loads
and stores are sampled. Use the -t option to limit to loads or stores.

Note that on Intel systems the memory latency reported is the use-latency,
not the pure load (or store latency). Use latency includes any pipeline
queuing delays in addition to the memory subsystem latency.

On Arm64 this uses SPE to sample load and store operations, therefore hardware
and kernel support is required. See linkperf:perf-arm-spe[1] for a setup guide.
Due to the statistical nature of SPE sampling, not every memory operation will
be sampled.

On AMD this use IBS Op PMU to sample load-store operations.

COMMON OPTIONS
--------------
-f::
--force::
	Don't do ownership validation

-t::
--type=<type>::
	Select the memory operation type: load or store (default: load,store)

-v::
--verbose::
	Be more verbose (show counter open errors, etc)

-p::
--phys-data::
	Record/Report sample physical addresses

--data-page-size::
	Record/Report sample data address page size

RECORD OPTIONS
--------------
<command>...::
	Any command you can specify in a shell.

-e::
--event <event>::
	Event selector. Use 'perf mem record -e list' to list available events.

-K::
--all-kernel::
	Configure all used events to run in kernel space.

-U::
--all-user::
	Configure all used events to run in user space.

--ldlat <n>::
	Specify desired latency for loads event. Supported on Intel, Arm64 and
	some AMD processors. Ignored on other archs.

	On supported AMD processors:
	- /sys/bus/event_source/devices/ibs_op/caps/ldlat file contains '1'.
	- Supported latency values are 128 to 2048 (both inclusive).
	- Latency value which is a multiple of 128 incurs a little less profiling
	  overhead compared to other values.
	- Load latency filtering is disabled by default.

REPORT OPTIONS
--------------
-i::
--input=<file>::
	Input file name.

-C::
--cpu=<cpu>::
	Monitor only on 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 -
	like 0-2. Default is to monitor all CPUS.

-D::
--dump-raw-samples::
	Dump the raw decoded samples on the screen in a format that is easy to parse with
	one sample per line.

-s::
--sort=<key>::
	Group result by given key(s) - multiple keys can be specified
	in CSV format.  The keys are specific to memory samples are:
	symbol_daddr, symbol_iaddr, dso_daddr, locked, tlb, mem, snoop,
	dcacheline, phys_daddr, data_page_size, blocked.

	- symbol_daddr: name of data symbol being executed on at the time of sample
	- symbol_iaddr: name of code symbol being executed on at the time of sample
	- dso_daddr: name of library or module containing the data being executed
	             on at the time of the sample
	- locked: whether the bus was locked at the time of the sample
	- tlb: type of tlb access for the data at the time of the sample
	- mem: type of memory access for the data at the time of the sample
	- snoop: type of snoop (if any) for the data at the time of the sample
	- dcacheline: the cacheline the data address is on at the time of the sample
	- phys_daddr: physical address of data being executed on at the time of sample
	- data_page_size: the data page size of data being executed on at the time of sample
	- blocked: reason of blocked load access for the data at the time of the sample

	And the default sort keys are changed to local_weight, mem, sym, dso,
	symbol_daddr, dso_daddr, snoop, tlb, locked, blocked, local_ins_lat.

-F::
--fields=::
	Specify output field - multiple keys can be specified in CSV format.
	Please see linkperf:perf-report[1] for details.

	In addition to the default fields, 'perf mem report' will provide the
	following fields to break down sample periods.

	- op: operation in the sample instruction (load, store, prefetch, ...)
	- cache: location in CPU cache (L1, L2, ...) where the sample hit
	- mem: location in memory or other places the sample hit
	- dtlb: location in Data TLB (L1, L2) where the sample hit
	- snoop: snoop result for the sampled data access

	Please take a look at the OUTPUT FIELD SELECTION section for caveats.

-T::
--type-profile::
	Show data-type profile result instead of code symbols.  This requires
	the debug information and it will change the default sort keys to:
	mem, snoop, tlb, type.

-U::
--hide-unresolved::
	Only display entries resolved to a symbol.

-x::
--field-separator=<separator>::
	Specify the field separator used when dump raw samples (-D option). By default,
	The separator is the space character.

In addition, for report all perf report options are valid, and for record
all perf record options.

OVERHEAD CALCULATION
--------------------
Unlike linkperf:perf-report[1], which calculates overhead from the actual
sample period, perf-mem overhead is calculated using sample weight. E.g.
there are two samples in perf.data file, both with the same sample period,
but one sample with weight 180 and the other with weight 20:

  $ perf script -F period,data_src,weight,ip,sym
  100000    629080842 |OP LOAD|LVL L3 hit|...     20       7e69b93ca524 strcmp
  100000   1a29081042 |OP LOAD|LVL RAM hit|...   180   ffffffff82429168 memcpy

  $ perf report -F overhead,symbol
  50%   [.] strcmp
  50%   [k] memcpy

  $ perf mem report -F overhead,symbol
  90%   [k] memcpy
  10%   [.] strcmp

OUTPUT FIELD SELECTION
----------------------
"perf mem report" adds a number of new output fields specific to data source
information in the sample.  Some of them have the same name with the existing
sort keys ("mem" and "snoop").  So unlike other fields and sort keys, they'll
behave differently when it's used by -F/--fields or -s/--sort.

Using those two as output fields will aggregate samples altogether and show
breakdown.

  $ perf mem report -F mem,snoop
  ...
  # ------ Memory -------  --- Snoop ----
  #     RAM Uncach  Other     HitM  Other
  # .....................  ..............
  #
       3.5%   0.0%  96.5%    25.1%  74.9%

But using the same name for sort keys will aggregate samples for each type
separately.

  $ perf mem report -s mem,snoop
  # Overhead       Samples  Memory access                            Snoop
  # ........  ............  .......................................  ............
  #
      47.99%          1509  L2 hit                                   N/A
      25.08%           338  core, same node Any cache hit            HitM
      10.24%         54374  N/A                                      N/A
       6.77%         35938  L1 hit                                   N/A
       6.39%           101  core, same node Any cache hit            N/A
       3.50%            69  RAM hit                                  N/A
       0.03%           158  LFB/MAB hit                              N/A
       0.00%             2  Uncached hit                             N/A

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