ARC

advertisement
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.
Download