【大話存儲(chǔ)II】學(xué)習(xí)筆記(2章)侍郭, SSD

我們知道機(jī)械硬盤最大的缺點(diǎn)在于,尋道時(shí)間比較長,也就是不適合隨機(jī)小塊IO亮元。所以這幾年固態(tài)存儲(chǔ)大行其道猛计,因?yàn)樗鼘θ魏蔚刂吩L問的開銷都相等,節(jié)省了機(jī)械尋道時(shí)間爆捞,所以隨機(jī)IO性能很好奉瘤。

當(dāng)前的SSD硬盤,單塊SSD的大塊連續(xù)讀吞吐量超過了350MB/s煮甥,寫超過了210MB/s盗温,甚至4K塊隨機(jī)讀吞吐量超過了200MB/s,寫超過了180MB/s成肘,隨機(jī)讀IOPS超過了600卖局,隨機(jī)IO延遲不超過1ms。這種速度滿足當(dāng)前主流的架構(gòu)不成問題双霍。

SSD固態(tài)硬盤的硬件組成

SSD(Solid State Drive):是一種利用Flash芯片或者DRAM芯片作為數(shù)據(jù)永久存儲(chǔ)的硬盤砚偶。所以不再使用磁技術(shù)來存儲(chǔ)數(shù)據(jù)。

  • 利用DRAM作為永久存儲(chǔ)介質(zhì)的SSD洒闸,又稱為RAM-Disk染坯,使用DRAM內(nèi)存條來存儲(chǔ)數(shù)據(jù),所以在外部電池?cái)嚅_后丘逸,需要使用電池來維持DRAM中的數(shù)據(jù)单鹿。

  • 基于Flash介質(zhì)的SSD:使用“浮動(dòng)門場效應(yīng)晶體管”的晶體管來保存數(shù)據(jù),每個(gè)這樣的晶體管叫做一個(gè)“Cell”鸣个,即單元羞反。有兩種類型的單元:

    • Single Level Cell(SLC):每個(gè)單元可以保存1B的數(shù)據(jù)

    • Mult Level Cell(MLC):每個(gè)單元可以保存2B的數(shù)據(jù)。所以MLC容量是SLC的兩倍囤萤,成本卻與SLC大致相當(dāng)。但因?yàn)镸LC的每個(gè)單元需要存儲(chǔ)2B是趴,所以復(fù)雜度比較高涛舍,出錯(cuò)率自然比較高。

Flash 芯片

Cell

本節(jié)我們介紹一下Cell的構(gòu)成唆途,這就是SSD可以在掉電后不丟失信息的原因

image.png

SSD是由浮動(dòng)門構(gòu)成的富雅,所謂浮動(dòng)門是一個(gè)邏輯電路,四周被$SiO_2$包裹著肛搬。在Word Line(字線)上抬高電勢没佑,電子存儲(chǔ)在浮動(dòng)門中,字線恢復(fù)電勢温赔,電子不會(huì)丟失蛤奢,也就是說浮動(dòng)門仍然是充電的。

那么什么時(shí)候狀態(tài)為0,什么時(shí)候狀態(tài)為1呢啤贩?充電到一定電勢的后表示0待秃,電勢降到一定的閾值以后,表示為1痹屹。

在前面我們說過章郁,MLC可以在一個(gè)Cell里面保存多位,也就是一個(gè)Cell可以有多種電勢閾值志衍,這樣就可以表示00,01,11,10 4種狀態(tài)暖庄。

Cell串

把多個(gè)Cell串聯(lián)起來,就組成了Cell串楼肪。對每個(gè)cell串雄驹,每次只能讀寫其中一個(gè)Cell,所以我們會(huì)把多個(gè)Cell串并聯(lián)起來淹辞,并行操作医舆,這樣就可以讀多位數(shù)據(jù)呢。

image.png

NADD就是由這種晶體管有序排列起來的Flash芯片象缀。每43148=34512個(gè)Cell組成一個(gè)Page蔬将,當(dāng)然這只是邏輯上,它是IO的最小單位央星。每個(gè)Page可以存放4KB的內(nèi)容*霞怀。

每128個(gè)Page組成一個(gè)Block,每2048個(gè)Block組成一個(gè)Plane區(qū)域莉给。而一個(gè)Flash芯片由兩個(gè)區(qū)域組稱毙石,一個(gè)存儲(chǔ)奇數(shù)序號,另一個(gè)存儲(chǔ)偶數(shù)序號颓遏。

image.png

SSD固態(tài)盤的構(gòu)成

上面我們講解了NAND Flash芯片的主要構(gòu)成部分徐矩,現(xiàn)在我們來看SSD固態(tài)盤的整體構(gòu)成。

下圖為Intel X-25M固態(tài)硬盤的拆機(jī)圖叁幢。里面包含:

  • 10片NAND Flash芯片
  • SSD控制器
  • RAM Buffer
image.png

SSD控制器芯片負(fù)責(zé)向所有的NAND Flash芯片執(zhí)行讀寫任務(wù)滤灯,同樣也就通過指令的方式來運(yùn)作,因?yàn)榈刂沸畔⒑蛿?shù)據(jù)信息都在這8位的總線上傳送曼玩,加上總線位寬太窄鳞骤,所以一個(gè)簡單的尋址都需要多個(gè)時(shí)鐘周期才能僅完成。

我們知道芯片容量越大黍判,地址就會(huì)越長豫尽,尋址時(shí)間也就會(huì)越長,對小塊隨機(jī)IO顷帖,F(xiàn)lash會(huì)隨著容量的增加而變得越來越低效美旧。

image.png

讀寫數(shù)據(jù)流程

下面來看一下讀寫操作都需要做哪些工作渤滞?

如何讀數(shù)據(jù)

當(dāng)需要讀某個(gè)Page時(shí),F(xiàn)lash控制器將這個(gè)Page的字線組電勢置為0陈症,可以將電勢值解碼成1或者0蔼水,放到SSD的RAM Buffer中。

從上述過程就可以看出SSD的最小IO單位為1個(gè)Page

image.png

如何寫數(shù)據(jù)

Flash芯片要求在修改一個(gè)Cell中的位之前录肯,必須擦除這個(gè)Cell趴腋。其實(shí)這個(gè)擦除動(dòng)作就是將一個(gè)Block一下全放電。也就是每次擦除只能一下擦除整個(gè)Block论咏,將所有的Cell全置1优炬。

這就是SSD的一個(gè)非常致命的缺點(diǎn),它不能單獨(dú)擦除某個(gè)Page或者Cell

擦除完畢以后厅贪,SSD會(huì)以Page為單位進(jìn)行寫入蠢护。


image.png

SSD的問題

SSD天然的缺陷

Flash芯片在寫入數(shù)據(jù)的時(shí)候有很多效率低下的地方,這是Flash芯片的通病

  • 擦除前需要將整個(gè)Block清掉(Erase before overwrite)

    上面我們講到過如果要寫入數(shù)據(jù)养涮,必須先Erase整個(gè)Block葵硕,而不只是把一個(gè)Page或者Cell給清掉。相比于機(jī)械磁盤贯吓,多了擦除的這個(gè)步驟懈凹。

特別是如果僅僅需要更改某個(gè)Page的內(nèi)容,卻需要擦除整個(gè)Block悄谐,性能浪費(fèi)很嚴(yán)重介评。我們可以看看修改只修改某個(gè)Page的過程,

  • 在擦除之前爬舰,先將Block的數(shù)據(jù)讀入RAM中们陆,

  • 然后擦除整個(gè)Block,

  • 再更新RAM中的對應(yīng)Page情屹,寫回Flash芯片中

這也是SSD的緩存通常比較大的原因坪仇。

這就叫做寫擴(kuò)大,我們姑且稱之為寫懲罰

這個(gè)時(shí)候我們會(huì)問屁商, 為什么如果只需要修改一個(gè)Cell烟很,卻需要把Block放電?

因?yàn)镃ell之間是存在干擾的蜡镶,如果有的在充電,有的在放電恤筛,則會(huì)產(chǎn)生不可控的干擾問題官还。所以不如直接將所有的先放電。

那 為什么需要一次擦一個(gè)Block毒坛,而不是一個(gè)Page望伦?

這是管理粒度的問題林说,粒度越小,管理開銷越大屯伞,所以一次擦一個(gè)Block是一種比較折中的方案腿箩。

不過幸好,向Free Space寫入數(shù)據(jù)時(shí)劣摇,因?yàn)槔锩鏇]有被寫過珠移,所以不需要擦除,當(dāng)然沒有寫懲罰末融。

但是另一個(gè)問題又來了钧惧,SSD如何知道哪些是Free Space?

我們知道只有文件系統(tǒng)才知道硬盤上哪些數(shù)據(jù)是有用的勾习,它會(huì)使用元數(shù)據(jù)來進(jìn)行記錄浓瞪,即使是刪除一份數(shù)據(jù)也只是修改了元數(shù)據(jù),而不是把數(shù)據(jù)真正的刪除掉巧婶。

這樣看來乾颁,SSD其實(shí)是不知道硬盤上哪些地方是所謂的Free Space,它只會(huì)把數(shù)據(jù)往從來沒修過的地方寫艺栈,所以Free Space會(huì)越來越少英岭。

  • Wear Off:

什么是Wear off?就是邏輯門充放電次數(shù)過多眼滤,$SiO_2$絕緣層的絕緣能力遭到損耗巴席,逐漸不再絕緣,無法保證有充足的電荷诅需,也就是Cell已經(jīng)物理損壞了漾唉。

更糟糕的是,損壞的Cell會(huì)拖累整個(gè)Page堰塌,因?yàn)樽钚〉膶ぶ穯挝皇荘age赵刑。這個(gè)Page的邏輯地址會(huì)被重定向到其他的Page上

MLC因?yàn)槠骷?fù)雜,可擦寫的壽命小于10000次场刑,而SLC則十倍于MLC般此,小于100000次。


image.png

如何解決牵现?

之前我們提到SSD在寫上有會(huì)極大的寫懲罰铐懊,而且會(huì)加速Wear off,有什么好的解決方案瞎疼?

  • 方法一:拆東墻補(bǔ)西墻重定向?qū)?/p>

    如果同一個(gè)Cell被高頻擦寫科乎,那么它被損壞的幾率當(dāng)然增大。如果一個(gè)Page之前都被寫過了贼急,我們不如把所有針對這個(gè)Page的寫請求重定向到Free Space上.

    這樣的好處在于對Free Space的寫是不需要提前擦除的茅茂,減少了擦除次數(shù)捏萍。不過這些被寫過的Page也不能浪費(fèi)了,我們可以把他們標(biāo)為"Garbage"空闲,等待比較多的時(shí)候令杈,再批量回收。

    這樣做的目的是將寫操作平衡到所有可能的Block中碴倾,降低單位時(shí)間內(nèi)的每個(gè)Block擦寫次數(shù)逗噩。問題是,F(xiàn)ree Space會(huì)越來越少影斑,重定向?qū)懙膸茁室矔?huì)越來越少给赞,最后降為0.

    而且因?yàn)橛兄囟ㄏ颍琒SD內(nèi)部很定需要維護(hù)一個(gè)地址映射表矫户,需要SSD的CPU能維護(hù)一定比較復(fù)雜的程序片迅,稱為wear Leveling(損耗平衡算法)

  • 方法二:定期清垃圾

    前面我們說過SSD自己是不知道哪些空間是Free Space,但是文件系統(tǒng)知道皆辽,可以在操作系統(tǒng)里面運(yùn)行一種Wiper柑蛇,可以不斷掃描,然后把空閑空間通知給SSD驱闷,由SSD來執(zhí)行擦除工作耻台。

    不過這種清除工作只能定期執(zhí)行

  • 方法三:持續(xù)清除體內(nèi)垃圾

    有沒有辦法可以讓文件系統(tǒng)在刪除之后實(shí)時(shí)通知SSD。

    可以使用ATA指令里面一個(gè)功能——TRIM空另,現(xiàn)在已經(jīng)集成在很多SSD的Firmware中了盆耽。

  • 方法四:IO 優(yōu)化

    之前的方法主要著力點(diǎn)在Free Space。我們也可以采用另一種思路扼菠,對IO進(jìn)行優(yōu)化摄杂。
    比如Delay write。現(xiàn)在有兩個(gè)針對同一個(gè)地址的寫IO循榆,在Write1還沒寫到硬盤之前析恢,Write 2就到了,控制器直接用Write 2來覆蓋Write 1 秧饮,這個(gè)操作是在內(nèi)存里面的映挂,省去了Write 1 寫入硬盤的過程。這種機(jī)制為“寫命中”的一種情況盗尸。

    問題就是數(shù)據(jù)可能不一致柑船。比如有如下IO:Write 1 , Read 2 , Write 3 ,此時(shí)如果用Write 3取代Write 1泼各,那么Read 2 讀出了Write 3 的內(nèi)容椎组,實(shí)際上Read 2應(yīng)該讀Write 1的內(nèi)容,所以數(shù)據(jù)不一致历恐。

    另外還可以使用Combine Write寸癌,對機(jī)械硬盤來說,如果控制器一段時(shí)間內(nèi)收到多個(gè)寫IO弱贼,而這些寫IO的地址在邏輯上是連續(xù)的蒸苇,可以將小寫IO合并為大IO,一次性寫入吮旅,節(jié)約了SCSI指令周期溪烤。
    對SSD來說,邏輯地址和物理地址存在一個(gè)映射關(guān)系庇勃,我們讀數(shù)據(jù)的時(shí)候是根據(jù)這個(gè)映射關(guān)系來的檬嘀,所以可以任何地址的小IO整合為大IO,直接寫到Free的Block中责嚷。

    因?yàn)镾SD需要對數(shù)據(jù)進(jìn)行合并以及優(yōu)化鸳兽,所以SSD對收到的寫數(shù)據(jù)一般采用Write Back模式,即收到主機(jī)控制器的數(shù)據(jù)立即返回成功罕拂,然后異步處理揍异。這樣就存在一個(gè)風(fēng)險(xiǎn),如果掉電了爆班,數(shù)據(jù)就會(huì)丟失衷掷,所以SSD是需要掉電保護(hù)機(jī)制的,一般使用一個(gè)超級電容來維持掉電之后的臟數(shù)據(jù)刷盤柿菩。

  • 預(yù)留備用空間

    為了防止文件系統(tǒng)將數(shù)據(jù)寫滿的極端情況戚嗅,SSD可以自己預(yù)留一部分備用空間用于重定向?qū)懀驗(yàn)椴煌ㄖ募到y(tǒng)枢舶,所以只有SSD才知道懦胞,這樣就有了一個(gè)永遠(yuǎn)不會(huì)被占用的定額Free Space。

下面說一個(gè)題外話祟辟, 為什么不需要對SSD進(jìn)行碎片整理医瘫?

我們來看一下機(jī)械硬盤為什么需要進(jìn)行碎片整理?機(jī)械硬盤主要瓶頸在于尋道時(shí)間旧困,因?yàn)樗槠遣涣闵⒌膲K醇份,尋道次數(shù)會(huì)很多。整合到一起呢吼具,邏輯上連續(xù)的LBA地址同樣也是物理上連續(xù)的僚纷,磁盤臂換道的時(shí)間就少了。

但是對SSD而言拗盒,沒有了磁盤臂怖竭,它是通過映射關(guān)系來讀的,即使整理了碎片也沒啥用陡蝇。反而做了大堆無用功痊臭,還會(huì)減少SSD的壽命哮肚。

image.png

SSD如何處理Cell損壞

機(jī)械硬盤如果損壞,則該扇區(qū)不能磁化广匙,磁頭會(huì)感知允趟。

而Flash中的Cell被擊穿一定次數(shù)后,損壞的幾率很高鸦致,

SSD如何判斷損壞的呢潮剪?實(shí)際上Cell只有充電和沒充電兩種狀態(tài),那么電路實(shí)際上無法直接判斷是漏電導(dǎo)致的還是說原本就是沒電的分唾。

只好使用ECC糾錯(cuò)碼抗碰,每次讀出某個(gè)Page需要進(jìn)行ECC校驗(yàn)。Flash廠商會(huì)在Datasheet中給出最低要求绽乔,即使用該顆粒起碼配合使用何種力度的糾錯(cuò)碼弧蝇。比如8b@512B,意味著512B的范圍內(nèi)出現(xiàn)8b錯(cuò)誤迄汛,可以糾錯(cuò)捍壤。如果超過了,就只能上報(bào)“不可恢復(fù)錯(cuò)誤”鞍爱。

廠商給出的糾錯(cuò)碼力度越低鹃觉,說明顆粒的品質(zhì)越好,損壞率越低睹逃。

image.png

SSD的前景

以上緩解SSD效率的問題都是治標(biāo)不治本的盗扇,為了解決多個(gè)問題,設(shè)計(jì)了若干的補(bǔ)救措施沉填,需要TRIM來維持疗隶,而且數(shù)據(jù)不能占得太滿。SSD在使用的時(shí)候也略顯尷尬翼闹,因?yàn)槌杀咎甙弑牵脩羧粜枰粋€(gè)10TB的存儲(chǔ)系統(tǒng),不可能都用SSD猎荠,所以很多廠商出品了SSD + HDD混合存儲(chǔ)坚弱,其實(shí)就是將Flash芯片作為磁盤的二級緩存,一級緩存是RAM关摇,二級是FLASH荒叶,三級是磁盤片。

有人說傳統(tǒng)磁盤有64MB的RAM緩存输虱,為什么還需要Flash作為下一級的緩存些楣?如果只用磁盤的RAM,首先空間比較小,很快就塞滿了愁茁,另外不能掉電蚕钦,刷到盤片里面的時(shí)候,會(huì)導(dǎo)致性能驟降埋市。

而使用Flash芯片再加一級緩存冠桃,可以把RAM中的數(shù)據(jù)存儲(chǔ)Flash中,最關(guān)鍵的是可以掉電道宅,這樣可以直接回復(fù)給控制器成功之后,磁盤驅(qū)動(dòng)器再在后臺(tái)將數(shù)據(jù)從Flash中寫到磁盤片中胸蛛,這樣既比純SSD便宜污茵,還保證了性能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葬项,一起剝皮案震驚了整個(gè)濱河市泞当,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌民珍,老刑警劉巖襟士,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嚷量,居然都是意外死亡陋桂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門蝶溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗜历,“玉大人,你說我怎么就攤上這事抖所±嬷荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵田轧,是天一觀的道長暴匠。 經(jīng)常有香客問我,道長傻粘,這世上最難降的妖魔是什么每窖? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮抹腿,結(jié)果婚禮上岛请,老公的妹妹穿的比我還像新娘。我一直安慰自己警绩,他們只是感情好崇败,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般后室。 火紅的嫁衣襯著肌膚如雪缩膝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天岸霹,我揣著相機(jī)與錄音疾层,去河邊找鬼。 笑死贡避,一個(gè)胖子當(dāng)著我的面吹牛痛黎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刮吧,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼湖饱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杀捻?” 一聲冷哼從身側(cè)響起井厌,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎致讥,沒想到半個(gè)月后仅仆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垢袱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年墓拜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶桐。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撮弧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姚糊,到底是詐尸還是另有隱情贿衍,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布救恨,位于F島的核電站贸辈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肠槽。R本人自食惡果不足惜擎淤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秸仙。 院中可真熱鬧嘴拢,春花似錦、人聲如沸寂纪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孝冒,卻和暖如春柬姚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庄涡。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工量承, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穴店。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓撕捍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迹鹅。 傳聞我的和親對象是個(gè)殘疾皇子卦洽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容