根据this page和this page,读操作首先会发生L3缓存的存储未命中,在某些情况下可以通过非临时存储来避免。
有没有办法(比如一些性能事件)让我估计工作负载中此类写入分配引起的内存负载数量?
此类读取的技术术语是“Read For Ownership”,使缓存行进入 MESI Exclusive 状态。有一些特定于 L2 中的 rfo
命中或未命中的性能事件,以及 L2 未命中后发生的离核情况。与加载不同的是,没有每指令计数器,因为存储在退休之前甚至不会离开存储缓冲区。
perf list
。
offcore_requests.demand_rfo
可能就是您要查找的内容(可能与
l2_rqsts.rfo_miss
类似),但这会计算 L3 中命中的 RFO。或者也许offcore_response.demand_rfo.l3_miss_local_dram.any_snoop
对于单插槽系统,如果这符合我的想法,计算必须访问DRAM的RFO?我还没试过,但这个名字看起来很有希望。
或offcore_response.demand_rfo.l3_miss.any_snoop
,因为 L3 中缺少关键点。
snoop_non_dram
也是可能的,也许对于必须通过系统代理而不是内存控制器的可缓存设备内存?或者也许这涵盖了某些笔记本电脑 SKL 具有的可选 eDRAM 缓存中 L4 命中的可能性。
如果我没记错的话,offcore_response
事件可能对其他逻辑核心上的活动敏感,因此请保持其闲置。