前面幾篇文章,主要圍繞的是機械硬盤來說的。目前ssd目前應用也越來越廣了,值得我們花精力琢磨琢磨。SSD硬盤是地地道道電子技術下的產品,因為不像機械硬盤IO時依賴兩個耗時的機械軸行為:磁盤旋轉,以及磁道尋道,SSD硬盤的訪問延遲要比機械硬盤要低的多,在隨機IO下的表現尤其明顯。我們今天從最底層出發,看看SSD的幾個內部機理。
SSD的組成結構
機械硬盤和ssd雖然都同為硬盤,但底層實現技術卻完全不一樣,機械硬盤使用的是磁性材料記憶,而SSD用的是類似u盤的閃存技術。實現技術的不同,必然在硬盤內部結構上他們就有天壤之別。他們的果照對比如下圖所示:
不像機械硬盤里的一摞子圓形碟片,SSD是由一些電路和黑色的存儲顆粒構成。SSD硬盤是基於NAND Flash存儲技術的,屬於非易失性存儲設備,換成人話說,就是掉電了數據不會丟。其中我們眼睛看見的黑色的存儲顆粒叫一個NAND Package,每個Package里面會包含多個Die。 我們“拆開”一個Die來看一下
每個Die有若干個Plane,每個Plane有若干個Block,每個Block有若干個Page。Page是磁盤進行讀寫的最小單位,一般為2KB/4KB/8KB/16KB等。
SSD里的扇區
前面我們介紹機械硬盤的時候,說到由於歷史原因,操作系統等軟件里,512KB扇區的概念是“根深蒂固”。新的機械硬盤雖然把物理扇區已經做到4KB的了,但沒辦法,為了兼容老系統還得整出個邏輯扇區的概念來適配。到了SSD里也一樣,雖然每一個物理Page的大小為2K到16K不等,但是為了兼容性,也必須得整出個邏輯扇區才行。
SSD控制器在邏輯上會把整個磁盤再重新划分成一個個的“扇區”,采用和新機械硬盤一樣的LBA方式來進行編址(整個磁盤的扇區從0到某個最大值方式排列,並連成一條線)。當需要讀取某幾個"扇區"上數據的時候,SSD控制器通過訪問這個LBA MapTable,再來找到要實際訪問的物理Page,如下圖:
不過SSD最小的讀寫單位就是Page,他是沒辦法只扇區來進行讀寫的。
最底層的閃存單元
上面我們看到SSD是由一個個的Page組曾。而在每一個Page里,又包含了許許多多的閃存單元。。現代的閃存單元有多種類型,目前主流的主要分為SLC、MLC和TLC。
在SLC里,一個單元的電壓只分成高低兩種狀態,所以只能表示1bit數據。到了MLC,硬是把一個單元里的電壓按照高低分成了四種狀態,所以可以表示2bit。到了TLC,直接一個單元應拆分成8個電壓高低不同的狀態,為了表示3bit。由於TLC在數據讀寫需要八種不同電壓狀態,而施加不同的電壓狀態、 就需要更精確,也就需要更長的時間才能得以實現。另外由於電壓狀態多,出錯的可能性也會更大。所以,以上三種閃存單元對比:從性能和穩定性角度來看,SLC最好。從容量角度看,TLC最大。這就是為什么日常我們看到的工業級的SSD要比筆記本SSD要貴很多,其中一個很重要的原因就是工業級的盤往往采用的閃存單元是SLC或MLC,而我們家用的筆記本一般都是TCL,因為便宜嘛。我們從用表格再對它們直觀對比一下:
閃存類型 | 單cell電壓變化 | 單cell表示bit數 | 速度 | 擦寫次數 | 價格 |
---|---|---|---|---|---|
SLC(Single-Level Cell) | 兩種 | 1bit | 快 | 約10W次 | 貴 |
MLC(Multi-Level Cell) | 四種 | 2bit | 一般 | 約3K次 | 一般 |
TLC(Trinary-Level Cell) | 八種 | 3bit | 慢 | 約1K次 | 便宜 |
目前個人PC上消費用的主流閃存類型大部分都是TLC的,因為價格便宜,容量大。
思考
- 假設某SSD的Page大小是4KB,一個文件是16KB。那么該文件是存在一個黑色的存儲顆粒里,還是多個?
我們先把SSD的邏輯結構用個直觀一點的圖來看:
假設只寫在一個顆粒里,那么對該文件進行讀取的時候,就只能用到一條Flash通道,這樣速度就會比較慢。如果存在相鄰的4個顆粒里,每個寫入4KB。這樣多個Flash通道的帶寬會充分發揮出來,傳輸速度也更快。所以,實際中是分散在多個。
開發內功修煉之硬盤篇專輯:
- 1.磁盤開篇:扒開機械硬盤堅硬的外衣!
- 2.磁盤分區也是隱含了技術技巧的
- 3.我們怎么解決機械硬盤既慢又容易壞的問題?
- 4.拆解固態硬盤結構
- 5.新建一個空文件占用多少磁盤空間?
- 6.只有1個字節的文件實際占用多少磁盤空間
- 7.文件過多時ls命令為什么會卡住?
- 8.理解格式化原理
- 9.read文件一個字節實際會發生多大的磁盤IO?
- 10.write文件一個字節后何時發起寫磁盤IO?
- 11.機械硬盤隨機IO慢的超乎你的想象
- 12.搭載固態硬盤的服務器究竟比搭機械硬盤快多少?
我的公眾號是「開發內功修煉」,在這里我不是單純介紹技術理論,也不只介紹實踐經驗。而是把理論與實踐結合起來,用實踐加深對理論的理解、用理論提高你的技術實踐能力。歡迎你來關注我的公眾號,也請分享給你的好友~~~