我试图了解perf事件的含义:dTLB加载和dTLB存储?
答案 0 :(得分:1)
TLB存储不是对 的写入,而是对主存储器中的虚拟地址的写入,该虚拟地址必须读取一个TLB条目。>
因此,TLB存储是由存储操作完成的TLB引用。
答案 1 :(得分:1)
启用虚拟内存后,需要在TLB中查找每个内存访问的虚拟地址,以获得相应的物理地址并确定访问权限和特权(或在无效映射的情况下引发异常)。 dTLB-loads
和dTLB-stores
事件分别表示对数据存储器加载或存储访问的TLB查找。是这些事件的perf
定义。但是确切的含义取决于微体系结构。
在Westmere,Skylake,Kaby Lake,Coffee Lake,Cannon Lake(可能还有Ice Lake)上,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
使用的事件代码仅记录在Intel手册第3卷中,而未在其他手册中进行记录。英特尔提供有关性能事件的信息。)Silvermont和Airmont不支持dTLB-loads
和dTLB-stores
事件。
在当前所有的AMD处理器上,dTLB-loads
被映射到LsDcAccesses
,并且不支持dTLB-stores
。但是,LsDcAccesses
会为装入和存储计数TLB查找。在其他供应商的处理器上,不支持dTLB-loads
和dTLB-stores
。
有关如何将perf
核心事件映射到本地事件的信息,请参见Hardware cache events and perf。
在不同的微体系结构上,同一程序的dTLB-loads
和dTLB-stores
事件计数可能会有所不同,这不仅是由于微体系结构的差异,还因为事件的含义本身是不同的。因此,即使程序的微体系结构行为在微体系结构上被证明是相同的,事件计数仍然可以不同。可以在here上找到对所有英特尔微体系结构上的本机事件的简短描述,而在here上可以找到某些微体系结构的更详细的描述。