linux - linux perf 是否准确测量多线程 C 程序的缓存未命中?
问题描述
linux perf 可以测量多线程程序的缓存未命中,还是只能报告主线程的结果?我在使用 pthread 的 C 程序上使用它,似乎缓存未命中数低于预期数。
解决方案
是的,perf stat
是所有线程的准确总数。(除非您的 CPU 有错误,其中某个 PMU 事件计数过多或过少。这些确实会发生,而不是实际架构状态的正确性错误,因此请检查勘误表,也就是英特尔 CPU 的“规格更新”。)
不过,请确保您准确了解每个缓存事件的重要性,例如,L1d-missesl1d.replacement
在像 Skylake 这样的现代英特尔上很重要,因此同一行上的多个未命中只是一个替代品。(Linux perf 如何计算缓存引用和缓存未命中事件)。
另请注意,如果内存可以跟上,硬件预取可以避免大量顺序访问的未命中。还相关:L2 取指未命中率远高于 L1 取指未命中率
也相关:mem_load_uops_retired.l3_miss 和 offcore_response.demand_data_rd.l3_miss.local_dram 事件之间的差异详细介绍了这些特定事件的确切数量。
推荐阅读
- git-log - 我正在尝试从 Grgit 日志中获取提交正文,这可能吗?
- python - Python 点击在帮助页面中显示模块版本
- c# - 实现相互使用的类型化接口的问题
- arrays - 如何在 ngFor 中将数组拆分为四个项目?
- javascript - 如何将此 svg 包含在反应组件中?
- node.js - 在 node.js 中 require 如何与 new 一起工作?
- tensorflow - TensorFlow 调试选项
- html - 如何使 Flexbox 在 safari 10 中正常工作
- reporting-services - SSRS 报告自定义排序行
- java - Windows Server 2016 中的字符集不显示法语字符