mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
There could be different types of memory in the system. E.g normal System Memory, Persistent Memory. To understand how the workload maps to those memories, it's important to know the I/O statistics of them. Perf can collect physical addresses, but those are raw data. It still needs extra work to resolve the physical addresses. Provide a script to facilitate the physical addresses resolving and I/O statistics. Profile with MEM_INST_RETIRED.ALL_LOADS or MEM_UOPS_RETIRED.ALL_LOADS event if any of them is available. Look up the /proc/iomem and resolve the physical address. Provide memory type summary. Here is an example output: # perf script report mem-phys-addr Event: mem_inst_retired.all_loads:P Memory type count percentage ---------------------------------------- ----------- ----------- System RAM 74 53.2% Persistent Memory 55 39.6% N/A --- Changes since V2: - Apply the new license rules. - Add comments for globals Changes since V1: - Do not mix DLA and Load Latency. Do not compare the loads and stores. Only profile the loads. - Use event name to replace the RAW event Signed-off-by: Kan Liang <[email protected]> Reviewed-by: Andi Kleen <[email protected]> Cc: Dan Williams <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Philippe Ombredanne <[email protected]> Cc: Stephane Eranian <[email protected]> Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
20 lines
464 B
Bash
20 lines
464 B
Bash
#!/bin/bash
|
|
|
|
#
|
|
# Profiling physical memory by all retired load instructions/uops event
|
|
# MEM_INST_RETIRED.ALL_LOADS or MEM_UOPS_RETIRED.ALL_LOADS
|
|
#
|
|
|
|
load=`perf list | grep mem_inst_retired.all_loads`
|
|
if [ -z "$load" ]; then
|
|
load=`perf list | grep mem_uops_retired.all_loads`
|
|
fi
|
|
if [ -z "$load" ]; then
|
|
echo "There is no event to count all retired load instructions/uops."
|
|
exit 1
|
|
fi
|
|
|
|
arg=$(echo $load | tr -d ' ')
|
|
arg="$arg:P"
|
|
perf record --phys-data -e $arg $@
|