懸崖邊的探討——聊一聊閃存的垃圾回收
隨著技術(shù)的進(jìn)步以及成本的降低,閃存已經(jīng)越來越廣泛的被企業(yè)級(jí)數(shù)據(jù)中心作為存儲(chǔ)介質(zhì)使用。相比傳統(tǒng)的磁盤介質(zhì),閃存的優(yōu)勢顯而易見:速度快,耗電低,省空間。特別在速度方面,閃存具備壓倒性的優(yōu)勢。
比方說,客戶原來采用某款高端磁盤陣列的時(shí)候,處理某個(gè)作業(yè),需要花費(fèi)6個(gè)小時(shí)。后來采用了閃存陣列,同樣處理該作業(yè),只需要1個(gè)小時(shí)就可以完成。閃存帶來的性能優(yōu)勢非常的明顯。
以上,并不是本文討論的重點(diǎn)。
本文的重點(diǎn)是,客戶剛剛采用閃存陣列的時(shí)候,處理作業(yè)只用1個(gè)小時(shí),可是運(yùn)行了一段時(shí)間之后,忽然有一天,客戶發(fā)現(xiàn)處理作業(yè)用了1小時(shí)25分鐘。于是,問題來了,客戶一方面覺得1小時(shí)20分鐘比6小時(shí)還是快多了,一方面也會(huì)想,為啥比起1小時(shí),我現(xiàn)在處理作業(yè)的時(shí)間慢了4分之1?
由此,我們來了解一下,閃存中的“寫懸崖(Write-Cliff)”現(xiàn)象。
什么是垃圾回收?
閃存是電子類介質(zhì),它處理數(shù)據(jù)的寫入和傳統(tǒng)的磁類介質(zhì)(磁盤或者磁帶)不同。在使用磁盤時(shí),如果我們有新數(shù)據(jù)寫入某區(qū)塊,而該區(qū)塊還存有舊數(shù)據(jù),那只需要簡單的進(jìn)行覆蓋即可。而閃存不同,新數(shù)據(jù)寫入的區(qū)塊,必須是空白區(qū)塊,如果該區(qū)塊存有舊數(shù)據(jù),那么必須先對(duì)舊數(shù)據(jù)進(jìn)行“擦除”(Erase)。是的,當(dāng)數(shù)據(jù)存儲(chǔ)的越來越多,理論上最多當(dāng)寫入的數(shù)據(jù)總量達(dá)到閃存提供的所有容量之后,再次寫入更新時(shí),就必然會(huì)產(chǎn)生“擦除”。
相比于常規(guī)的讀取和寫入操作,擦除有2個(gè)特點(diǎn)。
***,擦除的速度比讀寫要慢。
第二,擦除的處理單位要比讀寫大。
目前業(yè)界的閃存,基本上,讀操作的處理單位不大于4KB,寫操作的處理單位不小于4KB,而擦除的處理單位則是不小于1MB。這意味著,如果要寫入4KB的數(shù)據(jù),到某個(gè)已存有4KB舊數(shù)據(jù)的區(qū)塊,那我首先需要擦除其周邊1MB的區(qū)塊空間。
這相當(dāng)于您買了一套二手房三居室,規(guī)定要求說不能直接住,必須先還原成毛坯房再重新裝修,而且要求您必須先把整個(gè)小區(qū)250個(gè)住戶的房子全部恢復(fù)成毛坯房,然后才能重新裝修自己家??墒瞧溆?49個(gè)鄰居住的好好的,他們家里的東西怎么辦,答案只有一個(gè),就是請(qǐng)他們?nèi)堪鸭野嶙?,搬到其他小區(qū)空著的房子里去。(好吧,強(qiáng)制拆遷啦?。。┊?dāng)然,搬完之后有個(gè)好處,就是未來再有249個(gè)新住戶進(jìn)來,他們可以就在毛坯房的基礎(chǔ)之上直接進(jìn)行裝修了(1MB一次性全部擦除)。
以上過程,我們稱之為閃存擦除效應(yīng)帶來的“垃圾回收”。為了更清晰的描述這個(gè)過程,借(Chao) 用(Xi) 某閃存廠商的圖片,來更為清晰的解釋一下。
簡便起見,如下圖所示,假設(shè)某閃存設(shè)備一共提供了16個(gè)可寫的小塊,一次擦除必須以4個(gè)小塊為單位。
首先,我們寫入了一個(gè)“MyFile.doc”文件,占用了6個(gè)小塊,由于現(xiàn)在的16個(gè)塊都是“干凈”的空白狀態(tài),所以直接寫入即可。如下圖。
然后,我們更新了“MyFile.doc”文件。注意,在這里,作為用戶,我們認(rèn)為自己是在原來的位置上對(duì)文件數(shù)據(jù)進(jìn)行了更新。但是閃存為了更快的完成處理,會(huì)物理上將新數(shù)據(jù)寫入另外的“干凈”區(qū)塊,并將原有舊數(shù)據(jù)所在區(qū)塊標(biāo)記為“失效”狀態(tài)。如下圖(灰色代表“失效,未擦除”數(shù)據(jù)塊,藍(lán)色代表“已占用”數(shù)據(jù)塊,白色代表“干凈,可寫入”數(shù)據(jù)塊)。
(同時(shí)為了解決應(yīng)用程序地址和實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)問題,閃存加入了“Flash Translation Layer”,用來實(shí)現(xiàn)上述兩個(gè)地址的映射。)
接下來,我們又需要寫入一個(gè)新文件“AnotherFile.doc”,同樣占用6個(gè)小塊,但是現(xiàn)在上圖中只剩下4個(gè)空白的“干凈”小塊了。因此,我們需要擦除左上角“失效”的4個(gè)小塊,擦完之后如下圖所示。
接下來,新的數(shù)據(jù)就可以被寫入到左上和右下總共的6個(gè)“干凈”小塊了。
現(xiàn)在,我們寫入***一個(gè)文件,需占用3個(gè)小塊??梢詮纳蠄D看到,空白“干凈”小塊只剩2個(gè)了。另外還有2個(gè)“失效”小塊,但是由于與有效數(shù)據(jù)同處一個(gè)擦除區(qū)域,無法直接擦除。因此,我們就需要進(jìn)行數(shù)據(jù)的移動(dòng),如下圖所示,從而騰出一個(gè)整體的空間,使得擦除可以進(jìn)行。這一步,就是之前講的鄰居搬家。
擦除完之后,我們就可以寫入占用了3個(gè)小塊的新文件了!
閃存“垃圾回收”帶來的“寫懸崖”和“寫放大”
回到文章一開始客戶遇到的性能下降25%的問題,在我們了解完閃存垃圾回收的過程之后,就很容易理解了。一臺(tái)40TB容量的閃存運(yùn)到客戶現(xiàn)場,起始都是“干凈”的空白小塊,寫入速度很快。但隨著數(shù)據(jù)的不斷更新,或早或晚必然會(huì)出現(xiàn)區(qū)塊間數(shù)據(jù)搬運(yùn),數(shù)據(jù)擦除等后臺(tái)垃圾回收的相關(guān)操作,從而提供“干凈”的小塊給后續(xù)的寫入操作。這些操作和前端應(yīng)用程序并行,導(dǎo)致了性能的下降,我們稱之為“寫懸崖(Write-Cliff)”。
“寫懸崖”僅僅是垃圾回收帶來的問題之一。垃圾回收還帶來的另外一個(gè)問題,叫做“寫放大”。我們都知道閃存的每個(gè)Cell(顆粒)都是有寫入次數(shù)的壽命限制的。垃圾回收導(dǎo)致了額外的Cell寫入,加速了Cell壽命消耗。我們稱之為“寫放大(Write-Amplification)”。
如何處理“寫懸崖”
寫懸崖和寫放大都是閃存介質(zhì)與生俱來的特性,無論是SSD固態(tài)硬盤,還是目前的全閃存陣列廠商,都無法避免這兩個(gè)問題。
閃存廠商一般會(huì)通過介質(zhì)材料,算法以及架構(gòu)的優(yōu)化等手段,來將這兩種影響控制在一定的范圍內(nèi)。同時(shí),對(duì)該問題處理的效果,也是衡量閃存陣列能力的因素之一。比如目前業(yè)界市場占用率很高的某閃存陣列廠商,宣稱通過以下手段來優(yōu)化寫懸崖的問題:
首先,采用“超供給”方式,通過提供更多的顆粒數(shù)量(比如用戶可見容量40TB,而實(shí)際物理容量超過67TB),用于減緩整體閃存壽命的磨損,并實(shí)現(xiàn)更為靈活的預(yù)防性垃圾回收。
同時(shí),采用了“帶外”的垃圾回收處理機(jī)制,也就是為垃圾回收配置了專門的處理引擎,從而不占用處理前端應(yīng)用數(shù)據(jù)IO的硬件資源。
此外還有均衡磨損算法,監(jiān)測機(jī)制等手段,來優(yōu)化緩解這兩個(gè)問題。
消除誤區(qū),“寫懸崖”并不可怕
***,需要說明的是,寫懸崖并不可怕。
即使寫懸崖帶了的性能的降低,但速度降下來之后,處理得當(dāng)?shù)拈W存陣列,其性能還是要遠(yuǎn)遠(yuǎn)高于傳統(tǒng)磁盤陣列。好比您以5塊錢一股的價(jià)格買了一只股票,***的時(shí)候股票價(jià)格飆升到了30塊錢一股,但后來降到了25塊錢一股,并在25塊錢平穩(wěn)下來。那么整體來看,收益還是很好的。
以下是某廠商公布其全閃存陣列“寫懸崖”測試的測試結(jié)果,我們可以看到,“寫懸崖”發(fā)生后,該陣列依然運(yùn)行在一個(gè)很高的吞吐量水平上。
當(dāng)然,在上面的圖中我們也看到了另外一個(gè)廠商的閃存產(chǎn)品,出現(xiàn)了嚴(yán)重的寫懸崖問題。所以在對(duì)閃存陣列選型時(shí),一定要搞清楚閃存陣列廠商是否對(duì)該問題進(jìn)行過優(yōu)化,并***讓廠商給出一些有說服力的數(shù)據(jù)或者測試報(bào)告。