A Learned Cache Eviction Framework with Minimal Overhead
TL;DR 精炼摘要
本文提出了一种名为MAT(Machine learning At the Tail)的缓存驱逐框架,通过将传统启发式算法作为“过滤器”,仅对即将驱逐的对象进行机器学习预测。此方法将每次驱逐中所需的预测次数从63次降至2次,同时保持与最先进的机器学习系统相当的低缺失率,这使其在高吞吐量环境中更具实用性。
摘要
Recent work shows the effectiveness of Machine Learning (ML) to reduce cache miss ratios by making better eviction decisions than heuristics. However, state-of-the-art ML caches require many predictions to make an eviction decision, making them impractical for high-throughput caching systems. This paper introduces Machine learning At the Tail (MAT), a framework to build efficient ML-based caching systems by integrating an ML module with a traditional cache system based on a heuristic algorithm. MAT treats the heuristic algorithm as a filter to receive high-quality samples to train an ML model and likely candidate objects for evictions. We evaluate MAT on 8 production workloads, spanning storage, in-memory caching, and CDNs. The simulation experiments show MAT reduces the number of costly ML predictions-per-eviction from 63 to 2, while achieving comparable miss ratios to the state-of-the-art ML cache system. We compare a MAT prototype system with an LRU-based caching system in the same setting and show that they achieve similar request rates.
思维导图
论文精读
中文精读
1. 论文基本信息
1.1. 标题
Machine Learning Over Heuristic: a Learned Cache Eviction Framework with Minimal Overhead (基于启发式算法之上的机器学习:一种具有最小开销的学习型缓存驱逐框架)
1.2. 作者
- Dongsheng Yang (普林斯顿大学)
- Daniel S. Berger (微软研究院 / 华盛顿大学)
- Kai Li (普林斯顿大学)
- Wyatt Lloyd (普林斯顿大学)
1.3. 发表期刊/会议
该论文发布于 ArXiv (预印本平台),从格式和内容来看,通常投稿于计算机系统领域的顶级会议(如 USENIX OSDI 或 NSDI)。 发表时间 (UTC): 2023-01-27
1.4. 摘要
近年来的研究表明,利用机器学习(ML)来预测对象未来的访问模式,可以比传统的启发式算法(如 LRU)更有效地降低缓存缺失率(Cache Miss Ratio)。然而,现有的最先进(SOTA)ML 缓存系统(如 LRB)为了做出一次驱逐决策,需要对大量对象进行预测,导致计算开销极高,难以应用于高吞吐量的生产环境。
本文提出了 MAT (Machine learning At the Tail) 框架。其核心思想是将传统的启发式算法视为一个“过滤器”(Filter)。MAT 仅对启发式算法即将驱逐的“尾部”对象(Tail Objects)进行 ML 预测。如果 ML 模型认为该对象未来很快会被访问,则将其保留;否则将其驱逐。实验表明,MAT 将每次驱逐所需的 ML 预测次数从 63 次降低到了 2 次,同时保持了与 SOTA ML 系统相当的低缺失率。在原型系统中,MAT 的请求处理吞吐量与简单的 LRU 系统相当。
1.5. 原文链接
- ArXiv 页面: https://arxiv.org/abs/2301.11886
- PDF 下载: https://arxiv.org/pdf/2301.11886.pdf
2. 整体概括
2.1. 研究背景与动机
- 缓存的重要性: 缓存系统(如内容分发网络 CDN、内存缓存、存储缓存)是现代计算基础设施的核心,旨在通过存储热点数据来减少后端负载和网络流量。
- 现有方法的局限:
- 启发式算法 (Heuristics): 传统的算法如 LRU (Least Recently Used,最近最少使用) 非常简单、高效,但在复杂多变的访问模式下,其缺失率 (Miss Ratio) 较高。
- 机器学习算法 (ML-based): 像 LRB (Learning Relaxed Belady) 这样的系统通过预测对象的“下一次访问时间”来做决策,能显著降低缺失率。但它们面临两大挑战:
- 计算开销巨大: 为了找到一个最佳驱逐对象,LRB 需要随机采样大量对象(如 64 个)并运行复杂的 ML 模型进行预测。
- 吞吐量瓶颈: 在高并发场景下,CPU 资源稀缺,繁重的 ML 推理会导致系统吞吐量大幅下降。
- 核心动机: 能否结合两者的优点?即拥有 ML 的高决策质量(低缺失率),同时保持启发式算法的高执行效率(低开销)。
2.2. 核心贡献
- 理论洞察 (Key Insight): 作者发现,传统的启发式算法(如 LRU)虽然不完美,但它们是一个很好的“过滤器”。它们驱逐的大部分对象确实是应该被驱逐的,只有少部分是“错误驱逐”。因此,ML 不需要扫描整个缓存,只需要检查启发式算法决定驱逐的那一小部分对象。
- MAT 框架: 提出了“尾部机器学习”(Machine learning At the Tail)框架。该框架将 ML 模型集成在启发式算法的驱逐链路上,作为最后的守门员。
- 极低开销: 将每次驱逐所需的平均预测次数从 63 次降低到 2 次,开销降低了约 30 倍。
- 生产级性能: 在 8 个生产级工作负载上的评估显示,MAT 达到了与 SOTA ML 系统(LRB)相当的缺失率,且吞吐量与纯 LRU 相当。
3. 预备知识与相关工作
3.1. 基础概念
为了理解本文,初学者需要掌握以下概念:
- 缓存驱逐 (Cache Eviction): 当缓存空间已满,而新数据需要写入时,系统必须选择并删除(驱逐)一个现有的对象。选择哪个对象删除的策略就是“驱逐算法”。
- LRU (Least Recently Used): 最经典的启发式算法。它假设“最近被访问过的数据,未来被访问的概率也大”。它通常使用一个链表维护对象,新访问的对象移到头部,链表尾部(Tail)的对象就是“最近最少使用”的,会被优先驱逐。
- Belady's MIN (Optimal Algorithm): 理论上的最优算法(Oracle)。它假设我们拥有上帝视角,知道未来所有的访问请求。策略是:驱逐那个在未来最长时间内不会被访问的对象。
- TTA (Time-To-next-Access): 下一次访问时间。这是 Belady 算法的核心指标,也是 ML 模型试图预测的目标。TTA 越大,说明该对象越不重要,越应该被驱逐。
3.2. 现有工作与技术演进
-
启发式算法: 图 1 展示了传统算法(如 LRU, FIFO)如何通过优先队列维护对象排名。它们简单但缺乏适应性。
上图(原文 Figure 1)展示了启发式缓存算法通过优先队列维护对象排名,驱逐决策总是发生在队列尾部。 -
基于 ML 的缓存 (LRB):
-
LRB (Learning Relaxed Belady): 这是本文的主要对比对象(Baseline)。
-
工作原理: 如图 2 所示,LRB 不依赖队列顺序,而是从缓存中随机采样 64 个对象,用 ML 模型预测它们的 TTA,然后驱逐 TTA 最大的那个。
-
缺点: 每次驱逐都要运行 64 次预测,这在高负载下是不可接受的。
上图(原文 Figure 2)展示了 SOTA ML 缓存系统 LRB 的流程:随机采样 -> 批量预测 -> 选择 TTA 最大的驱逐。
-
3.3. 差异化分析
本文(MAT)与 LRB 的核心区别在于候选对象的来源:
- LRB: 随机采样整个缓存,不仅计算量大,而且容易选中很多“显然应该保留”的热点对象进行无效预测。
- MAT: 只看 LRU 的“尾部”。这里集中了所有“可能被驱逐”的嫌疑对象,ML 只需要从中挑出“被误判”的好对象救回即可。
4. 方法论
4.1. 核心洞察:启发式算法作为过滤器
作者首先回答了一个问题:启发式算法(如 LRU)到底有多糟糕? 通过对比 LRU 和理论最优的 Belady 算法,作者发现:
-
LRU 驱逐的大部分对象,Belady 算法也会驱逐(即 LRU 的决定大部分是对的)。
-
LRU 的主要错误在于它会驱逐一小部分未来很快会被访问的对象。
如下图所示,阈值 右侧是应当驱逐的对象(TTA 很大),左侧是不应驱逐的(TTA 很小)。LRU 虽然混入了一些左侧的对象(错误决策),但其驱逐的大部分还是右侧的。这证明 LRU 是一个高效的初筛过滤器。
上图(原文 Figure 3)展示了 LRU 与 Belady 算法驱逐对象的 TTA 分布。LRU 虽然会错误地驱逐一些 TTA 较短的对象(左侧),但大部分决策与最优算法一致。
4.2. MAT 架构设计
MAT (Machine Learning at the Tail) 的设计将 ML 模块挂载在启发式缓存的尾部。
上图(原文 Figure 4)展示了 MAT 的架构:ML 模块从启发式算法的尾部获取候选对象,决定是驱逐它还是将其重新插入缓存。
4.2.1. 系统流程
- Heuristic Cache (主体): 正常运行(如 LRU),处理读写请求。
- RemoveFromTail (获取候选): 当需要腾出空间时,不直接删除尾部对象,而是将其取出交给 ML 模块,称为“候选对象”。
- ML Predict (预测): ML 模型预测该候选对象的 TTA (Time-To-next-Access)。
- Decision (决策):
- 驱逐 (Evict): 如果预测的 TTA 很大(不重要),则真实施行驱逐。
- 重插入 (Re-insert): 如果预测的 TTA 很小(重要),说明 LRU 判错了。MAT 将其重新插入到 LRU 队列中(通常作为最近访问处理),给它一次“复活”的机会。
4.3. 驱逐算法详解 (Algorithm 1)
MAT 并不只是简单地看一个对象,它包含一个动态阈值机制来平衡计算开销和驱逐质量。
算法流程与公式解析:
-
输入:
- : 目标平均预测次数(例如,我们希望平均每 2 次预测就能找到一个驱逐对象)。
- : 判定是否驱逐的时间阈值(动态调整)。
- : 最大尝试次数(防止死循环)。
-
循环查找 (While Loop): 系统尝试从尾部取出一个对象
obj,并预测其TTA。 -
阈值判定:
- 如果 : 这意味着该对象未来很久才会被访问,可以驱逐。循环结束,执行驱逐。
- 如果 :
这意味着该对象近期会被访问,不能驱逐。
执行
Heuristic.Insert(obj)将其放回缓存。 计数器 加 1,继续取下一个队尾对象。
-
动态阈值调整 (Dynamic Thresholding): 为了维持目标预测次数 ,算法会根据实际查找的难度调整阈值 。
- 如果 (找了太多次才找到一个能驱逐的,说明当前阈值太严苛,容易把垃圾当宝): (降低阈值,让驱逐更容易)
- 如果 (太容易就找到了,说明阈值太宽松,可能放过了本该保留的对象): (提高阈值,让驱逐更谨慎)
为什么使用阈值而不是 Top-1? 如图 5 所示,Top-1 方法(LRB 使用的方法)是在 个候选中选最差的一个。但如果这 个全是好对象,Top-1 依然会杀掉其中一个。而 MAT 的阈值方法在这种情况下会将它们全部放回(Re-insert),直到找到真正该死的对象。
上图(原文 Figure 5)解释了为什么动态阈值优于 Top-1 选择。(a) 最佳 TTA 阈值随时间变化。(b) 阈值方法能避免 Top-1 方法在所有候选均很重要时被迫驱逐其中之一的错误。
4.4. 机器学习模型实现
- 模型: 使用 LightGBM (梯度提升决策树 GBDT)。相比深度学习,它在处理表格数据时速度极快且效果好。
- 特征 (Metadata):
- Deltas: 最近 次访问的时间间隔 ()。
- EDC (Exponential Decayed Counter): 访问频率计数器,随时间衰减。
- 静态特征: 对象大小、类型等。
- 训练数据生成: MAT 的训练数据也经过了“过滤”。它只收集那些曾经到达过 LRU 尾部的对象作为训练样本。这大大减少了训练数据量,同时让模型专注于区分“尾部的难例”。
5. 实验设置
5.1. 数据集
实验涵盖了 8 个真实的生产级工作负载(Traces),分为三类:
- CDN (内容分发): CDN1, CDN2, CDN3, Wikipedia。特点是对象较大,请求量巨大。
- In-memory (内存缓存): Memcachier, InMem。特点是对象极小(KB 级别),对吞吐量要求极高。
- Storage (存储 I/O): IBM merged, Microsoft。特点是块级访问。
5.2. 评估指标
- 字节缺失率 (Byte Miss Ratio): 衡量节省网络流量的核心指标。
- 请求处理速率 (Request Processing Rate): 衡量系统吞吐量,单位通常是 requests per second (req/s)。
- 软件开销 (Software Overhead): 包括平均每次驱逐所需的预测次数 (Predictions per eviction) 和 CPU 时间。
5.3. 对比基线
- LRB (Learning Relaxed Belady): SOTA 的 ML 缓存算法。
- LRU: 最基础的启发式算法。
- 2Q, TinyLFU: 改进型的高级启发式算法。
- Belady's MIN: 理论最优下界。
6. 实验结果与分析
6.1. 核心结果分析:预测次数与缺失率
实验最关键的结论是 MAT 在大幅减少计算量的同时,保持了极高的预测准确度。
下图(原文 Figure 6)展示了在不同数据集上,MAT(仅用 2 次预测)与 LRB(用 64 次预测)的字节缺失率对比。可以看到,两条曲线几乎重合,说明 MAT 仅用 LRB 1/32 的计算量就达到了相同的效果。
上图(原文 Figure 6)显示,MAT(2)(即每次驱逐平均 2 次预测)在大多数工作负载下的缺失率曲线与 LRB(64) 几乎完全重合,且显著优于 LRU。
6.2. 软件开销分析
下表展示了 MAT 与 LRB 在开销上的具体量化对比。结果令人印象深刻:
以下是原文 Table 3 的结果(Cache Size 256GB, Wikipedia workload):
| Metric | LRB | MAT | Reduction |
|---|---|---|---|
| Number of predictions (预测次数) | 63.2 | 2.0 | 32 times (32倍) |
| Prediction time (预测时间) | 240 us | 6.4 us | 38 times (38倍) |
| Feature building time (特征构建时间) | 60 us | 2.9 us | 21 times (21倍) |
| Total time (总时间) | 300 us | 9.3 us | 32 times (32倍) |
分析: 总时间从 300 微秒降低到 9.3 微秒,这意味着 MAT 使得 ML 缓存算法终于有可能在实际的高性能系统中落地。
6.3. 原型系统吞吐量
作者在 Facebook 开源的 Cachelib 系统中实现了 MAT,并与默认的 LRU 实现进行了对比。
以下是原文 Table 5 的结果(Wikipedia & Memcachier workloads):
| Trace | Cache Size | MAT Throughput | LRU Throughput |
|---|---|---|---|
| Wikipedia | 32 GB | 23,787 req/s | 24,465 req/s |
| 128 GB | 25,117 req/s | 25,577 req/s | |
| 512 GB | 30,258 req/s | 31,181 req/s | |
| Memcachier | Infinite | 52,883 req/s | 51,380 req/s |
分析: MAT 的吞吐量仅比纯 LRU 低 1%~3% 左右,在 Memcachier 负载下甚至略高(可能是因为更低的缺失率减少了其他开销)。这证明 MAT 的额外开销在端到端系统中几乎可以忽略不计。
6.4. 鲁棒性与启发式算法的选择
-
对启发式算法不敏感: 如图 7 所示,无论 MAT 后端接的是 LRU、2Q 还是 TinyLFU,MAT 都能将其性能提升到相似的高水平。这说明 MAT 具有很强的通用性。
上图(原文 Figure 7)展示了 MAT 在 LRU、2Q 和 TinyLFU 基础上均能显著降低缺失率。 -
对慢速预测的容忍度: 如图 8 所示,即使人为将 ML 预测变慢(Stall),MAT 的性能也是优雅降级(Gracefully Degrade)。当 ML 完全跟不上时,MAT 就会退化为普通的 LRU,而不会导致系统崩溃或阻塞。
上图(原文 Figure 8)展示了当 ML 预测延迟增加时,MAT 的性能逐渐退化,但始终优于或等于基线 LRU。
7. 总结与思考
7.1. 结论总结
本文提出了 MAT 框架,成功解决了 ML 缓存算法“高精度但高开销”的难题。
- 机制创新: 利用启发式算法作为高效过滤器,只对“尾部”对象进行 ML 判决。
- 性能突破: 将 ML 预测开销降低了 30 倍以上,同时保持了 SOTA 级别的缓存命中率。
- 实用性: 实现了生产级原型,证明了该方法可以无缝集成到现有的高性能缓存系统中(如 Cachelib)。
7.2. 局限性与未来工作
- 模型依赖: 尽管开销降低,MAT 依然需要维护一个在线训练和推理的 ML 管道,这比纯算法系统增加了运维复杂度。
- Gap 依然存在: 尽管 MAT 追平了 SOTA ML 算法,但距离理论最优的 Belady 算法(图 6 中的 OPT 曲线)依然有差距。作者认为 MAT 极低的开销为未来使用更复杂、更强大的 ML 模型(如深度学习)来进一步缩小这一差距提供了空间。
7.3. 个人启发与批判
- 工程与算法的完美结合: 这篇论文是系统研究的典范。它没有盲目追求“更复杂的模型”,而是利用系统架构的特性(LRU 的尾部特性)来优化 ML 的部署。这种“用传统算法做粗筛,用 AI 做精筛”的思路在很多领域(如数据库索引、推荐系统召回)都极具借鉴意义。
- 动态阈值的智慧: 算法 1 中的动态阈值调整非常精妙。它本质上是一个反馈控制回路(PID Control 的简化版),能够让系统自适应地在计算资源和决策质量之间寻找平衡点。
- 思考: 虽然 LightGBM 已经很快,但在超高并发(如每秒百万级请求)的场景下,任何微秒级的延迟都可能被放大。未来的工作可能会探索将这种推理逻辑下沉到网卡(SmartNIC)或 FPGA 上,以实现真正的零 CPU 开销。
相似论文推荐
基于向量语义检索推荐的相关论文。