早期的ARM处理器使用虚拟地址(virtual addresses)来提供cache index和cache tag。
VIVT优点
这样做的好处是处理器内核可以使用虚拟地址进行cache look up,而无需进行虚拟地址到物理地址的转换。
VIVT缺点
缺点是当修改系统中虚拟地址到物理地址的映射时必须要clean和invalidate cache,这会对性能产生重大影响。
VIPT
后续的处理器使用不同的cache tag方案,index依然来自虚拟地址,但是tag来自物理地址(VIPT)。
使用物理地址作为tag的方案的优点是虚拟地址到物理地址映射关系的更改不需要再clean和invalidate cache。
这对于那些需要频繁修改页表映射的多任务系统具有显著优势。
使用虚拟地址作为index也有一些硬件优势,这意味着cache硬件在进行cache look up时不需要进行虚拟地址到物理地址的转换,从而提高cache look up的性能。这种cache tag方案称为Virtually Indexed, Physically Tagged (VIPT)。
VIPT缺点
VIPT 方案有一个缺点,对于4 way组相联 32KB cache(cacheline为1Byte),需要地址的比特[12:0]作为index。如果在 MMU 中使用4KB页,则虚拟地址的比特[12]可能不等于物理地址的比特[12]。
因此,如果多个虚拟地址映射指向同一个物理地址,则存在潜在的cache一致性问题。
可以通过对页表相关的操作系统软件增加某些约束来解决这个问题 。
PIPT
通过使用Physically Indexed, Physically Tagged (PIPT) cache可以避免这个问题,但是代价就是cache look up的性能比较低。
原作者:验证哥布林
|