Pseudo-LRU §
- 이것은 decision tree 를 이용한 LRU approximate algorithm 이다.
- 핵심 아이디어는 binary tree 에서 node 의 값이 1이면 왼쪽 놈이 최근에 사용되었다는 의미이고, 0이면 오른쪽 놈이 최근에 사용되었다는 의미라고 정하고 access 될때 경로상에 있는 node 들의 bit 를 그에 맞게 바꿔 가장 이전에 사용되는 놈을 찻게 하는 것이다.
예시 §
- 예시를 보자. 다음과 같은 decision tree 가 있을때
flowchart TD
	ABCD[ABCD:]
	AB[AB:]
	CD[CD:]
	A((A))
	B((B))
	C((C))
	D((D))
	ABCD -- 1 --> AB
	ABCD -- 0 --> CD
	AB -- 1 --> A
	AB -- 0 --> B
	CD -- 1 --> C
	CD -- 0 --> D
- 만약 A 에 접근한다면, A 까지 가는 경로는 ABCD -> AB -> A 이다. 이때 가야하는 child 를 node 에 적어주면 다음과 같다.
flowchart TD
	ABCD[ABCD: 1]
	AB[AB: 1]
	CD[CD:]
	A((A))
	B((B))
	C((C))
	D((D))
	ABCD -- 1 --> AB
	ABCD -- 0 --> CD
	AB -- 1 --> A
	AB -- 0 --> B
	CD -- 1 --> C
	CD -- 0 --> D
- 따라서 A 가 접근되면, node 들의 bit 는 다음처럼 될 것이다.
| ACCESS | ABCD | AB | CD | 
|---|
| A | 1 | 1 | not changed | 
- 다음은 C 에 access 되었다고 해보자. 그럼 ABCD -> CD -> C 이므로 node 에는 다음처럼 표시해 주면 될 것이다.
flowchart TD
	ABCD[ABCD: 0]
	AB[AB: 1]
	CD[CD:1]
	A((A))
	B((B))
	C((C))
	D((D))
	ABCD -- 1 --> AB
	ABCD -- 0 --> CD
	AB -- 1 --> A
	AB -- 0 --> B
	CD -- 1 --> C
	CD -- 0 --> D
- 그럼 C 가 접근되었을 때의 경우의 수도 위의 표에 추가를 해보자.
| ACCESS | ABCD | AB | CD | 
|---|
| A | 1 | 1 | not changed | 
| C | 0 | not changed | 1 | 
- 마친가지의 과정을 B 와 D 에 대해서도 생각해 보면, 다음과 같이 표가 만들어 진다.
| ACCESS | ABCD | AB | CD | 
|---|
| A | 1 | 1 | not changed | 
| B | 1 | 0 | not changed | 
| C | 0 | not changed | 1 | 
| D | 0 | not changed | 0 | 
- 이렇게 access table 을 완성했다. 그럼 victim 은 어떻게 고를까.
- 아래의 상황에서 새로운 E가 들어온다고 해보자.
flowchart TD
	ABCD[ABCD: 0]
	AB[AB: 1]
	CD[CD:1]
	A((A))
	B((B))
	C((C))
	D((D))
	ABCD -- 1 --> AB
	ABCD -- 0 --> CD
	AB -- 1 --> A
	AB -- 0 --> B
	CD -- 1 --> C
	CD -- 0 --> D
- 일단 ABCD가0이기 때문에 right child 보다 left child 의 애들이 더 예전에 접근되었을 것이다.
- 또한, AB는1이기 때문에 left child 보다 right child 의 애들이 더 예전에 접근되었을 것이다.
- 따라서 victim 은 B 가 된다. 이것을 표로 나타내면
| ABCD | AB | CD | VICTIM | 
|---|
| 0 | 1 | doesn’t matter | B | 
| ABCD | AB | CD | VICTIM | 
|---|
| 0 | 0 | doesn’t matter | A | 
| 0 | 1 | doesn’t matter | B | 
| 1 | doesn’t matter | 0 | C | 
| 1 | doesn’t matter | 1 | D | 
- 이렇게 victim table 또한 완성할 수 있다. 이 access table 과 victim table 을 이용해 replace 하는 것이 Pseudo-LRU 이다.
- 일단 성능으로 보자면, LRU 와 Pseudo-LRU 는 통계적으로 봤을때 miss rate 차이가 아주 적다고 한다.
- 또한 필요로 하는 bit 의 개수를 보면,
- LRU 의 경우에는 cache size 가 4라면 4!=24 이므로 5bit 가 필요하다.
- 하지만 Pseudo-LRU 의 경우에는 보다시피 3bit 만 있으면 된다.
- 이것을 N 으로 확장시키면, (2log2(N+1)−1)−N 이라고 한다.