logging内存访问占用空间

我发现了Dr.Clements的mtrace 。 虽然它是有用的,但在我需要的情况下,它不能正常工作。 我打算用这个logging来理解不同场景下的内存访问模式。

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

0313更新 :我试图用qemu-mtrace来启动Linux-mtrace(3.8.0)的Ubuntu 16.04,但它只显示几个错误信息并终止。 希望有一些工具能够logging每一个访问。

$ ./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) 

一些现代x86 / EM64T CPU(可能只有英特尔;常青藤和更新的桌面/服务器cpus)执行的perf mem工具。 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 &部分工具/ perf / builtin-report.c 。 没有在https://perf.wiki.kernel.org/index.php/Tutorial中的详细信息。

qemu-mtrace不同qemu-mtrace它不会记录每个内存的访问权限,但是只有每N次访问,其中N是10000或者100000。但是它可以在本地速度和低开销下工作。 使用perf mem record ./program记录模式; 尝试为某些CPU内核的系统范围或全局采样添加-a-C cpulist 。 没有办法从系统内部记录(跟踪)所有和每个存储器访问(工具应该将信息写入存储器并记录这个访问 – 这是有限存储器的无限递归),但是存在非常昂贵的专用系统特定的外部跟踪解决方案,如JTAG或SDRAM嗅探器($ 5k或更多)。

在2013年前后添加的perf mem工具(3.10版本的linux内核)中,有几个在lwn上搜索perf mem的结果: https ://lwn.net/Articles/531766/

使用此修补程序,可以对内存访问(加载,存储)进行采样(而不是跟踪)。 对于加载,指令和数据地址与延迟和数据源一起被捕获。 对于商店,指令和数据地址被捕获以及有限的缓存和TLB信息。

目前的补丁程序从Nehalem开始实施Intel处理器上的功能。 这些补丁利用PEBS负载延迟和精确存储机制。 精确商店只存在于基于Sandy Bridge和Ivy Bridge的处理器上。

增加物理地址采样支持: https : perf mem --phys-addr -t load recperf mem --phys-addr -t load rec ); (也有一些相关的2016年c2c perf工具“ 跟踪cacheline争用 ”: https : //lwn.net/Articles/704125/与例子https://joemario.github.io/blog/2016/09/01 / c2c-blog / )

perf mem上的一些随机幻灯片:

有关解码perf mem -D report一些信息: perf mem -D report

  # PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL 2054 2054 0xffffffff811186bf 0x016ffffe8fbffc804b0 49 0x68100842 /lib/modules/3.12.23/build/vmlinux:perf_event_aux_ctx 

“ADDR”,“DSRC”,“SYMBOL”是什么意思?

(由同一个用户在这个答案中回答)

  • 加载/存储指令的IP – PC;
  • SYMBOL – 功能名称,包含此指令(IP);
  • ADDR – 由加载/存储请求的数据的虚拟内存地址(如果没有–phys-data选项)
  • DSRC – “解码来源”。

还有排序来获得一些基本的统计数据: perf mem rep --sort=memhttp://thread.gmane.org/gmane.linux.kernel.perf.user/1438

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