Memory 如果TLB和页表都需要两次内存访问,那么是什么使它们比页表更快?

Memory 如果TLB和页表都需要两次内存访问,那么是什么使它们比页表更快?,memory,operating-system,cpu-architecture,paging,tlb,Memory,Operating System,Cpu Architecture,Paging,Tlb,刚刚开始: 通常存储在主内存中的页表跟踪虚拟页在物理内存中的存储位置。此方法使用两个内存访问(一个用于页表条目,一个用于字节)来访问一个字节。首先,在页表中查找帧编号。第二,带有页偏移量的帧编号给出实际地址。因此,任何简单的虚拟内存方案都会使内存访问时间加倍。因此,TLB用于减少在页表方法中访问内存位置所花费的时间 因此,我好奇的是,为什么TLB实际上更快,因为据我所知,它只是页面表的一个更小、精确的副本 您仍然需要访问TLB来查找物理地址,一旦找到了物理地址,您仍然需要实际访问物理地址处的数据

刚刚开始:

通常存储在主内存中的页表跟踪虚拟页在物理内存中的存储位置。此方法使用两个内存访问(一个用于页表条目,一个用于字节)来访问一个字节。首先,在页表中查找帧编号。第二,带有页偏移量的帧编号给出实际地址。因此,任何简单的虚拟内存方案都会使内存访问时间加倍。因此,TLB用于减少在页表方法中访问内存位置所花费的时间

因此,我好奇的是,为什么TLB实际上更快,因为据我所知,它只是页面表的一个更小、精确的副本

您仍然需要访问TLB来查找物理地址,一旦找到了物理地址,您仍然需要实际访问物理地址处的数据,这是两个查找,就像页表一样

我只能想到TLB速度更快的两个原因:

  • 在TLB或page表中查找地址不是O(n)(我假设它是O(1),类似于哈希表)。因此,由于TLB要小得多,因此查找速度更快。同样在这种情况下,为什么不使用哈希表而不是TLB呢

  • 我错误地解释了TLB的工作原理,它实际上并没有进行两次访问


    • 您的假设是正确的,即使用TLB的方法仍然需要2次访问。但使用TLB的方法更快,因为:

      TLB由更快的内存组成,称为联想内存

      通常我们对物理内存进行2次内存访问,但对于TLB,有1次访问TLB,另一次访问物理内存

      联想存储器速度更快,因为它是内容寻址存储器,但由于需要额外的逻辑电路,它的成本也很高


      您可以阅读有关内容寻址内存的信息。

      这取决于具体的实现。通常,TLB是CPU中存在的缓存

      您仍然需要访问TLB来查找物理地址,一旦找到了物理地址,您仍然需要实际访问物理地址处的数据,这是两个查找,就像页表一样


      CPU访问缓存的速度比通过内存总线访问数据的速度快得多。它正在两次访问两个不同的地方(一个更快,一个更慢)。此外,内存位置也可以缓存在CPU中,在这种情况下,不需要通过内存总线进行访问。

      我意识到这个问题已经问了三年了,但由于它仍然是相关的,并且仍然出现在搜索引擎中,我会尽力给出一个完整的答案

      通过TLB而不是页表访问主存的速度更快,主要原因有两个:

      1。TLB比主存(页表所在的位置)快。

      原因有两方面:

    • TLB位于CPU内,而主存(因此页表)不在CPU内
    • TLB和其他高速缓存一样,由快速且昂贵的SRAM构成,而主内存通常由慢速且廉价的DRAM构成(读取更多)
    • 因此,如果TLB和page表都只需要一次内存访问的假设是正确的,那么TLB命中仍然可以粗略地说将内存访问时间减半。然而,正如我们接下来将看到的,这个假设是不正确的,拥有TLB的好处更大

      2。访问页表通常需要多次内存访问。

      这才是问题的症结所在

      现代CPU倾向于使用以节省内存。最值得注意的是,x86-64页表目前最多由四个级别组成()。这意味着通过页表访问内存中的单个字节最多需要五次内存访问:页表访问四次,数据访问一次。显然,如果没有TLB,成本将高得令人无法忍受;很容易理解为什么CPU和操作系统工程师投入大量精力来最小化TLB未命中的频率


      最后,请注意,即使是这种解释也有些简化,因为它忽略了数据缓存等内容。现代桌面CPU的详细机制是复杂的,在某种程度上还没有公开。有关此主题的更详细讨论,请参阅,例如。

      任何查询都可以。由于现代CPU中存在多级分页,因此认为读取页表需要一次内存访问是不正确的(请参阅我的答案)。+1中提到缓存。除此之外,答案是不完整的,并且忽略了现代CPU使用多级分页这一事实(请参见我的答案),这意味着读取页表需要多个内存访问,而不仅仅是一个。这个答案既有误导性,也有部分错误,它回答了一个完全不同的问题(“为什么TLB访问时间恒定?”)。使TLB比主存更快的不是内容寻址能力——这意味着访问时间是恒定的,这对主存也是如此。另外,由于多级分页(参见我的答案),两种情况下都需要两次内存访问的假设是不正确的。是否有任何真实世界的CPU设计具有分页虚拟内存,但没有至少一个小TLB,比如至少一个条目?我不认为这是你的意思,但更好的措辞可能是“如果没有TLB,我们必须在每次加载、存储和代码提取时遍历页表(通过L1d缓存访问),每个体系结构内存访问需要2到4次额外访问”。事实上,TLB通常与一级缓存并行访问(从中提取标记/数据)