簡介
我想為我的鍵值對儲存專案弄一個固態硬碟(SSD)最佳儲存解決方案。為此,我必須確保我完全瞭解SSD是如何工作的,這樣就可以優化我的hash表例項來適合SSD的內部特徵。網上有很多不完全和相悖的的資訊,找到關於SSD的可靠資訊並不簡單。為了找到適當的文獻和基準以說服自己,我必須要進行大量的閱讀。如果我要為SSD程式設計,我需要知道我在做什麼。
研究完之後我搞明白了,相信將我所得到的結論向大家分享會有用的。我的意圖是將所有的可用資訊轉化為實用知識。最後我寫了一篇30頁的文章,但它不太適合釋出在部落格上。因此我決定將這篇文章分為數個可被獨立消化的數個邏輯部分。而目錄在本文的下方。
第六部分有最為顯著的貢獻,這一部分是整個“為SSD程式設計”文章系列的總結,我相信那些心急的程式設計師最為喜歡。這個總結涵蓋了SSD的基本知識以及所有推薦的實現固態硬碟的最佳讀寫效能的訪問模式。
另外一個重要的細節是,“為SSD程式設計”與我的鍵值對儲存專案(IKVS series)之間是相互獨立的,因此並不需要IKVS文章中的知識。我正打算寫一篇關於IKVS series的文章,內容是關於 如何用hash表來實現利用SSD的內部特徵,不過我還沒有具體的釋出時間。
我唯一的遺憾就是,我還沒有寫任何程式碼,以證明我建議的訪問模式確實是最好的。但是即使有這些程式碼,我也需要在大量不同的固態硬碟上測試效能基準,這將消耗我所不能承受的大量的時間和金錢。我仔細列舉了我引用的文章,如果你認為我的建議不對,請留下評論指明。當然,如果你有什麼疑問或想在任何方面做出貢獻,請隨意留下評論。
最後,不要忘了訂閱電子報,以便在每當有新文章發表在Code Capsule上時能夠收到通知。訂閱皮膚在部落格的右上角。
目錄
1. SSD的結構
1.1 NAND快閃記憶體單元
1.2 SSD的組織
1.3 製造過程
2. 基準和效能指標
2.1 基本基準
2.2 預處理
2.3 任務負載和指標
3. 基本操作
3.1 讀、寫、擦除
3.2 寫入的例子
3.3 寫入放大
3.4 耗損均衡
4. 快閃記憶體轉換層(FTL)
4.1 FTL的必要性
4.2 邏輯塊對映
4.3 產業狀態的備註
4.4 垃圾回收
5. 高階功能
5.1 TRIM
5.2 預留空間
5.3 完全抹除
5.4 本地命令佇列(NCQ)
5.5 掉電保護
6. SSD的內部並行
6.1 被限制的I/O匯流排頻寬
6.2 多層並行
6.3 塊的叢集
7. 訪問模式
7.1 定義順序和隨機I/O操作
7.2 寫入
7.3 讀出
7.4 合併讀寫
8.系統操作
8.1 分割槽對齊
8.2 檔案系統引數
8.3 作業系統I/O排程
8.4 交換空間
8.5 臨時檔案
下一部分