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

x86_64体系结构中多页大小的TLB使用,x86,x86-64,tlb,mmu,X86,X86 64,Tlb,Mmu,有人知道TLB(L1和L2)是否支持现代x86_64微处理器(Intel SandyBridge,AMD推土机)中多页大小的同时访问吗?x86核心管道是否向MMU提供有关页面大小的信息 致以最良好的祝愿 Alex这不是TLB允许什么的问题,而是体系结构允许什么的问题。该体系结构表示,通过将页面目录项中的PS位设置为适当的级别,可以在同一页面层次结构中混合使用小型(4k)、大型(2M)和大型(1G)页面 并非所有级别的TLB都必须能够缓存所有大小的页面,但如果您愿意,这不应该阻止您混合页面 现在,

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

致以最良好的祝愿


Alex

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

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

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



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

TLB通常分为两部分:代码和数据。 其中每一个都可以分为若干级别,但通常是L1和L2。每个级别可能支持单一页面大小或混合页面大小

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

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

如果TLB级别的每个页面大小有多个单独的缓存,则会并行执行查找,因为页面大小未知

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

现在,具体问题已经解决了,我们终于可以回答你的问题了。您可以同时使用多个页面大小,但它们不能重叠(操作系统不允许您在同一位置映射两个虚拟页面)。事实上,内核在内部为各种事情使用多个页面大小


根据操作系统的不同,在用户空间过程中使用多个页面大小可能很容易,也可能很痛苦。请参阅Linux大页面支持和Windows大页面支持,以了解有关这方面的更多详细信息。其他操作系统将在其文档中对此进行详细说明。

您所说的“同时访问”是什么意思?在TLB的上下文中,“L1”和“L2”是什么意思?它们通常用于指缓存,而不是TLB。在现代x86处理器中,在现代x86处理器中,也有双层TLB。例如,在AMD推土机中有L1 DTLB 32条目、全关联和L2 TLB 1024条目8路关联。好的,我明白你的意思。您的问题的答案完全取决于实现。不能保证桑迪布里奇的行为会和艾维布里奇或尼哈勒姆一样。我们不能保证AMD的表现会和任何一个一样。顺便问一下,你说的“支持”是什么意思?“同时”是什么意思?这是否意味着单个访问跨越页面边界?这是否意味着在操作系统中配置多个页面大小?实际上,我对访问序列中存在多个页面大小时的TLB行为感兴趣。更确切地说,我想知道,当一系列4k访问之后出现2M访问时,tlb是否会刷新。我完全理解它与TLB本身一样依赖于实现(x86_64完全可以在没有TLB的情况下实现)。如果翻译请求不包含有关其页面大小的信息,则无法在TLB中检测用于关联搜索的标记位(标记位应等同于页码)。请重复您的第一条评论,这不仅取决于实现,而且还取决于其他线程正在做什么,因为TLB是共享的。请注意,还有各种微体系结构事件可能对软件不可见,从而导致TLB刷新。答案是,在我所熟悉的大多数英特尔处理器中,访问不同大小的页面不会触发TLB刷新。关于您的第二条评论,TLB应将页面大小作为TLB的一部分保留(例如,通过保留标记+掩码进行地址匹配)。每个线性地址只匹配一个物理地址,因此,如果线性地址命中一个大小相同的TLB条目,它将只命中该条目。我认为你最后的评论完全回答了原来的问题。这是关于页面大小的tlb支持信息,并根据此标记应用掩码。因此,tlb中可以同时存在不同的页面大小条目,并且从LSU到tlb不需要额外的信息。谢谢你的讨论。