SSD通俗原理簡介
來自專欄 Distributed Things4 人贊了文章
1. 什麼是SSD
SSD是Solid State Drive,即固態硬碟的縮寫。目前主流的SSD是使用半導體快閃記憶體(Flash)作為介質的存儲設備,SSD有別於HDD(Hard Disk Drive)機械硬碟。
SSD誕生於上世紀70年代,最早的SSD使用RAM,RAM掉電數據就會丟失,價格也特別貴。後來出現了基於快閃記憶體的SSD,快閃記憶體掉電之後數據不丟失,flash SSD慢慢取代了RAM SSD。此時HDD盤已佔據了大部分的存儲市場。到本世紀初,由於工藝的不斷進步,SSD贏來了大發展,容量和性能不斷提升,價格也不斷下降。HDD的在工藝和技術上已經很難有突破性的進展,SSD在性能和容量上還在不斷突破,相對於HDD市場的萎縮,無論是企業級市場還是消費級市場SSD的快速普及,SSD市場份額一直在擴大。相信不久的將來,SSD在在線存儲領域會取代HDD成為主流的存儲設備,成為軟體定義存儲的主流設備。
在工作方式上,HDD使用磁碟,即磁性介質作為數據存儲介質,在數據讀取和寫入上,使用磁頭+馬達的方式進行機械定址。因為機械硬碟靠機械驅動讀寫數據的限制,導致機械硬碟的性能提升遇到了瓶頸。特別是HDD盤的隨機讀寫能力,受其機械特性的限制,是一個巨大的瓶頸。SSD使用Flash作為存儲介質,數據讀取寫入通過SSD控制器進行定址,不需要機械操作,有著優秀的隨機訪問能力。
下圖分別是HDD和SSD的組成。HDD使用機械SSD由主控、快閃記憶體、DRAM(可選)、PCB(電源晶元、電阻、電容等)、介面(SATA、SAS、PCIe等)。
SSD分為前端、中間、後端。前端是介面和相關的協議模塊(STAT/SAS/PCIe等),中間是FTL(Flash Transhlation Layer)模塊,後端是和快閃記憶體通信模塊(快閃記憶體遵循ONFI或者Toggle協議)。
2. SSD的工作原理
2.1 SSD的存儲單元
Flash的基本存儲單元是 - 浮柵晶體管。
上圖是浮柵晶體管的結構,最下面的是襯底,源極和漏極。襯底之上,有隧道氧化層、Floating Gate(浮柵層)、氧化層、控制柵極。中間的Floating Gate被絕緣層包圍著,電子易進難出,通過對Floating Gate充放電子,來對晶體管進行寫入和擦除。
在源極( Source)和漏極( Drain)之間電流單向傳導的半導體上形成存儲電子的浮柵,浮柵上下被絕緣層包圍,存儲在裡面的電子不會因為掉電而消失,所以快閃記憶體是非易失性存儲器。
下圖是浮柵晶體管的寫和擦除的原理。
寫操作如左圖,是在上面的控制柵極加正電壓Vpp,使電子通過絕緣層進入浮柵。擦除操作正好相反 ,如右圖,是在襯底加正電壓Vpp,把電子從浮柵中吸出來 。寫入的過程是充電子的過程,如果寫入的page之前已經寫過,在寫入之前,必須先對flash進行擦除0,清除浮柵中的電子。
數據是以0和1二進位進行保存的,根據浮柵中有沒有電子兩種狀態,可以表示數據的0和1,這樣就可以進行數據的存儲。一般把有電子的狀態記為0,沒有電子的狀態記為1。
2.2 快閃記憶體的分類
根據製作工藝,快閃記憶體存儲器可以分為NOR型和NAND型。
NOR型是為了替代EEPROM而設計,可以按位或者按位元組進行訪問,NOR型快閃記憶體晶元具有可靠性高、隨機讀取速度快的優勢,但擦除和編程速度較慢,容量小,主要用於存儲可執行的成都代碼。
NAND快閃記憶體容量大,按頁進行讀寫,容量大,適合進行數據存儲。本文介紹都是基於NAND flash。
2.3 NAND flash的擦除、讀、寫
- 擦除,在襯底施加電壓足夠長的時間,把電子從浮柵中吸出來,擦除之後,整個block的數據都變成了1。由於一個block共用一個襯底,所以在擦除時,一次擦除一個block,即擦除的單位為block。
- 寫,寫的過程是對浮柵充電子,也稱為編程。寫之前需要先進行擦除,由於擦除之後,數據都變成了1,所以需要對要寫入0的浮柵進行充電。
- 讀,讀取的時候,對晶體管施加一個低電壓,如果浮柵中沒有電子,那麼管子就是導通的,讀到1;如果浮柵中有電子,管子不導通,讀到0。讀取數據時,因為是否有電子會影響到管子的導通性,所以可以利用電流感應浮柵里電子捕獲量的多寡,靠感應強度轉換成二進位的0與1。
2.4 快閃記憶體的內部組織架構
如下圖的快閃記憶體的內部組織架構:
- 1個Chip/Device -> 多個DIE或者LUN
- 1個DIE/LUN -> 多個Planes
- DIE/LUN是接收和執行快閃記憶體命令的基本單元
- 1個Plane -> 上千個Blocks
- 每個Plane有獨立的register,一個Page register,一個Cache register
- 1個Block -> 上百個Pages
- Block是擦除的基本單位
- 1個Page -> 一般是4KB 或者 8 KB + 幾百個位元組的隱藏空間
- Page是讀或者寫的基本單位
- Cells -> flash存儲信息的基本單位,根據每個cell可以保存1bit, 2bit, 3bit可以分為SLC, MLC, TLC
2.5 3D NAND FLASH
傳統的Flash,是以二維的方式組成的,主要由word line(WL)和bit line(BL)組成,如下圖。一條word line代表一個page,在讀寫的時候,bit line控制word line上的每一個bit。這樣的word line和bit line交叉,組成了一個block。block平鋪組成了flash。
隨著快閃記憶體技術製造工藝的發展,二維快閃記憶體的尺寸不斷縮小,單元間的干擾隨尺寸的縮小不斷變大。3D Nand Flash技術的出現,有效的解決了單元干擾的問題。
下圖是一種3D快閃記憶體的立體圖,在這種三維快閃記憶體中,flash堆疊了起來。如果2D Nand Flash比作平房,那麼3D Nand Flash可以看做是樓房,3D Nand Flash可以通過提高flash的層數在單位面積上堆更多的晶體管。3D Nand Flash在單位面積堆更多的存儲單元,在降低每bit成本上很有優勢。
3. SSD的特性?
3.1 讀寫不平衡
讀的速度很快;寫入數據時,因為需要通過加壓的方式對存儲單元進行電子填充,所以速度略慢;擦除速度最慢,擦除塊的時間在ms級。在使用SSD的時,需要考慮到SSD的讀寫不平衡的特性。
3.2 先擦後寫
Nand Flash的寫入以page為單位,擦除以block為單位。在Page頁寫入之前,必須要將page頁所在的block塊擦除。這個是由Nand Flash的工作原理決定的。
3.3 塊擦頁寫
一個Wordline對應著一個或若干個Page,具體是多少取決於是SLC、 MLC或者TLC。對SLC來說,一個Word line對應一個Page; MLC則對應2個Page,這兩個Page是一對( Lower Page和Upper Page); TLC對應3個Page( Lower Page、 Upper Page和Extra Page,不同快閃記憶體廠家叫法不一樣)。一個Page有多大,那麼Wordline上面就有多少個存儲單元,就有多少個Bitline。寫入以頁為單位。
一個Block當中的所有這些存儲單元都是共用一個襯底的。當對襯底施加強電壓,上面所有浮柵級的電子都會被吸出來。所以擦除是以塊為單位的。
3.4 壽命有限
每個NAND Block都有擦寫次數的限制,當超過這個次數時,該Block可能就不能用了:浮柵極充不進電子(寫失敗),或者浮柵極的電子很容易就跑出來(比特翻轉,0->1),或者浮柵極裡面的電子跑不出來(擦除失敗)。這個最大擦寫次數按SLC,MLC,TLC依次遞減:SLC的擦寫次數可達十萬次,MLC一般為幾千到幾萬,TLC降到幾百到幾千。
3.5 SLC/MLC/TLC
根據一個存儲單元可以存儲多少bit的數據,快閃記憶體單元可以分為SLC(Single Level Cell)、MLC(Multiple Level Cell)、TLC(Triple Level Cell)。
上圖是快閃記憶體晶元裡面存儲單元的閾值電壓分布函數,橫值是閾值電壓,縱軸是存儲單元數量。
一個存儲單元電子劃分得越多,那麼在寫入的時候,控制進入浮柵極的電子個數就要越精細,所以寫耗費的時間就越長;同樣的,讀的時候,需要嘗試用不同的參考電壓去讀取,一定程度上加長了讀取時間。在性能上, TLC不如MLC, MLC不如SLC。 在壽命上,SLC > MLC > TLC。在價格上 SLC > MLC > TLC。下表是SLC、MLC、TLC的一些參數比較,數據比較舊了,但是對比趨勢不變。現在還出現了一種QLC,一個快閃記憶體單元可以儲存4個bit的數據。
快閃記憶體類型SLCMLCTLC每單元bit數123每單元表示的狀態248擦除次數(k)10031讀取時間(us)305075寫入時間(us)3006001000擦除時間(us)150030004500
4. SSD的FTL
FTL是Flash Translation Layer的縮寫,是SSD的一個重要組成部分,實現了以下功能:
- Interface Adapter: 在內部FTL中主要關聯eMMC/SCSI/SATA/PCIe/NVMe等介面,而在外部FTL中主要關聯Linux Block Device。
- Address Translation: 地址映射,也可以叫做mapping,負責邏輯地址和物理地址之間的映射,多技術模塊都以該機製為核心進行。眾所周知,Nand Flash具有寫時擦除的特性,因此寫入數據時不得不異地更新。
- Garbage Collection: 垃圾回收,簡稱GC,回收異地更新產生的臟數據所佔空間的回收工作。
- Wear Leveling: 磨損均衡,簡稱WL,避免某一個Nand Block很快壞去,使所有Block的PE Cycle均衡發展。因為flash的擦寫次數是有限制的,如果不進行磨損均衡,整個SSD的有些block可能擦寫次數不平衡很快壞去。
- Power off Recovery: 掉電恢復,簡稱POR。正常掉電,SSD會把緩存中的數據刷新到快閃記憶體,重新載入保存的數據即可。如果是異常掉電,因為某些人為或自然外力的原因導致數據沒有成功寫入到Nand中,掉電恢復要恢復到掉電前的安全狀態,比如恢復RAM中的數據和Address Translation中的映射表。
- Parallelization and Load Balancing: 在前面的2.4小節的快閃記憶體的內部組織架構介紹中,可以知道SSD中存在的一定的並發性,利用這些並發性可以提供SSD的並發請求處理能力,提高其性能。
- Cache Manager: Cache不僅可以存放用戶數據,也可以存放FTL Metadata,對系統的整體性能有著天然的優勢。
- Error Handler: 處理讀寫操作中遇到的Fatal Error或ECC Error狀況,以及Bad Block或Weak Block的管理。
在下一篇文章《帶你了解SSD(2)-FTL》中,會詳細的介紹FTL的各功能。
Notes
作者:網易存儲團隊攻城獅 陳威
如有理解和描述上有疏漏或者錯誤的地方,歡迎共同交流;參考已經在參考文獻中註明,但仍有可能有疏漏的地方,有任何侵權或者不明確的地方,歡迎指出,必定及時更正或者刪除;文章供於學習交流,轉載註明出處
5 參考文獻
[1] SSDFans.深入淺出SSD:固態存儲核心技術、原理與實戰[M].北京:機械工業出版社,2018.6.
[2] http://codecapsule.com/2014/02/12/coding-for-ssds-part-1-introduction-and-table-of-contents/
[3] http://www.ssdfans.com/blog/2018/02/02/ftl那些事(0)之寫在前面的話/
推薦閱讀:
※銘瑄M.2固態讀寫速度飛起 不換系統換固態升級
※簡單談下我國的固態硬碟業
※固態硬碟SSD,越大越好?
※HP EX900 250G實測----小身板有大智慧!
※地表最強吃雞裝備竟然是SSD