我找到了 Clements 博士的 mtrace。虽然它很有用,但在我需要的情况下它不能正常工作。我打算使用记录来了解不同场景中的内存访问模式。

有人可以分享相关经验吗?任何建议将不胜感激。

0313 更新了 :
我正在尝试使用 qemu-mtrace 通过 linux-mtrace(3.8.0) 启动 ubuntu 16.04,
但它只显示几个错误消息并终止。希望某些工具能够记录每次访问。

$ ./qemu-system-x86_64 -mtrace-enable -mtrace-file mtrace.out -hda ubuntu.img -m 1024
Error: mtrace_entry_ascope (exit, syscall:xx) with no stack tag!
mtrace_entry_register: mtrace_host_addr failed (10)
mtrace_inst_exec: bad call 140734947607728
Aborted (core dumped)

最佳答案

有为 实现的 perf mem 工具,一些 现代 x86/EM64T CPU(可能仅适用于 Intel;Ivy 和更新的台式机/服务器 CPU)。 perf mem 的手册页是 http://man7.org/linux/man-pages/man1/perf-mem.1.html 和内核文档目录中的相同文本: http://lxr.free-electrons.com/source/tools/perf/Documentation/perf-mem.txt 。文字不完整;最好的文档是来源:tools/perf/builtin-mem.c 和部分在 tools/perf/builtin-report.c 中。 https://perf.wiki.kernel.org/index.php/Tutorial 中没有详细信息。

qemu-mtrace 不同的是,它不会记录每一次内存访问,而是只记录每第 N 次访问,其中 N 类似于 10000 或 100000。但它以 native 速度和低开销工作。使用 perf mem record ./program 记录模式;尝试为某些 CPU 内核的系统范围或全局采样添加 -a-C cpulist。没有办法从系统内部记录(跟踪)所有和每个内存访问(工具应该将信息写入内存并记录此访问 - 这是有限内存的无限递归),但是有非常昂贵的专有系统特定外部跟踪解决方案,如 JTAG 或 SDRAM 嗅探器(5000 美元或更多)。
perf mem的工具是2013年左右添加的(3.10版本的linux kernel),在lwn上搜索perf mem有几个结果:https://lwn.net/Articles/531766/



添加了物理地址采样支持:https://lwn.net/Articles/555890/ ( perf mem --phys-addr -t load rec ); (也有一些相关的 2016 年 c2c 性能工具“跟踪缓存线争用”:https://lwn.net/Articles/704125/ 和示例 https://joemario.github.io/blog/2016/09/01/c2c-blog/ )
perf mem 上的一些随机幻灯片:

  • http://indico.cern.ch/event/280897/contributions/1628882/attachments/515361/711133/SE-CERN_PMU_workshop_2013.pdf#page=4
  • http://www.linuxtag.org/2013/fileadmin/www.linuxtag.org/slides/Arnaldo_Melo_-_Linux__perf__tools__Overview_and_Current_Developments.e323.pdf#page=10
  • https://people.netfilter.org/pablo/netdev0.1/slides/sowa-perf-analytics.pdf#page=19

  • 关于解码 perf mem -D report 的一些信息:perf mem -D report



    (由与此答案相同的用户回答)



    还可以进行排序以获得一些基本统计信息:perf mem rep --sort=mem - http://thread.gmane.org/gmane.linux.kernel.perf.user/1438

    其他工具.. 有(慢)cachegrind 模拟器 基于 valgrind 用于模拟用户空间程序的缓存内存 - https://lwn.net/Articles/257209/ 的“7.2 模拟 CPU 缓存”。也应该有一些与 DRAMsim/DRAMsim2 相关的低级(最慢)模型 http://eng.umd.edu/~blj/dramsim/

    关于linux - 记录内存访问足迹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42748490/

    10-13 08:01