高性能处理器一般会提供一个内存管理单元(MMU,),该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和 Cache 缓存控制等硬件支持。操作系统内核借助 MMU,可以让用户感觉到好像程序可以使用非常大的内存空间,从而使得编程人员在写程序时不用考虑计算机中的物理内存的实际容量。
TLB的全称是translation lookaside buffer,它是一种cache,用于存储虚拟地址(VA,Virtual Address)到物理地址(PA,Physical Address)的最新转换。它用于减少访问内存位置所花费的时间。它可以称为地址转换缓存。它是芯片内存管理单元(MMU) 的一部分。
TTW的全称是Translation Table walk,即转换表漫游。当 TLB 中没有缓冲对应的地址转换关系时,需要通过对内存中转换表的访问来获得虚拟地址和物理地址的对应关系。TTW成功后,结果应写入 TLB。
看各种Arm CPU的TRM,通常会实现两层TLB:L1 TLB和L2 TLB。其中L1 TLB通常是全相连的结构,使用register结构来完成。L2 TLB比较大点,通常采用组相联的方式,使用RAM结构来完成。因为1次translation table walk(TTW)占用的时间很长,为了缩短,在TTW的不同转换中,一般会设计中间级cache来存放一些中间的translation结果。具体如下:
L2TLB:这个是通常的TLB功能,直接存放的就是VA到PA的映射了。
Walk cache: 在Arm architecture中,TTW得到PA是在level 3的page descriptor或level 2的block descriptor。walk cache ram是用于存放VA到指向level 3或level 2的address,也就是说,如果只有1级stage的话,从walk cache映射的address去取得的descriptor内容就是指向VA到PA。所以这层次也叫做last level TLB。
如果walk cache ram存放的VA和指向level 3 page descriptor的address的对应关系,在做TLB lookup的时候,hit到这种entries的话,用这个address再去做最后level 3 table walk取得level 3 page descriptor。从level 3 page descriptor中可以提取出VA要映射的PA了。
如果walk cache ram存放的VA和指向level 2 block descriptor的address的对应关系,在做TLB lookup的时候,hit到这种entries的话,用这个address再去做最后level 2 table walk取得level 2 block descriptor。从level 2 block descriptor中可以提取出VA要映射的PA了。
(总结:walker cache里存放的是Stage1的level 2或者level3的descriptor的地址,也就是它的内容需要最后一次TTW下就可以得到PA了)
IPA cache: 之所以存在IPA cache,是因为Arm里支持Virtualization Host Extensions(VHE) feature,简单说就是MMU TTW会有两个stage的转换。stage1将VA转换为IPA,stage2将IPA转换为PA。因此IPA cache的作用就是存放IPA到PA的映射,减少stage2的TTW了。