我正在努力理解perf事件:dTLB-loads和dTLB-stores的含义。
TLB存储并不是向TLB写入,它是对内存中虚拟地址进行写操作,该操作必须读取一个TLB条目。
因此,TLB存储是通过存储操作完成的TLB引用。
dTLB-loads
和 dTLB-stores
事件分别表示数据内存加载或存储访问的TLB查找。这是这些事件的 perf
定义,但确切含义取决于微架构。dTLB-loads
和 dTLB-stores
分别映射到 MEM_INST_RETIRED.ALL_LOADS
和 MEM_INST_RETIRED.ALL_STORES
。在 Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Goldmont、Goldmont Plus 上,它们分别映射到 MEM_UOP_RETIRED.ALL_LOADS
和 MEM_UOP_RETIRED.ALL_STORES
。在 Core2、Nehalem、Bonnell、Saltwell 上,它们分别映射到 L1D_CACHE_LD.MESI
和 L1D_CACHE_ST.MESI
。(注意,在 Bonnell 和 Saltwell 上,事件的正式名称是 L1D_CACHE.LD
和 L1D_CACHE.ST
,而 perf
使用的事件代码仅在英特尔手册第3卷中记录,而不在其他英特尔性能事件文献中记录。)dTLB-loads
和 dTLB-stores
事件在 Silvermont 和 Airmont 上不受支持。dTLB-loads
映射到 LsDcAccesses
,dTLB-stores
不被支持。但是,LsDcAccesses
计数加载和存储的 TLB 查找。在其他厂商的处理器上,dTLB-loads
和 dTLB-stores
不被支持。perf
核心事件映射到本机事件,请参见 Hardware cache events and perf。
add [rdi], eax
既是一个装载操作又是一个存储操作。(而且每个部分都会单独执行,因此两者都将是单独的 TLB 引用)。 - Peter Cordes