维基网页(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条目中会有额外的位用于控制目的。但对于不同的页面大小,该空间不应该是常量吗?
答案 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大小是有意义的,但它不适用于处理结构化信息的缓存。