在x86_64体系结构中使用多个页面大小的TLB

时间:2012-11-15 13:11:53

标签: x86 x86-64 tlb mmu

有人知道TLB(L1和L2)是否支持现代x86_64微处理器(Intel SandyBridge,AMD Bulldozer)中多页大小的同时访问? x86核心管道是否向MMU提供有关页面大小的信息?

致以最诚挚的问候,

亚历

2 个答案:

答案 0 :(得分:5)

这不是TLB允许的问题,而是架构允许的内容。该体系结构表明,通过将页面目录条目中的PS位设置为适当的级别,可以在同一页面层次结构中混合使用小(4k),大(2M)和大(1G)页面。

并非所有级别的TLB都必须能够缓存所有大小的页面,但如果您愿意,这不应该阻止您混合页面。

现在,在MMU之前的x86管道中没有任何内容实际上需要有关页面大小的数据。这都是在页面层次结构中编码的。


关于页面拆分,如果您在地址x处有页面边界,并且您的内存访问权限从x - 1开始,宽度超过1个字节,则它将访问这两个页面。即使两个页面的大小不同,这也会有效。

答案 1 :(得分:2)

TLB通常分为两部分:代码和数据。 这些中的每一个可以被划分为多个级别,但通常是L1并且可能是L2。每个级别可能支持单个页面大小或混合页面大小。

例如在我的处理器上,I-L1 TLB为2mb / 4mb页面,混合,D-L1 TLB为2mb / 4mb页面,混合,I-L1 TLB为4kb页面,D-L1 TLB对于4kb页面,最后是4kb页面的D-L2 TLB。

当TLB支持混合页面时,TLB会存储与特定虚拟地址标记关联的页面大小。

当TLB级别每页大小有多个单独的缓存时,查找将并行执行,因为页面大小尚未知。

在任何一种情况下,如果L1 TLB未命中,则在尝试页面表行走之前将检查L2。

既然细节已经不在了,我们终于可以回答你的问题了。您可以同时使用多个页面大小,但它们永远不会重叠(操作系统不允许您在同一位置映射2个虚拟页面)。实际上,内核在内部使用多种页面大小来处理各种事情。

根据操作系统的不同,在用户空间进程中使用多个页面大小可能很容易或很痛苦。有关此内容的更多详细信息,请参阅Linux大页面支持和Windows大页面支持。其他操作系统将在其文档中提供有关此内容的详细信息。