1. ZFS ARC(Adaptive Replacement Cache)相对 LRU 在命中率与内存的工程价值?
ZFS 的 ARC(Adaptive Replacement Cache)相比传统 LRU 在命中率与内存使用方面有什么工程价值?
- LRU 的局限(无法区分扫描流量与热数据)
- ARC 的 MRU/Ghost 列表与自适应
- 命中率与内存效率
ARC 是 ZFS 的读缓存,采用"自适应替换缓存"策略,维护四个列表:MRU(最近使用)、MFU(最常使用)以及各自的 ghost 列表(仅记录索引不缓存数据)。相比传统 LRU,ARC 能同时兼顾"最近使用"与"频繁使用"两类访问模式,并通过 ghost 列表学习"被淘汰的数据是否很快又被访问",从而动态调整 MRU/MFU 的缓存分配比例,适应混合工作负载。工程价值在于:对包含大量顺序扫描(一次性流量)与热数据反复访问的混合场景,ARC 显著提高命中率,避免 LRU 被扫描流量"污染"而把热数据挤出去,同时更高效地利用有限内存。
LRU 的致命弱点是"扫描污染":一次遍及整个数据集的顺序读会把所有热数据挤出缓存。ARC 通过 ghost 列表记录"被淘汰项",若淘汰后又被访问则说明该淘汰方向不对,自适应地向另一份列表倾斜配额。这种"记忆 + 自适应"让 ARC 在不确定的混合负载下命中率远高于静态 LRU。工程上 ARC 的命中率直接决定存储 IO 的读写延迟,是 ZFS 性能的核心。