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

Har*_*per 2 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条目中会有额外的位用于控制目的.但对于不同的页面大小,该空间不应该是常量吗?

Mar*_*oom 7

因为他们是不同的 TLB.
执行cpuidEAX = 2在我的Haswell和解码TLB描述符得到:

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

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

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

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

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

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