转译后备缓冲器
转译后备缓冲器(英语:Translation Lookaside Buffer,首字母缩略字:TLB),在中国大陆被翻译为页表缓存、转址旁路缓存,为CPU的一种缓存,由内存管理单元用于改进虚拟地址到物理地址的转译速度。目前所有的桌面型及伺服器型处理器(如 x86)皆使用TLB。TLB具有固定数目的空间槽,用于存放将虚拟地址映射至物理地址的标签页表条目。为典型的结合存储(content-addressable memory,首字母缩略字:CAM)。其搜索关键字为虚拟内存地址,其搜索结果为物理地址。如果请求的虚拟地址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址存取存储器。如果请求的虚拟地址不在 TLB 中,就会使用标签页表进行虚实地址转换,而标签页表的存取速度比TLB慢很多。有些系统允许标签页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间。
概观
TLB 用于缓存一部分标签页表条目。TLB可介于CPU和 CPU缓存之间,或在CPU、缓存和主存储器之间,这取决于缓存使用的是物理寻址或是虚拟寻址。如果缓存是虚拟寻址,寻址请求将会直接从 CPU 发送给缓存,然后从缓存访问所需的 TLB 条目。如果缓存使用物理寻址,CPU 会先对每一个存储器操作进行TLB查寻,并且将获取的物理地址发送给缓存。两种方法各有优缺点。
采用物理寻址的缓存的一种常见优化,是并行的进行 TLB 查寻和缓存的存取。所有虚拟地址的较低位元(例如,在虚拟内存系统中具有 4KB 标签页时,虚拟地址中较低的那 12 位元)代表的是所请求的地址在分页内部的地址偏移量(页内地址),且这些位元不会在虚拟地址转换到物理地址的过程中发生改变。访问CPU缓存的过程包含两步:使用一条索引去寻找CPU缓存的资料存储区中的相应条目,然后比较找到的CPU缓存条目的相应标记。如果缓存是用虚实地址转译过程中不变的页内地址来索引组织起来的,则可并行地执行TLB上虚实地址的较高位元(即分页的页间地址/页号)的转换与CPU缓存的“索引”操作。然后,从 TLB 获得的的物理地址的页号会发送给CPU缓存。CPU缓存会对页号标记进行比较,以决定此次存取是寻中或是缺失。它也有可能并行的进行 TLB 查寻和CPU缓存存取,即使CPU缓存必须使用某些可能会在地址转译后发生改变的位元;参阅缓存条目的地址翻译一节,以获取关于虚拟寻址下缓存和 TLB 的进一步细节。
TLB 不命中
两种在现代体系结构中常用的解决 TLB 不命中的方案:
- 硬件式 TLB 管理,CPU 自行遍历标签页表,查看是否存在包含指定的虚拟地址的有效标签页表条目。如果存在这样的分页表条目,就把此分页表条目存入 TLB ,并重新执行 TLB 访问,而此次访问肯定会寻中,程序可正常执行。如果 CPU 在标签页表中不能找到包含指定的虚拟地址有效条目,就会发生标签页错误异常,操作系统必须处理这个异常。处理标签页错误通常是把被请求的数据加载物理存储器中,并在标签页表中建立将出错的虚拟地址映射到正确的物理地址的相应条目,并重启程序(详见标签页错误)。
- 软件管理式 TLB,TLB 不命中时会产生“TLB 失误”异常,且操作系统遍历标签页表,以软件方式进行虚实地址转译。然后操作系统将分页表中响应的条目加载 TLB 中,然后从引起 TLB 失误的指令处重启程序。如同硬件式 TLB 管理,如果操作系统在标签页表中不能找到有效的虚实地址转译条目,就会发生标签页错误,操作系统必须进行相应的处理。
典型的 TLB
- 容量:12 - 4,096 分页表条目
- 寻中时间:0.5 - 1 时脉周期
- 不命中代价:10 - 30 时脉周期
- 不命中率: 0.01% - 3%
假如在TLB 查找需要 1 个时脉周期,而若在TLB找不到(miss hit)需要额外花 30 个时脉周期去查找,而且miss hit的几率是 1%,则有效的存储器访问周期的平均值是 个时脉周期/每一存储器存取。
指令与数据可以分别使用不同的TLB ,即Instruction TLB (ITLB)与 Data TLB (DTLB),或者指令与数据使用统一的TLB,即Unified TLB (UTLB),再或者使用分块的TLB (BTLB)。
上下文切换
在上下文切换(context switch)部分 TLB 条目可能会失效,例如先前执行的进程已访问过一个页面,但是将要执行的进程尚未访问此页面。最简单的策略是清出整个 TLB。较新的 CPU 已有更多有效的策略;例如在 Alpha EV6 中,每一个 TLB 条目会有一个“地址空间号码”(address space number,ASN)的标记,而且只有符合目前工作的 ASN 的 TLB 条目才会被视为有效。
AMD Phenom
AMD Phenom CPU的B2版本存在一个TLB问题。如果改以软件方式解决这个问题(如BIOS更新),这将会损失10-30%的性能。为此,AMD另外推出B3版本的Phenom处理器,在硬件电路上修正此问题,克服了B2版本Phenom处理器性能减少的问题。
参考
- Virtual Memory in the IA-64 Kernel > Translation Lookaside Buffer (页面存档备份,存于互联网档案馆)
- Virtual Translation Lookaside Buffer[永久失效链接]
外部链接
- 存储器管理/标签页架构 (页面存档备份,存于互联网档案馆)
- 处理器的存储子系统(三)-- 页表和TLB (页面存档备份,存于互联网档案馆)
- 处理器的存储子系统(一)--概述 (页面存档备份,存于互联网档案馆)
参阅