CACHEUS中的SR-LRU和CR-LFU
2Q
Simplified Version
将缓存分成A1和Am两部分;
每当新访问q:
如果命中:
如果q在A1中被命中,那么从A1中移动到Am的MRU位置;
如果q在Am中被命中,则移动到Am的MRU位置;
如果miss:
如果A1的大小超过了给定阈值,则淘汰A1的尾部元素,新元素进入A1头部;
如果A1大小小于该阈值,则淘汰Am的LRU元素,新元素进入A1头部;
可以看出,这个版本算法并不支持从demotion操作,即Am中的元素进入A1的操作;但是会有Am中的元素被淘汰的情况出现;很显然这个算法中有一个关键的参数,A1的阈值
Full Version
A1进一步被拆成两部分,一部分称为A1in,接受新元素,一部分称为A1out,记录被从A1in淘汰的元素;
A1in继续扮演上面简化版本中A1的角色,而A1out则扮演它的历史队列的角色;
当有访问q出现:
如果命中:
如果在A1in中(do nothing)
如果在Am中,则提到MRU位置
如果miss:
如果在A1out中:
如果A1in大小超过阈值,从A1in中淘汰,淘汰的页记录在A1out,q放在Am头部
如果A1in大小不超过阈值,从Am中淘汰,淘汰的页不被记录,q放在Am头部
如果不在A1out中:
如果A1in大小超过阈值,从A1in中淘汰,淘汰的页记录在A1out,q放在A1in头部
如果A1in大小不超过阈值,从Am中淘汰,淘汰的页不记录,q放在A1in头部
可以看出替换算法部分依然继承了简化版本的模式,也就是不存在demotion操作;不过不同之处在于,A1in中的页即使被命中也不会被提前或进入Am,所以A1in ≠ A1 in Simplified Version,A1(A1in+A1out)整体可以看作以FIFO规则替换。简化版本中没有记录淘汰的页,而完整版本中记录了淘汰的页,相当于把统计频率的窗口扩大了。
当然完整版之于简化版最大的区别还是,A1in中的页被命中既不会被提前也不会被promote到Am中,promote会推迟到页被淘汰出缓存,进入A1out才发生,这才是full version的核心,可是这样的目的是啥呢?
文中对于完整版相较于简化版本的优化是这样解释的:如果有一种访问模式,其中某一些页在一