Power8 上的 PM_DATA_ALL* 和 PM_DATA* 事件有什么区别?

What is the difference between PM_DATA_ALL* and PM_DATA* events on Power8?

在使用 perf 评估 Power8 处理器的内存性能时,我遇到了理解事件 PM_DATA_ALL_*PM_DATA_* 之间差异的问题。大多数计数器在两个版本中都存在,但是 oprofile documentationpapi_native_avail 中的描述是相同的,例如:

PM_DATA_FROM_LMEM

The processor's data cache was reloaded from the local chip's Memory due to either only demand loads or demand loads plus prefetches if MMCR1[16] is 1.

虽然我会通过测量一些数据来找出差异。如果我提供的任务足够大,我可以观察到 *_ALL 版本具有更高值的预期差异。我理解使用 perf.

的度量中多路复用计数器的概念

那么这些事件中的全部到底是什么?

经过几个小时的搜索,我发现另一个 source directly from IBM 将事件描述为:

PM_DATA_ALL_FROM_LMEM

The processor's data cache was reloaded from the local chip's Memory due to either demand loads or data prefetch

PM_DATA_FROM_LMEM

The processor's data cache was reloaded from the local chip's Memory due to a demand load

所以差异使得prefetch加载,第二个版本中没有包含

PAPI 和 perf 工具只是包含了错误的描述。这些事件是 contributed directly to oprofile by IBM but probably with some mistakes/inaccuracies. As I browse through the PAPI/libpfm source,我看到正确的描述在 .pme_short_desc 字段中,但是 .pme_long_desc 字段是相同的。 papi_native_avail 只报告长的:

感谢您的耐心等待。像这样总结这些东西对我帮助很大,我希望它能帮助那些在类似问题上苦苦挣扎的人。