ARC: A SELF-TUNING, LOW OVERHEAD REPLACEMENT CACHE Nimrod Megiddo Dharmendra S. Modha IBM Almaden Research Center Introduction (I) • Caching is widely used in – storage systems – databases – web servers – processors – file systems – disk drives – RAID controllers – operating systems Introduction (II) • ARC is a new cache replacement policy: – Scan-resistant: • Better than LRU – Self-tuning: • Avoids problem of many recent cache replacement policies – Tested on numerous workloads Our Model (I) Cache/ Main Memory (pages) replacement policy on demand Secondary Storage (pages) Our Model (II) • Caches stores uniformly sized items (pages) • On demand fetches into cache • Cache expulsions decided by cache replacement policy • Performance metrics include – Hit rate (= 1 - miss rate) – Overhead of policy Previous Work (I) • Offline Optimal (MIN): replaces the page that has the greatest forward distance – Requires knowledge of future – Provides an upper-bound • Recency (LRU): – Most widely used policy • Frequency (LFU): – Optimal under independent reference model Previous Work (II) • LRU-2: replaces page with the least recent penultimate reference – Better hit ratio – Needs to maintain a priority queue • Corrected in 2Q policy – Must still decide how long a page that has only been accessed once should be kept in the cache • 2Q policy has same problem Example Last two references to pages A and B X A X B X B LRU -2 expels A because B was accessed twice after this next to last reference to A X A Time LRU expels B because A was accessed after this last reference to B Previous Work (III) • Low Inter-Reference Recency Set (LIRS) • Frequency-Based Replacement (FBR) • Least Recently/Frequently Used(LRFU): subsumes LRU and LFU – All require a tuning parameter • Automatic LRFU (ALRFU) – Adaptive version of LRFU – Still requires a tuning parameter ARC (I) • Maintains two LRU lists – Pages that have been referenced only once (L1) – Pages that have been referenced at least twice (L2) • Each list has same length c as cache • Cache contains tops of both lists: T1 and T2 • Bottoms B1 and B2 are not in cache ARC (II) L-1 |T1| + |T2| = c “Ghost caches” (not in memory) T1 B1 L-2 T2 B2 ARC (III) • ARC attempts to maintain a target size target_T1 for list T1 • When cache is full, ARC expels – LRU page from T1 if |T1| target_T1 – LRU page from T2 otherwise ARC (IV) • If missing page was in bottom B1 of L-1, ARC increases target_T1 target_T1= min(target_T1+max(|B2|/|B1|,1),c) • If missing page was in bottom B2 of L-2, ARC decreases target_T1 target_T1= max(target_T1-max(|B1|/|B2|,1),0) ARC (V) • Overall result is – Two heuristics compete with each other – Each heuristic gets rewarded any time it can show that adding more pages to its top list would have avoided a cache miss • Note that ARC has no tunable parameter – Cannot get it wrong! Experimental Results • Tested over 23 traces: – Always outperforms LRU – Performs as well as more sophisticated policies even when they are specifically tuned for the workload • Sole exception is 2Q – Still outperforms 2Q when 2Q has no advance knowledge of the workload characteristics.