维基百科网页(https://en.wikipedia.org/wiki/Sandy_Bridge https://en.wikipedia.org/wiki/Sandy_Bridge)提到数据TLB对于4KB、2MB和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 条目中会有额外的位用于控制目的。但对于不同的页面大小,该空间不应该是恒定的吗?
因为他们是不同的 TLBs.
执行中cpuid
with EAX=2在我的 Haswell 上解码 TLB 描述符得到:
指令TLB:
2M/4M 页,完全关联,8 个条目
4KByte 页,8 路,64 个条目
Data TLB:
2M/4M 页,4 路,32 个条目和一个单独的数组1 GB
页,4 路,4 个条目
4 KB 页,4 路,64 个条目
共享二级 TLB:
4K/2M 页,8 路,1024 个条目
TLB 缓存是highly专门CAM https://en.wikipedia.org/wiki/Content-addressable_memory具有固定布局,它不是具有通用布局的暂存存储器。
某些 TLB 可以处理超过一页大小的内容,但如果信息以通用格式缓存,则这些都是权衡。
使用不同的 TLB 处理不同的页面大小可以提高缓存命中率,就像使用 DTLB 和 ITLB 一样。
数据缓存的工作方式有所不同,因为它们不缓存信息,它们缓存没有布局的数据,这就是为什么以 KiB 为单位给出大小是有意义的,但对于处理结构化信息的缓存则不然。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)