# Multilevel Cache
###### tags: `IT鐵人`
## 兩層以上的城牆
上一次我們提到了Set Associate Cache,意思是在entry中加入多個Block,以避免常常存取的Block要求進入同一個entry導致miss rate居高不下。
所以我們可以在外面加上第二層Cache,不論是晶片內外都可以,實作的方式也很多,就不特別說明了。
因為多了第二層,hit time不可能比第一層高,所以第二層以後注重的是減少miss rate,降低hit time就留給第一層注重。
## Total Miss Rate
在計算Miss Rate之前,需要先介紹兩個詞:
* GMR(Global Miss Rate):對於所有access的miss rate。
* LMR(Local Miss Rate):只看自己經歷access的miss rate。
底下提供了一個例子,假設發生了1000次的access,其中L1發生了50次miss,而這50次又在L2發生了20次miss,後面又在L3發生了5次miss,所以總的來說,這樣子的三層Cache miss rate為0.5%。

||CPU|L1 Cache|L2 Cache|L3 Cache|
|-|-|-|-|-|
||1000 access|50 miss|20 miss|5 miss|
| GMR || 50/1000 | 20/1000 | 5/1000|
|LMR||50/1000|20/50|5/20|
L1 GMR = L1 LMR
L2 GMR = L1 LMR x L2 LMR
L3 GMR = L1 LMR x L2 LMR x L3 LMR
## 計算Multilevel Cache效能
剛剛都是用miss rate說明,這次用實際一點的時間計算來示範:
> 假設處理器CPI=1.0,clock rate=4GHz,Memory access time=100ns,並且保證所有access都能在Memory hit。第一層Cache miss rate=2%。
> 如果加上了第二層Cache,其access time=5ns,GMR=0.5%,那麼整個處理器速度會提昇多少?
在這類型的題目要把單位都換成一樣的,換成時間會是cycle數量,以下用cycle換算:
clock rate:4GHz -> clock time:0.25ns
Memory access time=400 cycles
secondary cache access time=20 cycles
因為最快速的第一層access時間很短,可以直接省略。
未加上第二層時,Cycle數 = 1(CPI) + 2% x 400(Memory stall) = 9
加上第二層後,Cycle數 = 1(CPI) + (2%-0.5%) x 20(L2 Cache stall) + 0.5% x (20+400)(Memory stall) = 3.4
所以performance提昇 9/3.4 = 2.6左右
要特別注意的是L2miss後進入Memory,不能只有考慮Memory stall,還要考慮剛剛L2miss的時間,所以才有20+400的數字。
## 小結
這三回講的是Cache System,分成了Direct Mapped, Set Associate還有Multilevel三種,下一回開始會講Virtual Memory,會比Cache System複雜一些些。
| 上一篇 | 下一篇 |
|-|-|
|[Set Associative Cache](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/ryJNh_igY)|[Miku Memory](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/r1ziQtgWF)
