簡介
? ? SSD(Solid State Drives)链烈,俗稱固態(tài)硬盤强衡,相對原來主軸旋轉(zhuǎn),并無機械部分缩搅,主要由SSD控制器硼瓣,F(xiàn)lash存儲陣列置谦,板上DRAM(可選)媒峡,以及與Host的接口(諸如SATA谅阿,SAS奔穿,PCIe等)組成贱田。固態(tài)硬盤在接口的規(guī)范和定義男摧、功能及使用方法上與普通硬盤的完全相同耗拓,在產(chǎn)品外形和尺寸上也完全與普通硬盤一致乔询。
分類
? ? 根據(jù)存儲介質(zhì)竿刁,SSD可分為DRAM型的SSD和Flash的SSD食拜「旱椋基于DRAM的SSD,采用DRAM作為存儲介質(zhì)短纵,目前應(yīng)用范圍較窄香到,它仿效傳統(tǒng)硬盤的設(shè)計悠就、可被絕大部分操作系統(tǒng)的文件系統(tǒng)工具進行卷設(shè)置和管理梗脾,并提供工業(yè)標準的PCI和FC接口用于連接主機或者服務(wù)器盹靴。另外DRAM雖然速度更快但它屬于RAM類型是不能掉電的梭冠,一旦掉電RAM內(nèi)的數(shù)據(jù)就都丟失了改备,所以DRAM基本不用來做SSD悬钳。
? ? 基于Flash的SSD默勾,采用Flash芯片作為存儲介質(zhì)母剥,也是通常所說的SSD媳搪。這種SSD固態(tài)存儲器最大的優(yōu)點就是可以移動秦爆,而且數(shù)據(jù)保護不受電源控制等限,能適應(yīng)于各種環(huán)境望门,但是使用年限不高筹误。
? ? Flash的SSD厨剪,根據(jù)電路區(qū)別祷膳,進而分為NOR(或非)型和NAND(與非)型直晨。NOR的讀速度比NAND稍快一些勇皇,NAND的寫入速度比NOR快很多敛摘,NAND的4ms擦除速度遠比NOR的快着撩。
? ? NAND又分為SLC拖叙、MLC咖气、TLC崩溪。
? ? SLC全稱單層式儲存(Single Level Cell)伶唯,是指一個Block(塊乳幸,F(xiàn)lash的基本存儲單元粹断,也可稱為Cell)只有兩種電荷值瓶埋,高低不同的電荷值表明0或者1养筒,因為只需要一組高低電壓就可以區(qū)分出0或者1信號闽颇,所以SLC最大的驅(qū)動電壓可以做到很低兵多,傳統(tǒng)的雙電壓卡或者低電壓版本卡片肯定采用SLC類型的NAND Flash芯片剩膘。SLC因為結(jié)構(gòu)簡單怠褐,在寫入數(shù)據(jù)時電壓變化的區(qū)間小奈懒,所以壽命較長溜畅,傳統(tǒng)的SLC Flash可以經(jīng)受10萬次的讀寫慈格,因此出現(xiàn)壞Block的幾率較小遥金,因為存儲結(jié)構(gòu)非常簡單浴捆,一組電壓即可驅(qū)動,所以其速度表現(xiàn)更好稿械,目前所有的超高速卡都采用SLC類型的Flash芯片选泻。
? ? MLC(多層式儲存—Multi Leveled Cell)是種充分利用Block的技術(shù),它采用較高的電壓驅(qū)動溜哮,通過不同級別的電壓在一個Block中記錄兩組位信息(00滔金、01茂嗓、11餐茵、10),這樣就可以將原本SLC的記錄密度理論提升一倍述吸。不過MLC除了同制程忿族、同晶圓面積時理論大一倍的記錄空間外,存在一些先天的弊端蝌矛,比如說電壓區(qū)間更小道批,F(xiàn)lash就需要更多的CRC校驗空間,這會大概占據(jù)Block中10%的空間入撒,因此實際使用中同制程同晶圓面積的MLC的容量不到SLC的一倍隆豹。
? ? 因為電壓變化更頻繁,所以MLC技術(shù)的Flash在壽命方面遠劣于SLC茅逮,官方給出的可擦寫次數(shù)僅為1萬次璃赡,這是MLC最要命的一個缺點。MLC技術(shù)的Flash還有一個缺點献雅,它的讀寫速度先天不如SLC碉考,一個Block存儲兩組位數(shù)據(jù),自然需要更長的時間挺身,這里面還有電壓控制侯谁、CRC寫入方式等因素需要考慮。
? ? TLC 三階存儲單元(Triple-LevelCell章钾,TLC)墙贱,每個存儲單元內(nèi)可以存儲3個Bit。由于每個單元可以存儲更多的數(shù)據(jù)贱傀,TLC的成本進一步降低嫩痰,但是隨之而來的是寫入速度和耐久度的再次降低。當然窍箍,現(xiàn)在市場上也有唯一一個采用TLC的SSD:三星的840串纺,當然官方標注其P/E只有1K次。
基本原理
? ? SSD主控通過若干通道并行操作多塊Flash顆粒椰棘,類似Raid0纺棺,大大提高底層帶寬。
? ? 例:假設(shè)主控與Flash顆粒之間有8個通道邪狞,每個通道掛在了一個閃存顆粒祷蝌,Host與Flash之間數(shù)據(jù)傳輸速率為200M/s,閃存顆粒大小為8kb帆卓,F(xiàn)lash page的讀取時間為Tr=50us巨朦,平均寫入時間為Tp=800us米丘,8kb的數(shù)據(jù)傳輸時間為Tx=40us。
? ? 則糊啡,底層讀取最大帶寬為:(8KB/(50us+40us))*8 = 711MB/s拄查;寫入最大帶寬為:(8KB/(800us+40us))*8 = 76MB/s;
? ? 從上可以看出棚蓄,要提高底層帶寬堕扶,可以增加底層并行的顆粒數(shù)目,也可以選擇速度快的Flash顆粒梭依。
? ? 以8通道為例稍算,來講講HOST怎么讀寫SSD。主控通過8通道連接8個Flash DIE役拴,為方便解釋糊探,這里只畫了每個DIE里的一個Block,其中每個小方塊表示一個Page (假設(shè)大小為4KB)河闰。
? ? HOST寫入4KB數(shù)據(jù):
? ? HOST繼續(xù)寫入16KB數(shù)據(jù):
? ? HOST繼續(xù)寫入科平,最后整個Block都寫滿:
? ? SSD內(nèi)部尋址方式有別于HDD,下面先介紹一下尋址方式的區(qū)別淤击。
? ? LBA匠抗,全稱為Logical Block Address, LBA污抬,全稱為Logical Block Address汞贸,是PC數(shù)據(jù)存儲裝置上用來表示數(shù)據(jù)所在位置的通用機制,我們最常見到使用它的裝置就是硬盤印机。LBA可以指某個數(shù)據(jù)區(qū)塊的地址或者某個地址上所指向的數(shù)據(jù)區(qū)塊矢腻。打個比方來說,LBA就等于我們平常使用的門牌地址(如:中華人民共和國廣東省廣州市中山四路26號)射赛。
? ? PBA全稱為 Physics Block Address PBA全稱為 Physics Block Address多柑,相對于LBA來說,它就如GPS定位所使用的經(jīng)緯度(如上面地址的經(jīng)緯度為:東經(jīng):113°16′40.0621″楣责,北緯:23°07′ 37.6129″)竣灌。
? ? 在HDD上,由于HDD的數(shù)據(jù)可以直接覆蓋秆麸,所以LBA和PBA的關(guān)系是一一對應(yīng)初嘹,不會變更,即LBA=PBA沮趣。但在SSD上屯烦,這種關(guān)系就變得復(fù)雜了,原因是SSD使用的存儲介質(zhì)NAND閃存需要先擦除才能再寫入,即讀寫以頁為單位驻龟,擦除以塊(多個頁組成)為單位的特性温眉,導(dǎo)致LBA和 PBA的關(guān)系不再是固定不變的。因此SSD就需要一層叫做FTL(Flash translation layer)的東西來作轉(zhuǎn)換翁狐,以配合現(xiàn)有的文件系統(tǒng)类溢。
? ? 閃存的讀寫單位為頁,而頁的大小一般為4KB或8KB谴蔑,但我們的操作系統(tǒng)讀寫數(shù)據(jù)是按HDD的扇區(qū)尺寸進行的(512Byte)豌骏,更麻煩的是閃存擦除以塊作單位龟梦,而且未擦除就無法寫入隐锭,這導(dǎo)致操作系統(tǒng)現(xiàn)在使用的文件系統(tǒng)根本無法管理SSD,需要更換更先進计贰、復(fù)雜的文件去解決這個問題钦睡, 但這樣就會加重操作系統(tǒng)的負擔。而為了不加重操作系統(tǒng)的負擔躁倒,SSD采用軟件的方式把閃存的操作虛擬成磁盤的獨立扇區(qū)操作荞怒,這就是FTL。因FTL存在于文件系統(tǒng)和物理介質(zhì)(閃存)之間秧秉,操作系統(tǒng)只需跟原來一樣操作LBA即可褐桌,而LBA到PBA的所有轉(zhuǎn)換工作,就全交由FTL負責.
? 回到之前的問題象迎,當所有Channel上的Block都寫滿的時候荧嵌,SSD主控會挑選下一個Block以同樣的方式繼續(xù)寫入.Host通過LBA訪問SSD,每個LBA代表著一個Sector(一般為512B大欣省)啦撮,操作系統(tǒng)一般以4K為單位訪問SSD,我們把Host訪問SSD的基本單元叫用戶頁(Host Page)汪厨。而在SSD內(nèi)部赃春,SSD主控與Flash之間是Flash Page為基本單元訪問Flash的,我們稱Flash Page為物理頁(Physical Page)劫乱。Host每寫入一個Host Page, SSD主控會通過FTL找一個Physical Page把Host數(shù)據(jù)寫入织中,同時記錄了這樣一條映射(Map),并把這個頁上包含的“舊數(shù)據(jù)”標記為“無效”(更新后的數(shù)據(jù)已經(jīng)寫入新的PBA衷戈,舊地址的數(shù)據(jù)自然就失效了)狭吼。有了這樣一個映射關(guān)系后,下次HOST需要讀某個Host Page 時脱惰,SSD就知道從Flash的哪個位置把數(shù)據(jù)讀取上來搏嗡。
? ? SSD內(nèi)部維護了一張映射表(Map Table),Host每寫入一個Host Page,就會產(chǎn)生一個新的映射關(guān)系采盒,這個映射關(guān)系會加入(第一次寫)或者更改(覆蓋寫)Map Table旧乞;當讀取某個Host Page時, SSD首先查找Map Table中該Host Page對應(yīng)的Physical Page磅氨,然后再訪問Flash讀取相應(yīng)的Host數(shù)據(jù)尺栖。
? ? 一張Map Table有多大呢?這里假設(shè)我們有一個256GB的SSD烦租,以4KB Host Page為例延赌,那么一共有約 64M(256GB/4KB)個Host Page,也就意味著SSD需要有64M大小的Map Table叉橱。Map Table中的每個Entry存儲的就是物理地址(Physical Page Address)挫以,假設(shè)其為4Byte (32 bits) ,那么整個Map Table的大小為64M*4B = 256MB窃祝。
? ? 對絕大多數(shù)SSD掐松,我們可以看到上面都有板載DRAM,其主要作用就是用來存儲這張映射表粪小。也有例外大磺,比如基于Sandforce主控的SSD,它并不支持板載DRAM探膊,那么它的映射表存在哪里呢杠愧?SSD工作時,它的絕大部分映射是存儲在Flash里面逞壁,還有一部分存儲在片上RAM上流济。當Host需要讀取一筆數(shù)據(jù)時,對有板載DRAM的SSD來說猾担,只要查找DRAM當中的映射表袭灯,獲取到物理地址后訪問FLASH從而得到HOST數(shù)據(jù).這期間只需要訪問一次Flash;而對Sandforce的SSD來說绑嘹,它首先看看該Host Page對應(yīng)的映射關(guān)系是否在RAM內(nèi)稽荧,如果在,那好辦工腋,直接根據(jù)映射關(guān)系讀取Flash姨丈;如果該映射關(guān)系不在RAM內(nèi),那么它首先需要把映射關(guān)系從FLASH里面讀取出來擅腰,然后再根據(jù)這個映射關(guān)系讀取Host數(shù)據(jù)蟋恬,這就意味著相比有DRAM的SSD,它需要讀取兩次FLASH才能把HOST數(shù)據(jù)讀取出來趁冈,底層有效帶寬減半歼争。對HOST隨機讀來說拜马,由于片上RAM有限,映射關(guān)系Cache命中(映射關(guān)系在片上RAM)的概率很小沐绒,所以對它來說俩莽,基本每次讀都需要訪問兩次Flash,所以我們可以看到基于Sandforce主控的SSD隨機讀取性能是不太理想的乔遮。
? ? 繼續(xù)回到之前的SSD寫操作扮超。當整個SSD寫滿后,從用戶角度來看,如果想寫入新的數(shù)據(jù),則必須刪除一些數(shù)據(jù)板鬓,然后騰出空間再寫。用戶在刪除和寫入數(shù)據(jù)的過程中馁龟,會導(dǎo)致一些Block里面的數(shù)據(jù)變無效或者變老。如下圖所示(綠色小方塊代表有效數(shù)據(jù)濒翻,紅色小方塊代表無效數(shù)據(jù)):
? ? Block中的數(shù)據(jù)變老或者無效啦膜,是指沒有任何映射關(guān)系指向它們有送,用戶不會訪問到這些FLASH空間,它們被新的映射關(guān)系所取代僧家。比如有一個Host Page A雀摘,開始它存儲在FLASH空間的X,映射關(guān)系為A->X。后來八拱,HOST重寫了該Host Page阵赠,由于FLASH不能覆蓋寫,SSD內(nèi)部必須尋找一個沒有寫過的位置寫入新的數(shù)據(jù)肌稻,假設(shè)為Y清蚀,這個時候新的映射關(guān)系建立:A->Y,之前的映射關(guān)系解除爹谭,位置X上的數(shù)據(jù)變老失效枷邪,我們把這些數(shù)據(jù)叫垃圾數(shù)據(jù)。
? ? 隨著HOST的持續(xù)寫入诺凡,F(xiàn)LASH存儲空間慢慢變小东揣,直到耗盡。如果不及時清除這些垃圾數(shù)據(jù)腹泌,HOST就無法寫入嘶卧。SSD內(nèi)部都有垃圾回收機制,它的基本原理是把幾個Block中的有效數(shù)據(jù)(非垃圾數(shù)據(jù)凉袱,上圖中的綠色小方塊表示的)集中搬到一個新的Block上面去芥吟,然后再把這幾個Block擦除掉侦铜,這樣就產(chǎn)生新的可用Block了。
? ? 上圖中钟鸵,Block x上面有效數(shù)據(jù)為A,B,C泵额,Block y上面有效數(shù)據(jù)為D,E,F,G,紅色方塊為無效數(shù)據(jù)携添。垃圾回收機制就是先找一個未寫過的可用Block z嫁盲,然后把Block x和Block y的有效數(shù)據(jù)搬移到Block z上面去,這樣Block x和Block y上面就沒有任何有效數(shù)據(jù)烈掠,可以擦除變成兩個可用的Block羞秤。
? ? 垃圾回收又分為后臺GC和主動GC。
? ? 后臺垃圾收集算法(也稱為閑置垃圾收集)左敌,該控制器會使用空閑的時間來做垃圾收集瘾蛋,讓主控在使用時一直保持高性能。例如barefoot主控. 在空閑的時候進行GC.以提高SSD性能. 在空閑的時候進行GC.以提高SSD性能矫限。
? ? 主動GC需要有相當性能的主控制器哺哼,以保證在操作數(shù)據(jù)的同時進行GC操作 在操作數(shù)據(jù)的同時進行GC操作,這類GC適合在服務(wù)器里用到叼风,因為個人用戶可以把電腦閑置了做GC取董,但是服務(wù)器可不行,所以要保證性能的話必須在運行的同時做GC无宿,這對主控制器的性能提出了很高的要求茵汰,SandForce與Marvell BJP2的主控就是這類。
? ? 一塊剛買的SSD孽鸡,你會發(fā)現(xiàn)寫入速度很快蹂午,那是因為一開始總能找到可用的Block來進行寫入。但是彬碱,隨著你對SSD的使用豆胸,你會發(fā)現(xiàn)它會變慢。原因就在于SSD寫滿后巷疼,當你需要寫入新的數(shù)據(jù)晚胡,往往需要做上述的垃圾回收:把若干個Block上面的有效數(shù)據(jù)搬移到某個Block,然后擦掉原先的Block皮迟,然后再把你的Host數(shù)據(jù)寫入搬泥。這比最初單純的找個可用的Block來寫耗時多了,所以速度變慢也就可以理解了伏尼。
? ? 還是以上圖為例忿檩。假設(shè)HOST要寫入4KB數(shù)據(jù) (H) ,由于當前可用Block過少爆阶,SSD開始做垃圾回收燥透。從上圖可以看出沙咏,對Block x來說,它需要把Page A,B,C的數(shù)據(jù)讀出并寫入到Block z班套,然后Block x擦除用于HOST數(shù)據(jù)寫入肢藐。從Host角度,它只寫了4KB數(shù)據(jù)吱韭,但從SSD內(nèi)部來說吆豹,它實際寫入了4個Page(Page A, B, C寫入Block z,4KB數(shù)據(jù)H寫入到Block x)理盆。
寫入放大
? ? 2008年痘煤,Intel公司和SiliconSystems公司(2009 年被西部數(shù)字收購)第一次提出了寫入放大(Write Application)并在公開稿件里用到這個術(shù)語。
? ? 在上面例子中猿规,Host寫了4KB數(shù)據(jù)衷快,閃存寫了4個4KB數(shù)據(jù),所以上面例子中寫放大為4姨俩。對空盤來說蘸拔,寫放大一般為1,即Host寫入多少數(shù)據(jù)环葵,寫入Flash也是多少數(shù)據(jù)量调窍。在Sandforce控制器出來之前,寫放大最小值為1积担。但是由于Sandforce內(nèi)部具有壓縮模塊陨晶,它能對Host寫入的數(shù)據(jù)進行實時壓縮,然后再把它們寫入到NAND帝璧。舉個例子,HOST寫入8KB數(shù)據(jù)湿刽,經(jīng)壓縮后的烁,數(shù)據(jù)變?yōu)?KB,如果這個時候還沒有垃圾回收诈闺,那么寫放大就只有0.5渴庆。Intel之前說寫放大不可能小于1,但Sandforce打破了這個說法雅镊。
預(yù)留空間
? ? 假設(shè)一個SSD襟雷,底下所有Flash容量為256GB,開放給用戶使用也是256GB仁烹,那么問題就來了耸弄。想象一個場景,Host持續(xù)寫滿整個SSD卓缰,接著刪除一些文件计呈,寫入新的文件數(shù)據(jù)砰诵,試問新的數(shù)據(jù)能寫入嗎?在SSD底層捌显,如果要寫入新的數(shù)據(jù)茁彭,必須要有可用的空閑Block,但由于之前256GB空間已經(jīng)被HOST數(shù)據(jù)占用了扶歪,根本就沒有空閑Block來寫你的數(shù)據(jù)理肺。不對,剛才不是刪了一些數(shù)據(jù)嗎善镰?可以垃圾回收呀哲嘲。不錯,但問題來了媳禁,在上面介紹垃圾回收的時候眠副,我們需要有Block z來寫回收來的有效數(shù)據(jù),我們這個時候連Block z都找不到竣稽,談什么垃圾回收囱怕?所以,最后是用戶寫失敗毫别。
? ? 上面這個場景至少說明了一點娃弓,SSD內(nèi)部需要預(yù)留空間,這部分空間HOST是看不到的岛宦。這部分預(yù)留空間台丛,不僅僅用以做垃圾回收,事實上砾肺,SSD內(nèi)部的一些系統(tǒng)數(shù)據(jù)挽霉,也需要預(yù)留空間來存儲,比如前面說到的映射表(Map Table)变汪,比如SSD固件侠坎,以及其它的一些SSD系統(tǒng)管理數(shù)據(jù)。
? ? 一般從HOST角度來看裙盾,1GB= 1,000,000,000Byte实胸,從底層Flash角度,1GB=1*1024*1024*1024Byte番官。256GB FLASH 為256*2^30 Byte庐完,而一般說的256GB SSD 容量為256*10^9 Byte,這樣徘熔,天然的有(256*2^30-256*^9)/(256*^9) = 7.37%的OP门躯。
? ? 如果把256GB Flash容量的SSD配成240GB的,那么它的OP是多大呢近顷?
? ? (256*2^30-240*10^9)/(240*10^9) = 14.5%
? ? 除了滿足基本的使用要求外生音,OP變大有什么壞處或者好處呢宁否?壞處很顯然,用戶能使用的SSD容量變小缀遍。那么好處呢慕匠?
? ? 回到垃圾回收原理來。
? ? 再看一下這張圖域醇√ㄒ辏回收Block x,上面有3個有效Page譬挚,需要讀寫3個Page完成整個Block的回收锅铅;而回收Block y時,則需要讀寫4個有效Page减宣。兩者相比盐须,顯然回收Block x比回收Block y快一些。說明一個簡單的道理:一個Block上有效的數(shù)據(jù)越少(垃圾數(shù)據(jù)越多)漆腌,則回收速度越快贼邓。
? ? 256GB FLASH配成256GB的SSD (OP = 7.37%), 意味著256*10^9的有效數(shù)據(jù)寫到 256*2^30的空間,每個Block上面的平均有效數(shù)據(jù)率可以認為是256*10^9/256*2^30 = 93.1%闷尿。
? ? 如果配成240GB的SSD塑径,則意味著240*10^9的有效數(shù)據(jù)寫到256*2^30的空間,每個Block的平均有效數(shù)據(jù)率為240*10^9/256*2^30 = 87.3%填具。OP越大统舀,每個Block平均有效數(shù)據(jù)率越小,因此我們可以得出的結(jié)論:OP越大劳景,垃圾回收越快誉简,寫放大越小。這就是OP大的好處枢泰。
? ? 寫放大越小描融,意味著寫入同樣多的Host數(shù)據(jù),寫入到Flash中的數(shù)據(jù)越少衡蚂,也就意味著Flash損耗越小。Flash都是有一定壽命的骏庸,它是用P/E數(shù) (Program/Erase Count)來衡量的毛甲。如果SSD集中對某幾個Block進行擦寫,那么這幾個Block很快就壽命耗盡具被。比如在用戶空間玻募,有些數(shù)據(jù)是頻繁需要更新的,那么這些數(shù)據(jù)所在Block就需要頻繁的進行擦寫一姿,這些Block的壽命就可能很快的耗盡七咧。相反跃惫,有些數(shù)據(jù)用戶是很少更新的,比如一些只讀文件艾栋,那么這些數(shù)據(jù)所在的Block擦寫的次數(shù)就很少爆存。隨著用戶對SSD的使用,就會形成一些Block有很高的PE數(shù)蝗砾,而有些Block的PE數(shù)卻很低的先较。這不是我們想看到的,我們希望所有Block的PE數(shù)都應(yīng)該差不多悼粮,就是這些Block被均衡的使用闲勺。在SSD內(nèi)部,有一種叫磨損平衡(Wear Leveling扣猫,WL)的機制來保證這點菜循。
磨損平衡(Wear Leveling,WL)
? ? Wear leveling也是SSD內(nèi)部的FTL實現(xiàn)的申尤,它通過數(shù)據(jù)遷移來達到均衡損耗的目的癌幕。Wear leveling依賴于SSD中的一部分保留空間,基本原理是在SSD中設(shè)置了兩個block pool瀑凝,一個是free block pool(空閑池)序芦,一個是數(shù)據(jù)池(data block pool),當需要改寫某個page時(如果寫入原有位置粤咪,必須先擦除整個block谚中,然后才能寫入數(shù)據(jù)),并不寫入原有位置(不需要擦除的動作)寥枝,而是從空閑池中取出新的block宪塔,將現(xiàn)有的數(shù)據(jù)和需要改寫的數(shù)據(jù)合并為新的block,一起寫入新的空白block囊拜,原有的block被標識為invalid狀態(tài)(等待被擦除回收)某筐,新的block則進入數(shù)據(jù)池。后臺任務(wù)會定時從data block中取出無效數(shù)據(jù)的block冠跷,擦除后回收到空閑池中南誊。這樣做的好處在于,一是不會反復(fù)擦寫同一個block蜜托,二是寫入的速度會比較快(省略了擦除的動作)抄囚。
? ? WL有兩種算法:動態(tài)WL和靜態(tài)WL。所謂動態(tài)WL橄务,就是在使用Block進行擦寫操作的時候幔托,優(yōu)先挑選PE 數(shù)低的;所謂靜態(tài)WL,就是把長期沒有修改的老數(shù)據(jù)(如前面提到的只讀文件數(shù)據(jù))從PE數(shù)低的Block當中搬出來重挑,然后找個PE 數(shù)高的Block進行存放嗓化,這樣,之前低PE數(shù)的Block就能拿出來使用谬哀。
? ? 下面這張圖詮釋了無WL刺覆,動態(tài)WL和靜態(tài)WL下的FLASH耐久度的區(qū)別 (假設(shè)每個Block最大PE數(shù)為10,000):(圖片來自http://www.pceva.com.cn/topic/crucialssd/images/6/006.jpg)
? ? 可見,使不使用WL玻粪,以及使用何種WL算法隅津,對SSD的壽命影響是很大的。
SSD性能指標采集
? ? 既然SSD壽命是有限的劲室, 監(jiān)控磨損率等性能指標很有必要伦仍。收集SSD的信息前,首先要了解Raid信息很洋。市場上比較常用的服務(wù)器充蓝,諸如DELL、Lenovo等喉磁,可用MegaCli查看Raid磁盤陣列信息谓苟。
? ? 查看Raid信息:MegaCli -AdpAllInfo -aALL
? ? 查看硬盤信息:MegaCli -PDList -aALL?
? ? 得到SSD的基礎(chǔ)信息后,可使用smartctl协怒,進一步獲取SSD的詳細狀態(tài)參數(shù)涝焙。smartctr需要兩個參數(shù),一個是device_id孕暇,已經(jīng)在MegaCLI中獲取到仑撞,另一個參數(shù)是raid生成的設(shè)備,可在dmesg看到妖滔。有個這兩個參數(shù)后隧哮,就可以查看SSD的運行狀態(tài)了。
? ? 假設(shè)我們的device id是10座舍,SSD在/dev/sda沮翔,那么可以用下面的命令查看具體信息:smartctl -a -d sat+megaraid,10 /dev/sda,結(jié)果如下圖曲秉。
? ? 輸出結(jié)果中采蚀,Media_Wearout_Indicator一項就是我們最關(guān)心的SSD的磨損率,另外還記錄了一些其他狀態(tài)參數(shù)承二,在這里不再贅述搏存。
? ? 市面上的主流服務(wù)器中,HP是獨樹一幟的矢洲,MegaCli在這類品牌的機器上不好用。HP有自帶的工具hpssacli缩焦,記錄的信息比MegaCli要詳細一點读虏,可以使用hpssacli ctrl slot=0 show config detail命令來查看slot 0的詳細信息责静。
? ? 輸出的結(jié)果中,Bay - 1就是我們上面使用的device id盖桥。之后灾螃,同樣的使用smartctl查看SSD的詳細信息:
? smartctl -a -d cciss, 0 /dev/sda
? ? 結(jié)果如下圖,其中Media_Wearout_Indicator就是我們想要的結(jié)果腰鬼。
IO調(diào)度算法
? ? 傳統(tǒng)的IO調(diào)度算法中彼硫,大多數(shù)是針對于HDD的尋道時間進行優(yōu)化牵舱,而SSD沒有尋道時間,所以對IO調(diào)度的算法有所側(cè)重。常見的IO調(diào)度算法中窖铡,最適合SSD是最簡單的NOOP。NOOP實現(xiàn)了最最簡單的FIFO隊列,所有IO請求大致按照先來后到的順序進行操作,在FIFO的基礎(chǔ)上還做了相鄰IO請求的合并调榄。反觀CFQ扣孟、AS鸽斟、DeadLine等算法,雖然各有所長利诺,但論綜合能力來看富蓄,NOOP還是勝出的。