【问题标题】:How do I record all memory accesses of a process/file?如何记录进程/文件的所有内存访问?
【发布时间】:2014-04-06 17:13:52
【问题描述】:

为了测试缓存系统,我需要特定进程的内存访问(读取和写入)列表。缓存代码是用verilog编写的。我的应用程序用于媒体处理,但我也对其他应用程序持开放态度。到目前为止,我一直在 C++ 代码中添加地址引用以进行 PNG 解码(可在此处获得 http://lodev.org/lodepng/)...

这是一个相当乏味的过程,我正在寻找替代方案。我什至尝试破解诸如 simplescalar 之类的基准测试以及读取故障转储,但无济于事...

提前致谢!

【问题讨论】:

    标签: linux caching testing memory benchmarking


    【解决方案1】:

    只要您在 x86 上运行,您可能值得花时间研究英特尔的 Pin

    他们的手册有 an example 如何使用 Pin 来检测二进制文件以生成内存跟踪。

    【讨论】:

    • 谢谢!这正是我想要的,但我没想到的是 C++ Hello World 代码有 180000 次内存访问 :)
    • 很高兴为您提供帮助。对于 C++,我并不感到惊讶。 :p
    【解决方案2】:

    看看https://lwn.net/Articles/257209/

    一个工具是Cachegrindvalgrind 的一部分)。它很慢,但可以告诉您有关内存访问的确切统计信息,因为它在虚拟处理器上模拟您的整个程序。

    另一个工具是Oprofile。它是一个使用统计采样来获取数据的内核模块。它没有那么准确,但重量要轻得多。

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      相关资源
      最近更新 更多