![]() |
1
11
在这个细节层次上,您必须将“缓存”和“TLB”分解为它们的组件部分 . 它们在一种设计中紧密相连,该设计使用VIPT speed hack并行翻译和标签提取(即利用索引位均低于页面偏移量,因此“免费”翻译)。相关: Why is the size of L1 cache smaller than that of the L2 cache in most of the processors? L1dTLB本身是一个小型/快速 Content addressable memory Intel Skylake ). Hugepages通常使用并行检查的第二个(和第三个)数组进行处理,例如,对于2M页面,32个条目4路,对于1G页面,4个条目完全(4路)关联。 L1dTLB是单个CAM,检查它是单个查找操作。 至少由以下部分组成:
现代高性能设计中的负载执行单元是这样工作的 :
但现代Intel CPU(P6及更高版本)对未对齐的加载UOP没有惩罚,即使是32字节向量,只要它们不跨越缓存线边界。基于行内偏移量、操作数大小和特殊属性(如零或符号扩展或广播负载),8种并行方式的字节粒度索引可能比仅获取整个8 x 64字节和在获取+TLB时设置输出的多路复用成本更高。因此,一旦完成标记比较,来自所选方式的64字节数据可能会进入一个已经配置的多路复用网络,该网络获取正确的字节并进行广播或符号扩展。 AVX512 CPU甚至可以进行64字节的全行加载。 如果L1dTLB CAM中没有匹配项,则整个缓存获取操作无法继续。我不确定CPU是否/如何管理管道,以便在TLB未命中问题得到解决时,其他负载可以继续执行。该过程包括检查L2TLB(Skylake:unified 1536 entry 12 way for 4k and 2M,16 entry for 1G),如果失败,则进行页面漫游。
我不会称之为边带连接。L1D缓存是 只有 如果有第二级TLB,它通常是统一的,因此L1iTLB和L1dTLB都会在未命中时进行检查。就像拆分的L1I和L1D缓存一样,如果未命中,通常会检查统一的二级缓存。 外部缓存(L2、L3)通常是PIPT。转换发生在L1检查期间,因此物理地址可以发送到其他缓存。 |