CPU和高速緩存、主內存之間的關系
- CPU只直接跟L1高速緩存交互,CPU不會直接操作主內存;每個CPU只直接操作各自的高速緩存,不能直接操作其他CPU的高速緩存;
- 高速緩存中的數據均來源于主內存,即是主內存中的數據的拷貝;
- 當高速緩存中的數據被CPU修改后,有兩種機制來實現高速緩存和主內存的通信:一個是
write-through
,另一個是write-back
;
write-through機制
write-through機制描述的是當CPU對高速緩存進行寫操作時,高速緩存如何跟主內存交互的。
image.png
特點如下:
- 寫命中
既寫高速緩存,也寫主內存; - 寫不命中
使用非寫分配 not-write-allocat,即避開高速緩存,直接寫到主存;
write-back機制
write-back機制描述的是當CPU對高速緩存進行寫操作時,高速緩存如何跟主內存交互的。
write-back.png
特點如下:
- 寫命中
每個緩存行有一個有效位:0表示dirty/空, 1表示有效;只寫高速緩存,將相應的緩存行標記為臟,即dirty;只有當這個臟的緩存行要被替換掉時,才會寫到內存中去; - 寫不命中
首先使用write-allocate的方式:從下一層存儲加載相應的塊到高速緩存,然后更新這個緩存塊;然后就使用寫命中機制了;
高速緩存結構
Intel-i7-cache-hierarchy.png
- CPU只直接和寄存器、L1緩存交互;
- 現代的L1緩存分為兩個單獨的物理塊:
i-cache存儲指令,是read-only的;
d-cache存儲數據,是read/write的;- L2和L3緩存存儲指令和數據;
- 高速緩存的大小:Core i7的L1緩存大小為64KB, L2緩存是256KB,L3是8MB;
- 緩存是分塊,分組的;
- L1的訪問周期是4, L2是L1的3倍,L3是L2的3倍;一次內存訪問的時鐘周期是L3的3倍左右,和L1差2個數量級