检索内存和缓存未命中:可执行文件和脚本
Retrieve memory and cache misses: executables and scripts
我需要找到一些理论上很容易,但实际上很棘手的东西。
OSX 下有一堆工具,其中一些是:
- 预编译java jars,
- 预编译 可以生成和调用其他程序的可执行文件,
- bash/python/perl 调用一些预编译可执行文件的脚本,
我需要查找和分类内存和缓存事件。我所说的预编译是指我无法访问源代码。
详细我需要找出总体占用内存、页面错误和虚拟内存事件,但更重要的是,L1/L2/L3缓存未命中 。这意味着我还需要跟踪所有生成的进程,而不仅仅是主程序。
欢迎任何提示!
我认为您应该使用 Valgrind。要获得内存使用情况的完整报告:
valgrind --tool=massif --stacks=yes
这将为您提供堆和堆栈内存使用情况。那么信息都存储在文件massif.out.????你可以阅读
ms_print massif.out.??????
我已经在上面写了一个 post:
Valgrind 还记录缓存事件,它为您提供缓存未命中和缓存事件的完整详细输出:
valgrind --tool=cachegrind prog
然后关于地块,你有一个工具可以读取详细的输出:
cg_annotate <filename>
请参阅完整的 documentation 以了解输出。
选项 --trace-children=yes 允许分析生成的 child
我需要找到一些理论上很容易,但实际上很棘手的东西。
OSX 下有一堆工具,其中一些是:
- 预编译java jars,
- 预编译 可以生成和调用其他程序的可执行文件,
- bash/python/perl 调用一些预编译可执行文件的脚本,
我需要查找和分类内存和缓存事件。我所说的预编译是指我无法访问源代码。
详细我需要找出总体占用内存、页面错误和虚拟内存事件,但更重要的是,L1/L2/L3缓存未命中 。这意味着我还需要跟踪所有生成的进程,而不仅仅是主程序。
欢迎任何提示!
我认为您应该使用 Valgrind。要获得内存使用情况的完整报告:
valgrind --tool=massif --stacks=yes
这将为您提供堆和堆栈内存使用情况。那么信息都存储在文件massif.out.????你可以阅读
ms_print massif.out.??????
我已经在上面写了一个 post:
Valgrind 还记录缓存事件,它为您提供缓存未命中和缓存事件的完整详细输出:
valgrind --tool=cachegrind prog
然后关于地块,你有一个工具可以读取详细的输出:
cg_annotate <filename>
请参阅完整的 documentation 以了解输出。 选项 --trace-children=yes 允许分析生成的 child