本文為清華大學存儲課程的學習筆記,以及一些體會,圖片主要來自課程的PPT,附帶一些Note來做補充說明。

非遺失性存儲主要介于Storage以及Memory之間,延時在100-1000ns,非常接近Memory的60ns,而遠高于Storage的性能。


傳統(tǒng)的磁盤由于機械式的部件,使得性能非常慢 - 兩個馬達要轉

該圖表現出,從1990年開始磁盤的延遲在不斷降低,直到2005左右,就基本沒變化了。

帶寬也是,2000年之后變化就比較少了,很難提升了。

能耗開銷也非常大,包括了磁盤以及冷卻的開銷,限制了可擴展性。右圖表示,到2020年需要500萬塊磁盤才能滿足性能需求。

單位為MB/s,表示了兩種盤的對比。



現在我們常見的閃存主要是NAND,按照頁去讀寫,擦除按照block進行。而NOR可以原地改寫。
NOR有個地線,所以可以原地更新,但是缺點是空間有限,放的東西不夠多。

寫是把電子放進Floating Gate中;讀的話通過不同的電壓加載,看對應的狀態(tài);擦除是把電子打出去;
與傳統(tǒng)CMOS的差異:

CMOS的簡化圖(晶體管)。達到某個閾值電壓就接通。

Flash的區(qū)別是多了一塊(兩個紅色的長方體),多了Floating gate。下面為氧化層,且加壓后電子可以通過氧化層,進入Floating gate,被保存進去。
具體來看:


現在有兩個閾值對應兩個狀態(tài)。

Row為word line,Column為bit line,橫著一行為頁(讀寫單元),整個方塊叫block(擦除單元),選中后放到Sense Amplifiers(行選中)。

左上角門限為2V,右上角為3V,所以加載2.5V可以將其選通。

假如我們要讀第二行,則其他行加上5V電壓,第二行2.5V即可。

如圖,2.5V無法通過前兩行,所以豎著無法通過,后面兩行可以通過,所以呈現0 0 1 1的情況。從而選中page2的數據。

該圖表示了MLC下,閃存存儲的容量變大,但是可靠性變差。

每一行的一個單元是有兩個bit(wordline),如何寫入呢?
下面為寫入順序:






這個順序的原因是:加電壓的時候會對周邊的數據有影響,使得相鄰數據偏移。連續(xù)寫兩次同一個位置會對周邊影響過大。

但是當寫了第一行、第二行,再寫第一行的第二個數據的時候,就可以把偏移的電壓調整過來。

下面闡述了Flash的其他特性:


壽命影響可靠性。Retention是放了時間久了之后電子跑掉了,耐久性是寫的越來越多,設備(Floating gate)越來越薄,這個變薄的時間就是耐久性。

為了使用上述特性,所以設計了FTL。
1 不寫在一個地方,新寫在一個地方,通過修改指針。舊的數據無效化,放過去
地址映射
垃圾回收
磨損均衡

SSD內部結構如上圖所示。

其內部是多通道進行,Channel Level使得SSD內部有很強的并行性,速度變快。其中每個Chip中都有Register,數據會提前準備到Register,然后通過總線傳輸。
1 垃圾回收

閃存每一個page分類三種狀態(tài),上圖右側:有效的叫Live page,無效的叫Dead page。
垃圾回收的目的就是把無效的D擦掉,所以需要把有效的挪走,把一整塊擦掉。如下圖:

已經挪走后,直接擦除:

這里存在兩個開銷:
1 復制Live數據
2 擦除塊
垃圾回收的策略需要考慮:

1 什么時候啟動?
2 選擇哪些塊回收?
3 新的數據放哪?
考慮冷熱數據,分特性去放數據。
2 磨損均衡

動態(tài)磨損均衡:分配空間的時候盡可能把數據分配到擦除空間少的地方。
靜態(tài)磨損均衡:對現有數據進行轉移。
3 FTL - 地址映射

維持一個Page頁表,虛擬地址到物理地址的轉換

類似于查表的過程。數據為LPN,通過查表然后得出物理地址。