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

Posted

技术标签:

【中文标题】用于识别最易受内存性能影响的应用程序数据/代码的工具【英文标题】:Tool to identify app's data/code most susceptible to memory performance 【发布时间】:2014-09-11 06:45:26 【问题描述】:

上下文: -- 运行 Linux 的嵌入式平台,带有一些静态 RAM,它被声明为比其余 RAM(动态)快 3 倍。这个快速内存的大小是512kB,正式名称是eSRAM。 (本文不重要的细节:Galileo 板,有关 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 可以为您的程序报告Line-by-line Counts。在您的程序中查找导致大多数数据缓存操作的变量并以这种方式识别最能从移动到快速内存中受益的数据是否对您有用? valgrind.org/docs/manual/cg-manual.html#cg-manual.line-by-line 这是一个非常好的指针!我还没有深入研究 Cachegrind,但你是绝对正确的!基本上我感兴趣的是缓存未命中,如果我可以将它们与源中的数据对齐,那么它看起来正是我需要的信息。所以也许解决方案是 Cachegrind 和一些后处理。非常感谢您的评论! 可能你对D cache reads(博士)和D cache writes(博士),甚至(博士+博士)感兴趣。通过这种方式,您可以在代码中找到一个功能最多的位置(Dr+Dw),并尝试在您的快速记忆中移动这个位置。 或者更确切地说,D1mr+D1mw 正是我感兴趣的。甚至 C*D1mr+D1mw 具有一些系数,因为读取未命中可能成本更高。 平台上的缓存是 16kB 统一(I 和 D)单级缓存,具有 16B 行(如果我得到了正确的文档communities.intel.com/servlet/JiveServlet/previewBody/…)。因此,通过将 eSRAM 用于关键数据/代码,有望有所改进。 【参考方案1】:

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

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

【讨论】:

以上是关于用于识别最易受内存性能影响的应用程序数据/代码的工具的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]年度网络攻击大调查:SSH端口最易受网络攻击,HTTPS其次!

应用易受 Intent 重定向问题的影响

Firefox曝音频数据处理内存越界漏洞CVE-2018-5146/47

Drupal 站点存在 Symfony 缺陷易受攻击 建议立即修复

行人检测数据集

OCR场景文本识别(SCR)中各模块性能比较