在使用perf
评估Power8处理器的内存性能时,我最终遇到了解事件PM_DATA_ALL_*
和PM_DATA_*
之间差异的问题。大多数计数器都存在于两个版本中,但oprofile documentation和papi_native_avail
中的说明相同,例如:
PM_DATA_FROM_LMEM
处理器的数据缓存是从本地芯片的内存重新加载的,因为只有需求加载或需求加载加上预取,如果MMCR1 [16]为1。
我虽然会通过测量一些数据来找出差异。如果我提供足够大的任务,我可以观察*_ALL
版本具有更高值的预期差异。我理解使用perf
在度量中复用计数器的概念。
那么在这些事件中究竟是什么呢?
答案 0 :(得分:2)
经过几个小时的搜索,我发现另一个source directly from IBM将事件描述为:
<强> PM_DATA_ALL_FROM_LMEM 强>
由于需求加载或数据预取
,处理器的数据缓存从本地芯片的内存重新加载
和
<强> PM_DATA_FROM_LMEM 强>
由于需求负载,处理器的数据缓存从本地芯片的内存重新加载
因此差异会导致预取加载,而第二版中不会包含此内容。
PAPI和perf工具只包含错误的描述。这些事件由IBM contributed直接发送到oprofile
,但可能存在一些错误/不准确之处。当我浏览PAPI/libpfm source时,我发现正确的说明位于.pme_short_desc
字段中,但.pme_long_desc
字段都相同。 papi_native_avail
仅报告长篇文章:
感谢您的耐心等待。总结这样的东西对我有很大的帮助,我希望它能帮助那些在类似问题上挣扎的人。