Hybrid Policies
不同的工作负载,甚至同一工作负载内的不同阶段,会受益于不同的替换策略
- 当工作集较小时,会受益于 recency-friendly 策略
- 而当工作集较大时,会受益于 thrash-resistant 策略
混合策略会评估应用程序当前工作集的需求,并从多个竞争策略中动态选择
两个主要难点是:
- 准确识别出最有益的策略
- 以较低的硬件成本管理多个策略
Adaptive Replacement Cache (ARC)
ARC 动态平衡基于最近使用和使用频率的 eviction
ARC 会跟踪两个额外的 tag directories,L1 和 L2,它们共同记录的 entry 数量是基准 cache 容量的两倍
- L1 directory 维护最近使用过但仅被访问过一次的页面
- L2 directory 维护最近被访问过至少两次的页面
ARC 将基准 cache 目录分为两个列表:T1和T2,分别用于存放最近引用和频繁引用的条目
T1 和 T2 分别扩展了 ghost lists(B1和B2),用于追踪最近从 T1 和 T2 中踢出的 entry
Ghost list
- ghost list 仅包含 tag 元数据,而不包括实际数据
- 当相应数据从 cache 中被踢出时,entry 会被添加到 ghost list 中
- T1 和 B1 共同构成基于 recency 的 L1 directory
- T2 和 B2 共同构成基于 frequency 的 L2 directory
ARC 的目标是动态选择分配给 L1 和 L2 合适的 cache 容量
- 在 B1 中的命中会增加 T1 的大小(即分配给最近访问元素的缓存比例)
- 在 B2 中的命中则会增加 T2 的大小(即分配给至少访问过两次的元素的缓存比例)
- 从 T1 和 T2 中踢出的 entry 会分别添加到 B1 和 B2 中
缺点:维护额外 tag directory 的开销很大
Set Dueling Policy
机制:以较低硬件成本精确采样不同策略行为
思路:少数随机选择的 set 可以准确代表整个 cache 上不同替换策略的行为
数学上证明,对于具有 1‑4 MB(1024 - 4096 个 sets )的 cache ,64 个 set 足以捕捉整个 cache 的行为
Dynamic Insertion Policy (DIP, 2007)
通过动态调节新进 cacheline 的插入位置,结合了 recency-friendly 策略和 thrash-resistant 策略的优势
DIP 在 recency-friendly 的 LRU 与 thrash-resistant BIP 之间交替使用
DIP 使用 set dueling 来动态追踪每种策略的 hit rate 以选择合适的替换策略
DIP 将所有 cache sets 分为:
- Set Dueling Monitors (SDMs)
- 少数 sets 专用于 LRU
- 少数 sets 专用于 BIP
- 其余 sets 称为 follower sets
策略选择(PSEL)饱和计数器通过识别 cache hit 更多的 SDM 来确定获胜策略
- 当专用于 LRU 的 SDM hit 时,PSEL递增
- 当专用于 BIP 的 SDM hit 时,PSEL递减(一个 k 位 PSEL 计数器初始化为 2^{k−1} )
获胜策略由 PSEL 的最高有效位(MSB)标识
- 如果 PSEL 的 MSB 为 0 ,则 follwer sets 使用 LRU 策略
- 否则,follower sets 使用 BIP
额外硬件开销只有 PSEL
Dynamic Re-Reference Interval Policy (DRRIP)
- DRRIP 在 DIP 的基础上构建,增加了抗扫描能力
- DRRIP 使用 set dueling来创建 SRRIP 和 BRRIP 的混合策略