因爲本人研究生期間是system方向又大概率是和存儲相關的,因此開個貼專門記錄順便科普一下學到的知識
這次的主題——SSD是看了師兄之前做的存儲入門PPT纔有的想法,感謝師兄
直接進入正題
SSD用的是NAND閃存芯片來存儲數據,我們都知道,計算機存儲和處理的數據都是0或1,NAND中的數據也不例外,NAND是通過穿隧注入(Tunnel injection)寫入,以及穿隧釋放(Tunnel release)抹除數據的。這裏具體的技術細節有些偏半導體物理方面了。想要具體瞭解的朋友可以看這篇文章
https://zhuanlan.zhihu.com/p/77492720
https://zhuanlan.zhihu.com/p/79101599
NAND閃存芯片有三個特點:
- 不能覆蓋寫入,必須先擦除才能寫
- 壽命有限,一塊閃存芯片僅能寫入有限次就會報廢
- 可能比特翻轉(存儲的二進制比特無預警地改變其值)/長時間不通電數據可能丟失
NAND有四種常見的類型SLC,MLC,TLC,QLC,由閃存芯片內的單個存儲單元(cell)可編碼比特數進行分類。閃存芯片原本只能在一個cell存放一個bit,爲了進一步提升容量,後來漸漸發展到可以存放兩個bit、三個bit,甚至四個bit。這樣一來,相同數量的cell就能存放更多的數據,但這是有代價的。
![]()
NAND分類
![]()
SLC、MLC和TLC參數比較
可以看到,存儲密度最小的SLC,無論是性能還是壽命,都要比MLC、TLC要更好。這也是分層存儲體系的體現。空間、性能永遠無法兼顧。當然,科研喜歡做trade-off,如果想既要容量,又要空間,我們可以在TLC盤裏面找一些cell變成SLC,那些cell用來處理熱數據,作爲SSD的cache。很多SSD測評會提到緩外速度,就是寫入容量大於cache的容量後的寫入速度。
回顧HDD,它的讀寫粒度是512B,那麼SSD呢?一般來說,一塊閃存芯片的結構如圖所示,大概分成LUN,Plane,Block、Page這幾個級別,最小的粒度,page,就是SSD的讀寫粒度。這個粒度不同的SSD有些區別,在4K、8K,16KB不等。可以發現,這個粒度要比機械硬盤大很多。這會有一個問題:寫放大問題。我可能指向寫一個byte,但是實際在硬件中就寫入了一個頁,這樣無論是性能還是對硬件壽命都非常不好。
![]()
閃存內部組織架構
因此對於這樣的閃存芯片,我們不能夠不加任何中間層就使用,試想一下,如果我重複讀寫某一個閃存芯片,某一個閃存芯片就先壞了,顯然是對用戶非常不友好的。所以,現在的每個SSD,都有一個這樣的中間層:FTL(Flash Translation Layer),FTL通過地址轉換將用戶的寫請求轉換到實際的閃存芯片上,並還包含有多種功能。FTL算法的優劣與否,直接決定了SSD在性能、可靠性、耐用性的好壞。
![]()
FTL作用
磨損均衡:重複讀寫相同地址的數據塊時,適當地將讀寫操作進行重定向以防止某個閃存芯片壽命降低過快。
垃圾回收:將SSD中的碎片數據整合到一起,這樣就可以騰出一些空閒的閃存芯片。這個垃圾回收過程,和我們在PC上執行的垃圾回收完全不同。它是完全由SSD內部的FTL來執行的。那爲什麼是在SSD內部而不是操作系統層面進行垃圾回收呢?這是因爲考慮到邏輯塊地址(LBA)尋址到SSD內部,還要經過一層地址翻譯。我怎麼知道LBA尋址時連續的空間,在SSD上就一定連續存放呢?所以,關於SSD的垃圾回收,就交給SSD自己吧。
![]()
SSD GC示意圖
既然提到了地址轉換,那麼就有兩個問題
- 轉換的粒度是什麼?
- 轉換表存在哪裏?
對於比較高端的SSD來說,會把FTL映射表完整地放入DRAM中,通常需要按照1GB:1MB的比例配置DRAM緩存。因此:
- 讀寫粒度:以頁爲單位
- 寫路徑:在SSD中的DRAM完成一次地址翻譯,然後寫入物理閃存,讀與寫類似
所以,在讀寫時就存在一次用於地址翻譯的DRAM讀和一次閃存的讀/寫
![]()
帶DRAM的SSD架構
那我們再來看看比較低端的SSD(或者是U盤)
- 讀寫粒度:以塊爲單位,如之前提到的閃存內部組織架構圖所示,一個塊=256個頁,如果一個頁是4K那讀寫粒度就是1MB起步了。對於隨機小數據寫任務來說,就會帶來大量的寫放大,本來可能只需要寫幾個字節的數據,結果因爲這幾個字節分佈比較遠,最終實際上寫了幾MB的數據。
- 寫路徑:因爲SSD中沒有映射表,所以如果發生了cache miss則需要去閃存裏找地址映射表,這樣訪問一次就變成了訪問兩次。讀與寫類似。
![]()
不帶DRAM的SSD架構
現在隨着SSD的發展,延遲越來越小,帶寬越來越大,原來爲HDD而設計的總線和協議,現在已經成爲了系統的瓶頸本身。因此,我們從SATA總線(600MB/s)切換到了PCIe總線(PCIe3.0×16=16GB/s),從AHCI協議切換到了併發性更強的NVMe協議,進一步釋放SSD的性能潛力。關於協議和總線本篇不再贅述,不過之後可能會寫一寫關於Disaggregated Memory中的RDMA,CXL相關的內容。
接下來再介紹學術界對於SSD的一些前沿研究
Liao X, Lu Y, Xu E, et al. Write dependency disentanglement with {HORAE}[C]//14th USENIX Symposium on Operating Systems Design and Implementation (OSDI 20). 2020: 549-565.
這篇文章來自清華存儲實驗室。發表在OSDI20上(系統頂會)。核心思想是將控制流和數據流分離,先將一些關鍵的元數據串行寫到cache中,然後將要寫入的數據並行寫入到SSD中來獲得性能提升
Yang Z, Lu Y, Xu E, et al. CoinPurse: a device-assisted file system with dual interfaces[C]//2020 57th ACM/IEEE Design Automation Conference (DAC). IEEE, 2020: 1-6.
這篇文章同樣來自清華存儲實驗室,發表在DAC20上。提出了一個SSD上的Log-structed File System。將DRAM用PMEM替換,因爲DRAM斷電會丟失信息,並聚合片上 NVM 中的小數據寫入以避免昂貴的同步 I/O,極大提高了I/O性能。
Yoo S, Shin D. Reinforcement {Learning-Based}{SLC} Cache Technique for Enhancing {SSD} Write Performance[C]//12th USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage 20). 2020.Yang P, Xue N, Zhang Y, et al. Reducing garbage collection overhead in {SSD} based on workload prediction[C]//11th USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage 19). 2019.
剛剛提到SSD裏面SLC速度快,MLC、TLC空間大,所以在TLC裏面混用SLC又變成了一個可以做的科研話題,做系統其實就是各種權衡取中間態。HotStorage 20有一篇用強化學習做cache算法。另外之前提到的SSD中的垃圾回收其實會阻塞I/O請求,很影響性能,所以HotStorage又有工作去用ML去預測數據塊的熱度然後聚類放到同一個block,這樣子數據不至於這麼亂,GC的時候因爲數據整齊一些也比較容易。
Jaffer S, Mahdaviani K, Schroeder B. Improving the Reliability of Next Generation {SSDs} using {WOM-v} Codes[C]//20th USENIX Conference on File and Storage Technologies (FAST 22). 2022: 117-132.
這篇文章提出了非二進制、基於電壓的一次寫入存儲器 (WOM-v) 代碼的設計和實現,以提高 QLC 驅動器的使用壽命。這篇文章是FAST22的best paper,但是這個WOM-v比較複雜,我也沒太看懂。
Lu R, Xu E, Zhang Y, et al. Perseus: A {Fail-Slow} Detection Framework for Cloud Storage Systems[C]//21st USENIX Conference on File and Storage Technologies (FAST 23). 2023: 49-64.
通過監控設備的延遲(latency)/吞吐量(throughput)來判斷一個設備是否出現了性能下降的問題。並構建了fail-slow數據集,分析了性能下降的根本原因。在大型集羣中很有用,因爲不需要做侵入性的修改,只需要分析日誌即可。
總結:我們從SSD底層存儲數據的芯片開始談起,從下到上,從硬件到軟件探索了SSD的NAND芯片分類,讀寫原理,FTL中的算法和一些前沿研究。對於普通消費者來說,我們需要的可能只是一塊打開盒子,拿出來固定到主板上就可以用的硬盤,但是這背後是很多科研人員和工程師們的智慧和努力。
最後感謝師兄做的PPT,這篇文章很多內容copy自他的PPT。因爲我也纔剛剛接觸這個領域,所以如果文章有錯誤或者大家對哪裏有疑問請儘管指出。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
