【发布时间】:2015-03-03 20:11:37
【问题描述】:
我一直在尝试使用 linux perf 工具对程序中的内存访问进行采样。具体来说,我使用perf mem 命令来检测程序中的负载:
perf mem -t load rec myprogram
perf mem -t load rep
但是,我想提高采样频率并收集更多样本。但是我没有找到控制采样频率的perf mem 命令的任何选项。
问题
- 在运行
perf mem时,是否有一个选项可以让我控制采样频率? - 默认的采样频率是多少?
- 有没有比
perf mem更好的选项来检测程序中的内存访问?我专门为每个采样加载操作寻找以下数据位 - (i) 目标数据地址 (ii) 以及加载是否导致 L1/L2/LLC 缓存命中。
【问题讨论】:
-
PEBS 是记录内存访问地址的好变体,但仍然很复杂。还有另一种方法(不是那么精确)——用二进制检测模拟缓存访问;它的工具 - valgrind 的 cachegrind valgrind.org/docs/manual/cg-manual.html。它使用与真实硬件不同的缓存来模拟自己的缓存层次结构;而且速度很慢(减速 10-20 倍)。但是使用仪器,它具有所有数据访问地址。
-
PS:根据最近的
perf mem record实现代码:tomoyo.sourceforge.jp/cgi-bin/lxr/source/tools/perf/… 它可以将选项传递给perf record(通过rec_argvcmd_record(i, rec_argv, NULL);)。如果它拒绝这样做,您可以破解 perf 的源代码,在 builtin-mem 中为mem_options添加新选项。
标签: linux caching memory instrumentation perf