PERF-MEM(1)
okay so bestie, welcome to PERF-MEM(1) β the perf manual page that's about to make memory profiling make sense. π
πΈ NAME πΈ
perf-mem β Profile memory accesses
π¦ SYNOPSIS π¦
perf mem [<options>] (record [<command>] | report)
π DESCRIPTION π
okay so 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. slay.
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 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:loadorstore(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. Useperf mem record -e listto 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/ldlatfile contains'1'.- Supported latency values are
128to2048(both inclusive). - Latency value which is a multiple of
128incurs a little less profiling overhead compared to other values. - Load latency filtering is disabled by default.
- On supported AMD processors:
π 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-like0-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 samplesymbol_iaddr: name of code symbol being executed on at the time of sampledso_daddr: name of library or module containing the data being executed on at the time of the samplelocked: whether the bus was locked at the time of the sampletlb: type of tlb access for the data at the time of the samplemem: type of memory access for the data at the time of the samplesnoop: type of snoop (if any) for the data at the time of the sampledcacheline: the cacheline the data address is on at the time of the samplephys_daddr: physical address of data being executed on at the time of sampledata_page_size: the data page size of data being executed on at the time of sampleblocked: 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 seeperf-report(1)for details.- In addition to the default fields,
perf mem reportwill 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 hitmem: location in memory or other places the sample hitdtlb: location in Data TLB (L1, L2) where the sample hitsnoop: snoop result for the sampled data access
- In addition to the default fields,
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 (-Doption). 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 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 π
perf-record(1), perf-report(1), perf-arm-spe(1)
Source/version: perf β date: 10/31/2026 β page: PERF-MEM(1). bye bestie, go profile some memories π
β¨
π¦ where this page comes from
- arch rolling: perf 7.3.1-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms