偽LRU英文全名為Pseudo-LRU (PLRU),本概念略難懂,單獨解決。
For CPU caches with large associativity (generally >4 ways), the implementation cost of LRU becomes prohibitive. In many CPU caches, a scheme that almost always discards one of the least recently used items is sufficient. So many CPU designers choose a PLRU algorithm which only needs one bit per cache item to work.
PLRU typically has a slightly worse miss ratio, has a slightly better latency, and uses slightly less power than LRU.
並行多核體系結構基礎一書給出的概念:
一種可能的近似LRU的方法是記錄最近最常訪問的一部分數據塊,當需要替換時, 那些未被記錄的數據塊通過隨機或者特定的算法被替換出高速緩存。這種方法的一個最簡單的例子就是記錄最近最常使用(Most Recently Used, MRU)的數據塊,當需要替換時,通過偽隨機算法選擇非MRU的數據塊替換出高速緩存。
下圖中展示的基於樹的偽LRU替換策略:
筆者翻閱資料,找到一個非常nice的解釋文章,參考於:Cache replacement policies(緩存替換策略)
該算法的工作方式如下:考慮一個二叉搜索樹(BST)為所討論的項目。樹的每個節點具有一位標志,該標志指示“向左查找偽LRU元素”或“向右查找偽LRU元素”。要查找偽LRU元素,請根據標志的值遍歷樹。要使用對項N的訪問來更新樹,請遍歷樹以找到N,並在遍歷期間將節點標志設置為表示與所取方向相反的方向。
訪問順序為ABCDE
。如果只看箭頭,這里的原理很容易理解。當可以訪問值時,說A
,我們無法在緩存中找到它,然后從內存中加載它,並將其放置在箭頭所指的塊上,從上到下,並在放置該塊時使箭頭指向遠離該塊的底部和頂部。在上面的示例中,我們看到如何放置A
,然后放置B
,C
和D
.然后,當緩存已滿時,E
替換為A
,因為那是箭頭所指的時間。下次訪問時,將替換保存B
的塊。
該算法可能是次優的,因為它是近似值。例如,在上圖中具有A
,C
,B
,D
緩存行的情況下,如果訪問模式為:C
,B
,D
,A
則在逐出時我們選擇B
而不是C
。這是因為A
和C
在同一部分,訪問A
會將算法定向到不包含高速緩存行C
的另一部分。