"Perf事件: dTLB-loads和dTLB-stores的含义是什么?"

4
我正在努力理解perf事件:dTLB-loads和dTLB-stores的含义。

你知道装载(load)和存储(store)操作的区别吗?例如,add [rdi], eax 既是一个装载操作又是一个存储操作。(而且每个部分都会单独执行,因此两者都将是单独的 TLB 引用)。 - Peter Cordes
我大致理解load从内存中获取数据,store将数据写回内存,但是我对TLB-store的含义感到困惑。根据我的阅读,TLB条目可以被修改(尤其是脏位或有效位发生变化),但是store发生在哪里以及为什么会发生呢? - agood
2个回答

6

TLB存储并不是向TLB写入,它是对内存中虚拟地址进行写操作,该操作必须读取一个TLB条目。

因此,TLB存储是通过存储操作完成的TLB引用。


6
当虚拟内存启用时,每个内存访问的虚拟地址都需要在TLB中查找以获取相应的物理地址并确定访问权限和特权(或在映射无效时引发异常)。dTLB-loadsdTLB-stores 事件分别表示数据内存加载或存储访问的TLB查找。这是这些事件的 perf 定义,但确切含义取决于微架构。
在 Westmere、Skylake、Kaby Lake、Coffee Lake、Cannon Lake(可能还包括Ice Lake)上,dTLB-loadsdTLB-stores 分别映射到 MEM_INST_RETIRED.ALL_LOADSMEM_INST_RETIRED.ALL_STORES。在 Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Goldmont、Goldmont Plus 上,它们分别映射到 MEM_UOP_RETIRED.ALL_LOADSMEM_UOP_RETIRED.ALL_STORES。在 Core2、Nehalem、Bonnell、Saltwell 上,它们分别映射到 L1D_CACHE_LD.MESIL1D_CACHE_ST.MESI。(注意,在 Bonnell 和 Saltwell 上,事件的正式名称是 L1D_CACHE.LDL1D_CACHE.ST,而 perf 使用的事件代码仅在英特尔手册第3卷中记录,而不在其他英特尔性能事件文献中记录。)dTLB-loadsdTLB-stores 事件在 Silvermont 和 Airmont 上不受支持。
在所有当前的 AMD 处理器上,dTLB-loads 映射到 LsDcAccessesdTLB-stores 不被支持。但是,LsDcAccesses 计数加载和存储的 TLB 查找。在其他厂商的处理器上,dTLB-loadsdTLB-stores 不被支持。
有关如何将 perf 核心事件映射到本机事件,请参见 Hardware cache events and perf
不同微架构下同一程序的和事件计数可能不同,这不仅是因为微架构的差异,也是因为事件本身的含义不同。因此,即使程序在不同的微架构上的微架构行为相同,事件计数仍然可以不同。可以在所有英特尔微架构中找到本机事件的简要描述 here,在某些微架构上找到更详细的描述 here
相关:如何解释perf iTLB-loads,iTLB-load-misses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接