存儲器 - 金字塔層次結構:越靠近CPU速度越快,容量越小,價格越貴


存儲器 - 金字塔層次結構:越靠近CPU速度越快,容量越小,價格越貴

計算機組成原理目錄:https://www.cnblogs.com/binarylei/p/12585607.html

1. 金字塔層次結構

現代計算機的存儲設備一般有 Cache、內存、HDD(SSD) 硬盤。這些存儲設備越靠近 CPU 速度越快,容量越小,價格越貴。

  • 寄存器(Register):寄存器與其說是存儲器,其實更像是 CPU 本身的一部分,只能存放極其有限的信息,但是速度非常快,和 CPU 同步。
  • 高速緩存(CPU Cache):使用 SRAM(Static Random-Access Memory,靜態隨機存取存儲器)的芯片。
  • 內存(DRAM):使用 DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)的芯片,比起 SRAM 來說,它的密度更高,有更大的容量,而且它也比 SRAM 芯片便宜不少。
  • 硬盤:如 SSD(Solid-state drive 或 Solid-state disk,固態硬盤)、HDD(Hard Disk Drive,硬盤)。
圖1:存儲器金字塔層次結構

不同層次存儲器設備特點:

  1. 越靠近 CPU 速度越快,容量越小,價格越貴。
  2. 每一種存儲器設備只和它相鄰的存儲設備打交道。比如,CPU Cache 是從內存里加載而來的,或者需要寫回內存,並不會直接寫回數據到硬盤,也不會直接從硬盤加載數據到 CPU Cache 中,而是先加載到內存,再從內存加載到 Cache 中。

1.1 高速緩存(SRAM)

高速緩存的 SRAM 的電路簡單,所以訪問速度非常快,但能夠存儲的數據有限。在 CPU 里,通常會有 L1、L2、L3 這樣三層高速緩存。每個 CPU 核心都有一塊屬於自己的 L1 高速緩存,通常分成指令緩存數據緩存,分開存放 CPU 使用的指令和數據。

  • L1 Cache:往往就嵌在 CPU 核心的內部。
  • L2 Cache:同樣是每個 CPU 核心都有的,不過它往往不在 CPU 核心的內部。所以,L2 Cache 的訪問速度會比 L1 稍微慢一些。
  • L3 Cache,則通常是多個 CPU 核心共用的,尺寸會更大一些,訪問速度自然也就更慢一些。
圖2:高速緩存結構

1.2 內存(DRAM)

1.3 硬盤

2. 局部性原理 - 如何選擇最優存儲

2.1 不同存儲器對比

圖3:不同存儲器成本的對比表格

你可以看到,在一台實際的計算機里面,越是速度快的設備,容量就越小。這里一共 10M 的 Cache,成本只是幾十美元。而 8GB 的內存、128G 的 SSD 以及 1T 的 HDD,大概零售價格加在一起,也就和我們的高速緩存的價格差不多。

不同存儲器的訪問延時數據:

2.2 局部性原理

我們能不能既享受 CPU Cache 的速度,又享受內存、硬盤巨大的容量和低廉的價格呢?前輩們已經探索出了答案,那就是,存儲器中數據的局部性原理(Principle of Locality)。我們可以利用這個局部性原理,來制定管理和訪問數據的策略。

  • 時間局部性(temporal locality):如果一個數據被訪問了,那么它在短時間內還會被再次訪問。如 LRU 緩存機制,將頻繁訪問的數據保存在內存中。
  • 空間局部性(spatial locality):如果一個數據被訪問了,那么和它相鄰的數據也很快會被訪問。如果數組的 CPU 預讀功能。

2.3 實戰 - 如何花最少的錢,裝下亞馬遜的所有商品

了解了局部性原理,下面我們就來一個實戰,來看一看通過局部性原理,利用不同層次存儲器的組合,究竟會有什么樣的好處。假設亞馬遜這樣的電商網站有 6 億件商品,如果每件商品需要 4MB 的存儲空間(考慮到商品圖片的話,4MB 已經是一個相對較小的估計),那么一共需要 2400TB( = 6 億 × 4MB)的數據存儲。應該選擇什么樣的存儲設備呢?

  • 商品全部放在內存中。那就需要 3600 萬美元( = 2400TB × 0.015 美元/1MB = 3600 萬美元)。但是,這 6 億件商品中,不是每一件商品都會被經常訪問。
  • 假設 1% 的熱門商品放到內存中。也就是 600 萬件熱門商品,而剩下的商品放在機械式的 HDD 硬盤上,那么,我們需要的存儲成本就下降到 45.6 萬美元( = 3600 萬美元 × 1% + 2400TB × 0.00004 美元 /1MB )。

說明: 這就是時間局部性,下面兩個問題是我們需要主要關注的問題。

  • LRU(Least Recently Used)緩存算法:將用戶訪問過的數據加載到內存中,一旦內存不足,則將最長時間沒有在內存中被訪問過的數據從內存中移走。這樣,熱門商品被訪問得多,就會始終被保留在內存里,而冷門商品被訪問得少,就只存放在 HDD 硬盤上。越是熱門的商品,越容易在內存中找到,也就更好地利用了內存的隨機訪問性能。

  • 緩存命中率(Hit Rate/Hit Ratio):LRU 緩存策略,訪問的數據可以在內存中找到的占有比例。

那么,只放 600 萬件商品真的可以滿足我們實際的線上服務請求嗎?以亞馬遜 2017 年 3 億的用戶數來看,我們估算每天的活躍用戶為 1 億,這 1 億用戶每人平均會訪問 100 個商品,那么平均每秒訪問的商品數量,就是 12 萬次。

  • 內存的隨機訪問請求需要 100ns,即在極限情況下,內存可以支持 1000 萬次(= 1s / 100ns)隨機訪問。我們用了 24TB 內存,如果 8G 一條的話,意味着有 3000 條內存,可以支持每秒 300 億次( = 24TB / 8GB × 1s/100ns)訪問。
  • HDD 硬盤只能支撐每秒 100 次的隨機訪問。2400TB 的數據,以 4TB 一塊磁盤來計算,有 600 塊磁盤,也就是能支撐每秒 6 萬次( = 2400TB/4TB × 1s/10ms )的隨機訪問。
  • 如果所有的商品訪問請求,都直接到了 HDD 磁盤,HDD 磁盤支撐不了這樣的壓力。我們至少要 50% 的緩存命中率,HDD 磁盤才能支撐對應的訪問次數。不然的話,我們要么選擇添加更多數量的 HDD 硬盤,做到每秒 12 萬次的隨機訪問,或者將 HDD 替換成 SSD 硬盤,讓單個硬盤可以支持更多的隨機訪問請求。

當然,這里我們只是一個簡單的估算。在實際的應用程序中,查看一個商品的數據可能意味着不止一次的隨機內存或者隨機磁盤的訪問。對應的數據存儲空間也不止要考慮數據,還需要考慮維護數據結構的空間,而緩存的命中率和訪問請求也要考慮均值和峰值的問題。


每天用心記錄一點點。內容也許不重要,但習慣很重要!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM