最新存儲金字塔架構
存儲金字塔v1及速度
Instruction cycle timings 在 TRM 中 有表述
Size of caches/TLBs 在 TRM 中 有表述
內存金字塔是按照 Ln 劃分的
一開始沒有 cache
L0 寄存器 訪問速度 xns
L1 Main memory 訪問速度 100ns
對於Cortex M0 M3 M4的我知道可以在其《技術參考手冊》> 程序員模型 >指令集摘要裏面查看,但是到了M7,他告訴我去ARM-V7-M的手冊中找
爲了給大家一個直觀的印象,我們把CPU的一個時鐘週期看作一秒。
那麼,從L0 register 讀信息就是1s
從L1 cache讀取信息就好像是拿起桌上的一張草稿紙(3秒);
從L2 cache讀取信息則是從身邊的書架上取出一本書(14秒);
而從主存中讀取信息則相當於走到辦公樓下去買個零食(4分鐘).
L1 L2 L3 cache 就是 On-chip-memory , 也就是 on-chip-ram
https://www.zhihu.com/question/20075426
DRAM DDR DDR3 DDR4 DDR5
存儲金字塔v2及速度
以上很多資料裏面對 write buffer 的描述 是 緩解 對 磁盤的 衝擊,但是 arm核心架構中提到的 write buffer 是 環節 對 主存的衝擊.
CPU register的速度一般小於1ns,主存的速度一般是65ns左右。速度差異近百倍。
因此,上面舉例的3個步驟中,步驟1和步驟3實際上速度很慢。
當CPU試圖從主存中load/store 操作時,由於主存的速度限制,CPU不得不等待這漫長的65ns時間。
如果我們可以提升主存的速度,那麼系統將會獲得很大的性能提升。
如今的DDR存儲設備,動不動就是幾個GB,容量很大。
如果我們採用更快材料製作更快速度的主存,並且擁有幾乎差不多的容量。
其成本將會大幅度上升。我們試圖提升主存的速度和容量,又期望其成本很低,這就有點難爲人了。
因此,我們有一種折中的方法,那就是製作一塊速度極快但是容量極小的存儲設備。那麼其成本也不會太高。這塊存儲設備我們稱之爲cache memory。
cache 並不是說 等待 cpu 獲取主存數據時纔去獲取內存數據,而是根據一些策略去獲取主存數據.
相當於 cache 一直從 主存拿數據與指令,然後cpu 一直從cache 拿數據與指令.
然後實際性能完全能夠
Cache 的命中率除了與 Cache 的容量有關外,還與地址映象的方式有關。
目前, Cache 存儲器容量主要有 256KB 和 512KB 等。這些大容量的 Cache
存儲器,使 CPU 訪問 Cache 的命中率高達 90 %,大大提高了 CPU 訪問
數據的速度,提高了系統的性能。
在 register 和 主存中間 加一層cache ,命中率可達90%,形成了以下金字塔架構
register
L1 cache
Memory
在 cache 和 主存中間 再加一層cache ,命中率可達98%,形成了以下金字塔架構
register
L1 cache
L2 cache
Memory
現實情況
main memory是磁盤的緩存,cache是main memory的緩存,CPU寄存器是對cache的緩存。
我們讀數據的時候,如果需要知道其位置,則可以從
register ,L1cache ,L2cache, ... ,main Memory, HardDisk
我們寫數據的時候,如果需要知道其位置,則可以從
register ,write_buffer ,cache,main Memory, HardDisk