前面幾篇文章雾叭,主要圍繞的是機械硬盤來說的夷陋。目前ssd目前應(yīng)用也越來越廣了,值得我們花精力琢磨琢磨汤纸。SSD硬盤是地地道道電子技術(shù)下的產(chǎn)品衩茸,因為不像機械硬盤IO時依賴兩個耗時的機械軸行為:磁盤旋轉(zhuǎn),以及磁道尋道贮泞,SSD硬盤的訪問延遲要比機械硬盤要低的多楞慈,在隨機IO下的表現(xiàn)尤其明顯。我們今天從最底層出發(fā)隙畜,看看SSD的幾個內(nèi)部機理抖部。
SSD的組成結(jié)構(gòu)
機械硬盤和ssd雖然都同為硬盤说贝,但底層實現(xiàn)技術(shù)卻完全不一樣议惰,機械硬盤使用的是磁性材料記憶,而SSD用的是類似u盤的閃存技術(shù)乡恕。實現(xiàn)技術(shù)的不同言询,必然在硬盤內(nèi)部結(jié)構(gòu)上他們就有天壤之別。他們的果照對比如下圖所示:
不像機械硬盤里的一摞子圓形碟片傲宜,SSD是由一些電路和黑色的存儲顆粒構(gòu)成运杭。SSD硬盤是基于NAND Flash存儲技術(shù)的,屬于非易失性存儲設(shè)備函卒,換成人話說辆憔,就是掉電了數(shù)據(jù)不會丟。其中我們眼睛看見的黑色的存儲顆粒叫一個NAND Package,每個Package里面會包含多個Die虱咧。 我們“拆開”一個Die來看一下
每個Die有若干個Plane熊榛,每個Plane有若干個Block,每個Block有若干個Page腕巡。Page是磁盤進行讀寫的最小單位玄坦,一般為2KB/4KB/8KB/16KB等。
SSD里的扇區(qū)
前面我們介紹機械硬盤的時候绘沉,說到由于歷史原因煎楣,操作系統(tǒng)等軟件里,512KB扇區(qū)的概念是“根深蒂固”车伞。新的機械硬盤雖然把物理扇區(qū)已經(jīng)做到4KB的了择懂,但沒辦法,為了兼容老系統(tǒng)還得整出個邏輯扇區(qū)的概念來適配另玖。到了SSD里也一樣休蟹,雖然每一個物理Page的大小為2K到16K不等,但是為了兼容性日矫,也必須得整出個邏輯扇區(qū)才行赂弓。
SSD控制器在邏輯上會把整個磁盤再重新劃分成一個個的“扇區(qū)”,采用和新機械硬盤一樣的LBA方式來進行編址(整個磁盤的扇區(qū)從0到某個最大值方式排列哪轿,并連成一條線)盈魁。當需要讀取某幾個"扇區(qū)"上數(shù)據(jù)的時候,SSD控制器通過訪問這個LBA MapTable,再來找到要實際訪問的物理Page窃诉,如下圖:
不過SSD最小的讀寫單位就是Page杨耙,他是沒辦法只扇區(qū)來進行讀寫的。
最底層的閃存單元
上面我們看到SSD是由一個個的Page組曾飘痛。而在每一個Page里珊膜,又包含了許許多多的閃存單元⌒觯〕的現(xiàn)代的閃存單元有多種類型,目前主流的主要分為SLC塑猖、MLC和TLC竹祷。
在SLC里,一個單元的電壓只分成高低兩種狀態(tài)羊苟,所以只能表示1bit數(shù)據(jù)塑陵。到了MLC,硬是把一個單元里的電壓按照高低分成了四種狀態(tài)蜡励,所以可以表示2bit令花。到了TLC阻桅,直接一個單元應(yīng)拆分成8個電壓高低不同的狀態(tài),為了表示3bit兼都。由于TLC在數(shù)據(jù)讀寫需要八種不同電壓狀態(tài)鳍刷,而施加不同的電壓狀態(tài)、 就需要更精確俯抖,也就需要更長的時間才能得以實現(xiàn)输瓜。另外由于電壓狀態(tài)多,出錯的可能性也會更大芬萍。所以尤揣,以上三種閃存單元對比:從性能和穩(wěn)定性角度來看,SLC最好柬祠。從容量角度看北戏,TLC最大。這就是為什么日常我們看到的工業(yè)級的SSD要比筆記本SSD要貴很多漫蛔,其中一個很重要的原因就是工業(yè)級的盤往往采用的閃存單元是SLC或MLC嗜愈,而我們家用的筆記本一般都是TCL,因為便宜嘛莽龟。我們從用表格再對它們直觀對比一下:
閃存類型 | 單cell電壓變化 | 單cell表示bit數(shù) | 速度 | 擦寫次數(shù) | 價格 |
---|---|---|---|---|---|
SLC(Single-Level Cell) | 兩種 | 1bit | 快 | 約10W次 | 貴 |
MLC(Multi-Level Cell) | 四種 | 2bit | 一般 | 約3K次 | 一般 |
TLC(Trinary-Level Cell) | 八種 | 3bit | 慢 | 約1K次 | 便宜 |
目前個人PC上消費用的主流閃存類型大部分都是TLC的蠕嫁,因為價格便宜,容量大毯盈。
思考
- 假設(shè)某SSD的Page大小是4KB剃毒,一個文件是16KB。那么該文件是存在一個黑色的存儲顆粒里,還是多個搂赋?
我們先把SSD的邏輯結(jié)構(gòu)用個直觀一點的圖來看:
假設(shè)只寫在一個顆粒里赘阀,那么對該文件進行讀取的時候,就只能用到一條Flash通道脑奠,這樣速度就會比較慢基公。如果存在相鄰的4個block里,每個寫入4KB宋欺。這樣多個Flash通道的帶寬會充分發(fā)揮出來轰豆,傳輸速度也更快。所以迄靠,實際中是分散在多個秒咨。
歡迎搜索微信公眾號:開發(fā)內(nèi)功修煉