閃存陣列的垃圾回收及“寫斷崖”
隨著成本降低和技術進步,閃存越來越多的被企業級數據中心作為存儲介質使用。相比傳統的磁盤介質,閃存的優勢顯而易見:速度快,耗電低,省空間。特別在速度方面,閃存具有壓倒性的優勢。
比方說,客戶原來采用某款高端磁盤陣列的時候,處理某個業務,需要花費10個小時。后來替換為閃存陣列,同樣處理該業務,只需要2個小時就可以完成。閃存帶來的性能優勢非常的明顯。
但客戶在使用用閃存陣列時發現:剛開始處理業務只用2個小時,可是運行了一段時間之后,忽然有一天,客戶發現處理業務用了2小時30分鐘。于是,問題來了,客戶一方面覺得2小時30分鐘比過去的10小時還是快多了,一方面也會想,為啥比起2小時,現在處理作業的時間慢了25%?
由此,我們來了解一下,閃存中的“寫斷崖(Write-Cliff)”現象。
什么是垃圾回收?
閃存是電子類介質,其處理數據的寫入方式和傳統的磁類介質(磁盤或者磁帶)的覆蓋寫不同:新數據寫入的區塊,必須是空白區塊,如果該區塊存有舊數據,那么必須先對舊數據進行“擦除”(Erase)。尤其是當寫入的數據總量達到閃存提供的所有容量之后,再次寫入更新時,就必然會產生“擦除”。
相比于常規的讀取和寫入操作,擦除有2個特點。
***,擦除的速度比讀寫要慢。擦除時間可能是寫入時間的10倍以上,基本達到ms級別;
第二,擦除的處理單位要比讀寫大:讀寫的處理單元是page(一般4KB大小,或者更大),擦除的單元是block(多個page組成,一般不少于512KB)。
如此,極端情況下,要寫入4KB的數據到某個已存有4KB舊數據的區塊,有可能首先先擦除其周邊512KB的區塊空間。
這種將Block中的有效Page合并到一個新的Block中,并將舊的Block進行擦除,留出更多的空閑Block的機制就叫做垃圾回收(Garbage Collection)。垃圾回收就相當于固態硬盤的碎片整理,目前基本已是SSD的標配機制,在全閃存陣列設計優化中也有涉及。
閃存“垃圾回收”帶來的“寫斷崖”和“寫放大”
回到文章一開始客戶遇到的性能下降25%的問題,在了解完閃存垃圾回收的過程之后,就很容易理解了。一臺40TB可用容量的閃存陣列應用到客戶現場,起始都是“干凈”的空白小塊,寫入速度很快。但隨著數據的不斷更新,必然會出現對應的數據搬運,數據擦除等后臺垃圾回收的相關操作,從而提供“干凈”的小塊給后續的寫入操作。若這些操作若和前端應用程序并行,將可能導致了性能的下降,我們稱之為“寫斷崖(Write-Cliff)”。
“寫斷崖”僅僅是垃圾回收帶來的問題之一。垃圾回收還帶來的另外一個問題,叫做“寫放大”:閃存的每個Cell(顆粒)都是有寫入次數的壽命限制的。垃圾回收導致了額外的Cell寫入,加速了Cell壽命消耗。我們稱之為“寫放大(Write-Amplification)”。
如何處理“寫斷崖”和“寫放大”
寫斷崖和寫放大都是閃存介質與生俱來的特性,無論是SSD固態硬盤,還是目前的全閃存陣列廠商,都無法避免這兩個問題。
閃存陣列廠商一般會通過介質材料,算法以及架構的優化等手段,來將這兩種影響控制在一定的范圍內。比如某廠商,通過以下手段來優化寫斷崖的問題:
首先,采用“超供給”( Over-Provisioning)方式,通過提供更多的顆粒數量(比如用戶可見容量40TB,而實際物理容量超過67TB),用于減緩整體閃存壽命的磨損,并實現更為靈活的預防性垃圾回收。
同時,采用了靈活的垃圾回收處理機制,配置閑時垃圾回收引擎,從而不占用處理前端應用數據IO的硬件資源。
***,通過全局FTL和優化的上層寫入機制,將隨機IO整理順序化,減少底層實際讀寫次數。
此外,還有均衡磨損算法,監測機制等手段,來優化緩解這兩個問題。
總之,對該問題處理的效果,也是衡量閃存陣列能力的因素之一。
消除誤區,“寫斷崖”并不可怕
***,需要說明的是,寫斷崖并不可怕。
即使寫斷崖帶了的性能的降低,但速度降下來之后,若閃存陣列處理得當,其性能還是要遠遠高于傳統磁盤陣列。好比您以100塊錢的價格買了一種紀念幣,***的時候紀念幣價格飆升到了300塊錢,但后來降到了280塊錢,并在280塊錢平穩下來。那么整體來看,收益還是很好的。
所以在對閃存陣列選型時,一定要搞清楚閃存陣列廠商是否對該問題進行過優化,并***讓廠商給出一些有說服力的數據或者測試報告。