英特尔Sandy Bridge CPU中的TLB大小是如何确定的?

时间:2016-11-17 08:08:48

标签: architecture cpu tlb

维基网页(https://en.wikipedia.org/wiki/Sandy_Bridge)提到Data TLB分别有4个,2个和1GB页面的64个,32个和4个条目。

我发现这些数字很难理解。 Sandy Bridge的虚拟地址为48位,对于4K页面,可以有2 ^ 36页,对于2MB和1GB页面,应该有2 ^ 27和2 ^ 18页。如果TLB有4K页面的64个条目,则每个条目的大小应不小于6 + 36 = 42位。为什么2M页面只有32个条目,而不是2 ^ 15(42-27)个条目?

我知道在TLB条目中会有额外的位用于控制目的。但对于不同的页面大小,该空间不应该是常量吗?

1 个答案:

答案 0 :(得分:6)

因为他们是不同的 TLB 在我的Haswell上使用 EAX = 2 执行cpuid并解码TLB描述符得到:

  

指令TLB
  2M / 4M页面,完全关联,8个条目
  4KByte页面,8路,64个条目

     

数据TLB
  2M / 4M页面,4路,32个条目和单独阵列,1 GByte   页数,4路,4个条目
  4 KB页面,4路,64个条目

     

共享二级TLB
  4 K / 2M页面,8路,1024个条目

TLB缓存是具有固定布局的高度专用CAM,它不是具有通用布局的临时存储器。

有些TLB可以处理更多的页面大小但是这些是权衡,因为信息是以通用格式缓存的。
让不同的TLB处理不同的页面大小可以改善缓存命中,就像拥有DTLB和ITLB一样。

数据缓存的工作方式不同,因为它们不缓存信息,它们没有布局缓存数据,这就是为什么为它们提供KiB大小是有意义的,但它不适用于处理结构化信息的缓存。