LRU(Least Recently Used)替换策略是cache的经典替换策略之一,然而,LRU替换策略的硬件开销较大。因此,一些现代处理器,例如Intel 486和PowerPC,它们使用的cache替换策略是PLRU(pseudo-LRU)。
PLRU是LRU的一种近似方法,本文介绍PLRU中的tree-PLRU(tree-based pseudo-LRU)。
原理
若当前cache是w路组相连的,即1个组内有w个cache line,则tree-PLRU算法会使用w-1位来表示近似访问历史顺序的二叉树。根据二叉树的特性,tree-PLRU将这w个cache line划分成不同的区块,并用0/1表示区块的访问时间的远近。如下图所示:
假定 tree-PLRU 遵循的是“访问 1 左 0 右”的原则,也就是说如果该 bit 位为1的话,说明最近访问的是左边的块,反之最近访问的是右边的块。
举个栗子,在一个4路组相联的cache中,同一组内的4个cache line标号为0-3。那么按照tree-PLRU算法,它会使用4-1=3个比特来近似表示历史访问顺序,bit编号从0开始。
首先,我们将4个cache line划分为两半:
- bit_0=1表示最近访问的是line0或line1。