首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >页结构缓存perf事件

页结构缓存perf事件
EN

Stack Overflow用户
提问于 2022-10-25 07:07:46
回答 1查看 55关注 0票数 3

我一直在想,如果线性地址转换过程遇到TLB失败,那么它会遍历内存中的页面目录结构。然而,英特尔手册第3/4.10.3卷定义了所谓的分页结构缓存,这一点我以前从未听说过。

这就是它对TLB小姐所做的:

如果处理器没有找到相关的TLB条目或PDE缓存条目,它可以使用线性地址的上位(对于4层分页,位47:30;对于5级分页,位56:30)从与当前PCID相关联的PDPTE缓存中选择条目。然后,它可以使用该条目来完成翻译过程(定位PDE等)。好像它已经遍历了PDPTE、PML4E和(对于5级分页)对应于PDPTE-缓存条目的PML5E。

如果处理器没有找到相关的TLB条目、PDE-缓存条目或PDPTE-缓存条目,则可以使用线性地址的上位(对于4级分页,位47:39;对于5级分页,位56:39)从与当前PML4E If相关联的PML4E缓存中选择条目。然后,它可以使用该条目来完成翻译过程(定位PDPTE等)。好像它已经遍历了相应的PML4E。

因此,TLB遗漏并不一定意味着遍历的整个页面结构。

您能给出一些perf事件的例子,描述页面结构缓存访问以及如何优化页面结构缓存的使用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-25 13:38:22

AFAIK,Skylake对于页面行走的细节没有任何perf事件。这里有完成步行次数的计数器,以及活动行走的周期数,所以我想您可以尝试平均每次步行所用的时间。

( Skylake和更高版本中有两个PMH页面丢失处理程序,但dtlb_load_misses.walk_pending每个周期计算1或2个取决于活动的数量。两个人都是零。但它可能只是计算需求加载TLB错过,而不是下一页TLB预取。对于商店和代码提取也有类似的事件。其他一些事件,如dtlb_load_misses.walk_active,在一个或两个页面遍历程序都处于活动状态时会计算周期。)

利用页面遍历器缓存更高级别的页面表(和/或L2 / L1d也缓存那些物理位置)的主要方法是具有更大范围的局部性,例如在相同对齐的2M或1G区域内拥有工作集中的热页,因此它们都共享基树的一个公共上部部分(页面表)。

或者在几个组中;您不需要尝试让malloc / mmap分配到您的代码或堆栈旁边。

这在很大程度上取决于您的操作系统,除非您做了一个大的分配,并自己分割它。

静态代码/数据(至少在非饼型Linux可执行文件中是这样) starts at absolute address 4MiB by default,它处于2M大漏电的开始,并且接近1G大漏电的开始。在这之上的2^9G水平的起点附近。因此,即使您有大量的代码+数据,它的位置也很好。我假设对于非饼型可执行文件的ASLR是更细粒度的,但是静态code+data通常比1G级别都小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74190235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档