Performance CPU周期速度

Performance CPU周期速度,performance,optimization,memory-management,cpu,virtual-memory,Performance,Optimization,Memory Management,Cpu,Virtual Memory,查找L1/L2/L3缓存的延迟很容易: 但我感兴趣的是,在以下情况下,将虚拟地址转换为物理页面地址的成本(以CPU周期为单位): L1 TLB中有一个命中 L1 TLB未命中,但L2 TLB命中 L2 TLB中存在未命中,页面表中存在命中 (我不认为页面表格中会有遗漏,可以吗?如果可以,成本是多少) 我确实发现: 数据TLB L1大小=64项。4路未命中惩罚=7个循环。并行未命中:每次访问1个周期 TLB L2大小=512项。4路未命中惩罚=10个循环。并行未命中:每次访问21个周期 指令T

查找L1/L2/L3缓存的延迟很容易:

但我感兴趣的是,在以下情况下,将虚拟地址转换为物理页面地址的成本(以CPU周期为单位):

  • L1 TLB中有一个命中
  • L1 TLB未命中,但L2 TLB命中
  • L2 TLB中存在未命中,页面表中存在命中
  • (我不认为页面表格中会有遗漏,可以吗?如果可以,成本是多少)
  • 我确实发现:

    • 数据TLB L1大小=64项。4路未命中惩罚=7个循环。并行未命中:每次访问1个周期
    • TLB L2大小=512项。4路未命中惩罚=10个循环。并行未命中:每次访问21个周期
    • 指令TLB L1大小=每个线程64项(每个核心128项)。四路
    • PDE缓存=32项


    但它没有提到命中/访问相关TLB缓存的成本?

    通常,一级TLB访问时间将小于缓存访问时间,以允许在一组关联的物理标记缓存中进行标记比较。直接映射缓存可以通过假设命中来延迟标记检查。(对于有序处理器,立即使用数据的未命中将需要等待未命中被处理,因此没有性能损失。对于无序处理器,纠正此类错误推测可能会产生明显的性能影响。虽然无序进程不太可能使用直接映射缓存,但它可能会使用方式pred虚拟标记的缓存(理论上)会更延迟TLB访问,因为TLB仅用于验证权限,而不用于确定缓存命中率,并且处理权限冲突通常比较昂贵和罕见

    这意味着L1 TLB访问时间通常不会公开,因为它不会影响软件性能调整

    二级命中时间等于一级未命中惩罚。这取决于具体的实现,可能不是一个单一的值。例如,如果TLB使用银行业务在一个周期内支持多个访问,银行冲突可能会延迟访问,或者如果使用重新灰化来支持多个页面大小,则另一个页面大小将需要更长的时间才能找到(这两种情况都会在高利用率下累积延迟)

    L2 TLB填充所需的时间变化很大。ARM和x86使用硬件TLB填充,使用多级页表。根据页表数据可以缓存的位置以及是否存在缓存命中,TLB填充的延迟可以介于页表的每一级别的主存访问延迟和为每一级别找到页表数据的缓存延迟之间(加上一些开销)

    更复杂的是,最近的Intel x86具有分页结构缓存,允许跳过页表的级别。例如,如果在该缓存中找到页面目录条目(第二级页面表中指向页面表条目页面的条目),而不是从页面表的底部开始进行四次相关查找,则只需要一次查找

    (可能值得注意的是,使用页面表级别(例如,x86-64为2 MiB和1 GiB)覆盖的虚拟地址区域大小的页面,可以减少页面表层次结构的深度。使用如此大的页面不仅可以减少TLB压力,还可以减少TLB未命中的延迟。)


    页表未命中由操作系统处理。这可能导致页面仍在内存中(例如,如果写入交换尚未完成),在这种情况下,延迟将相对较小。(实际延迟将取决于操作系统如何实现这一点以及缓存命中行为,尽管代码和数据的缓存都可能未命中,因为分页是一个不常见的事件。)如果页面不再位于内存中,则从辅助存储(例如,磁盘驱动器)读取的延迟添加到处理无效页表条目(即,页表未命中)的软件延迟中。

    我喜欢没有评论/理由的否决票……我怀疑否决票来自这样一种观点,即这与硬件无关,可能过于广泛,因为它取决于特定的硬件和(在页表未命中的情况下)特定的操作系统软件。某些处理器没有L2 TLB并使用软件TLB fill,在这种情况下,TLB fill的延迟将取决于特定的硬件和操作系统。