VIPT到PIPT转换如何在L1-> L2驱逐上工作

问题描述 投票:2回答:1

这个场景出现在我脑海中,看起来有点基本,但我会问。

因此,L1中有一个虚拟索引和物理标记,但该集合已满,因此被逐出。 L1控制器如何从虚拟索引和L1中的物理标签获取完整的物理地址,以便将线路插入L2?我想它可以搜索TLB的组合,但这似乎很慢,也可能根本不在TLB中。也许原始TLB转换的完整物理地址存储在缓存行旁边的L1中?

这也打开了一个更广泛的问题,即PMH在将访问位写入PTE和PDE等时如何使L1条目无效。我的理解是它直接与L2缓存连接物理地址,但是当它写入访问和修改的位,以及如果需要时发送RFO,它必须反映L1中副本的变化,如果有的话一,意味着它必须知道物理地址的虚拟索引。在这种情况下,如果完整的物理地址也存储在L1中,那么它也为L2提供了一种能够对其进行索引的方法。

caching intel cpu-architecture cpu-cache tlb
1个回答
2
投票

是的,外部缓存(几乎?)总是PIPT,内存本身显然需要物理地址。因此,当您将其发送到内存层次结构时,您需要一行的物理地址。


在Intel CPU中,VIPT L1缓存具有来自地址的页内偏移部分的所有索引位,因此virt = phys,避免了任何混叠问题。它基本上是PIPT,但仍然能够从TLB查找页面编号位并行地从集合中获取数据/标签,以便为标签比较器创建输入。

完整的物理地址只能从L1d索引+标签中获知,这也是因为除了负载延迟之外,它的行为类似于PIPT。


在虚拟索引缓存的一般情况下,其中一些索引位确实来自页码,这是一个很好的问题。这样的系统确实存在,并且OS经常使用页面着色来避免混叠。 (因此他们不需要在上下文切换上刷新缓存。)

Virtually indexed physically tagged cache Synonym有一个这样的VIPT L1d图:物理标签扩展了几位,一直到页面偏移,重叠顶部索引位。

很好地观察到写回缓存需要能够在完成对存储的TLB检查之后很长时间才能驱逐脏行。与加载不同,除非将其存储在某处,否则您仍然没有浮动TLB结果。

使标记包括页面偏移之上的所有物理地址位(即使它与某些索引位重叠)解决了这个问题。

另一种解决方案是直写高速缓存,因此您始终可以使用TLB的物理地址与数据一起发送,即使它不能从高速缓存标记+索引重构。或者对于只读缓存,例如指令缓存,虚拟不是问题。


但我不认为驱逐时的TLB检查可以解决非重叠标签情况的问题:您不再拥有完整的虚拟地址,只有页码的低位是虚拟的(来自索引) ,其余的都是物理的(来自标签)。所以这不是TLB的有效输入。

因此,除了效率低下之外,还有同样重要的问题,它根本不起作用。 :P也许有一些我不知道的技巧或者我缺少的东西,但我不认为即使是特殊的TLB索引两种方式(phys-> virt和virt-> phys)都可以工作,因为多个映射的允许相同的物理页面。


我认为使用VIVT缓存的真正CPU通常将它们作为直写。我不清楚这段历史是否足以肯定或引用任何例子。除非他们为每一行存储了两个标签(物理和虚拟),否则我看不出它们是如何回写的。

我认为早期的RISC CPU通常有8k直接映射缓存。

但是第一代经典的5阶段MIPS R2000(使用外部SRAM作为其L1)显然有一个PIPT回写缓存,如果the diagram in these slides labeled MIPS R2000是正确的,显示14位缓存索引从TLB结果的物理页面编号中取一些位。但它仍然适用于负载的2个周期延迟(1个用于EX阶段的地址生成,1个用于MEM阶段的高速缓存访​​问)。

当时的时钟速度要低得多,缓存+ TLB也变得更大。我想当时ALU中的32位二进制加法器确实具有与TLB +缓存访问相当的延迟,可能没有使用积极的进位前瞻或进位选择设计。

A MIPS 4300i datasheet(Nintendo 64中使用的MIPS 4200的变体)显示了在其5级流水线中何时/何时发生的事情,其中​​一些事情发生在时钟的上升沿或下降沿,让它将某些事情分成半时钟舞台。 (例如转发可以从一个阶段的前半部分到另一个阶段的后半部分工作,例如,对于分支目标 - >取指令,仍然不需要在半阶段之间进行额外的锁存。)

无论如何,它显示在EX中发生的DVA(数据虚拟地址)计算:这是来自lw $t0, 1234($t1)的寄存器+ imm16。然后DTLB和DCR(数据高速缓存读取)在数据高速缓存阶段的前半部分并行发生。 (所以这是一个VIPT)。 DTC(数据标签检查)和LA(负载对齐,例如,为LWL / LWR移位,或者LBU从提取的字中提取字节)在该阶段的后半部分并行发生。

所以我还没有找到单循环(地址计算后)PIPT MIPS的确认。但这确实证明了单周期VIPT是一个问题。来自维基百科,we know that its D-cache was 8-kiB direct-mapped write-back

© www.soinside.com 2019 - 2024. All rights reserved.