linux - 用于识别最易受内存性能影响的应用数据/代码的工具

标签 linux memory profiling

上下文:
-- 运行 Linux 的嵌入式平台带有一些静态 RAM,据说比其余 RAM(动态)快 3 倍。这种快速存储器的容量为512kB,正式名称为eSRAM。 (细节对这篇文章不重要:伽利略板,关于 eSRAM 和相关内核 API 的信息:https://communities.intel.com/servlet/JiveServlet/previewBody/22488-102-1-26046/Quark_SWDevManLx_330235_001.pdf)
-- 在内核的一些支持下,应用程序可以使用 eSRAM——一个简单的驱动程序,代表它分配内核内存,用 eSRAM 覆盖内存(这是在物理空间中完成的)并将其映射到应用程序的虚拟内存空间.这已经过测试并确认可以按预期工作。

问题:
确定应用程序数据(可能还有代码)的哪些部分映射到 eSRAM 以实现最佳性能增益。需要合适的分析工具。

经过一番搜索后,我不确定是否有任何现有工具真正适合这项任务。目前我最好的选择是开发一个专门的 Valgrind 工具。但也许生态系统中已经有一些东西可以开始了。任何建议/信息都是受欢迎的,例如,一种工具是部分适合等。

附言
完整的分析可能应该考虑很多因素,例如:
-- 内存访问模式(缓存性能)
-- 随时间变化(可以考虑 eSRAM 分页)
...

最佳答案

我看过 Valgrind Cachegrind。它可以收集有关数据缓存读取和数据缓存写入的数据。 cg_annotate 可以为您的程序报告逐行计数。在您的程序中找到导致大多数数据缓存操作的变量,并以这种方式识别可以从移动到快速内存中获益最多的数据,这对您有用吗? http://valgrind.org/docs/manual/cg-manual.html#cg-manual.line-by-line

您可能对 D 缓存读取 (Dr) 和 D 缓存写入 (Dw) 甚至 (Dr+Dw) 感兴趣。通过这种方式,您可以在代码中找到一个执行最多 (Dr+Dw) 的位置,并尝试在您的快速内存中移动这个位置。

关于linux - 用于识别最易受内存性能影响的应用数据/代码的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780834/

相关文章:

linux - Linux 4.4 中的 entry_64.S 和相关的 .S 文件在哪里?

regex - Perl One Liner 解析正则表达式中的多个条件

python - 在 GPU 上运行时使用 TensorFlow 内存 : why does it look like not all memory is used?

.net - 用于分析 .NET 程序函数执行时间的工具

javascript - Firefox 是否允许使用 "aggregated"火焰图分析 JS 应用程序?

c++ - 由于配置文件部分之外的代码,使用clock_gettime()进行不合理的时间测量

linux - 如何从命令行发送电子邮件?

linux - 为什么在子进程中忽略信号SIGABRT

c - 指针与堆中内存的关系

java - swisscom cloud foundry spring boot app内存不足