? ?
?01 背景
?目前基于閃存的固態硬盤保持著幾十年前的塊層接口,這在容量超額配置、頁面映射表的DRAM、垃圾回收開銷以及試圖減輕垃圾回收的主機軟件復雜性等方面帶來了巨大的代價。塊層接口向其上層展現出來的是一個一維的LBA數組,每個LBA都可以被讀寫,其最初的引用是為了隱藏存儲介質的不同。然而隨著存儲介質的迭代,為flash based存儲設備維護塊層接口語義代價越來越大,如flash based SSDs中FTL的運轉需要大量DRAM,GC需要OP空間,并且設備請求命令延遲被GC干擾后有抖動。NVMe區域命名空間(ZNS)的設定為SSD提供了一種全新的接口模式,ZNS作為一種新的存儲接口正在出現,邏輯地址空間被劃分為固定大小的區域,每個區域必須按順序寫入,以便于閃存訪問。
?02 問題
?1.ZNS的IO棧
一般來說,新的存儲接口需要修改軟件棧。對于ZNS,需要修改兩個主要的IO棧組件,文件系統和IO調度器。首先,原地更新的文件系統,如EXT4,必須被附加記錄的文件系統所取代,如日志結構文件系統(LFS),以消除隨機更新。因為LFS的一個區段是通過追加記錄按順序寫入的,每個區段可以被映射到一個或多個區域。其次,IO調度器必須保證一個區的寫請求的有序交付。例如,可以為每個區使用一個無序的隊列,調度器只需要確定不同區之間的服務順序。ZNS的順序寫要求使得ZNS只能適用于特定需求的應用訪問。
2.增加主機開銷
在LFS的append logging方案下,臟段的過時塊必須通過段壓縮(也稱為段清理或垃圾收集)來回收,它將段中的所有有效數據轉移到其他段,使段變得干凈。壓實會調用大量的復制操作,特別是當文件系統的利用率很高時。必須進行主機端GC,以換取使用無GC的ZNS SSD,盡管可以避免log-on-log下的重復GC。主機端GC的開銷比設備端GC的開銷要高,因為主機級塊復制需要處理IO請求,主機到設備的數據傳輸,以及讀取數據的頁面分配。此外,段壓縮需要修改文件系統元數據以反映數據的重新定位。此外,段壓縮的數據復制操作是批量進行的,因此,許多待寫請求的平均等待時間是相當長的。根據F2FS--廣泛使用的日志結構文件系統之一的實驗,當文件系統利用率為90%時,分段壓縮的性能損失約為20%。因此,可以說目前的ZNS只關注SSD方面的好處,而沒有考慮到主機的復雜性增加。為了簡化SSD的設計,所有復雜的東西都被傳遞給主機。
此外,當我們通過嵌入更多的閃存芯片來增加SSD的帶寬時,ZNS存儲系統將涉及收益遞減。ZNS設備的區域大小將被確定為足夠大,以利用SSD內部閃存芯片的并行性。因此,更高帶寬的ZNS SSD將提供更大的區域大小,而文件系統必須相應地使用更大的段大小。然后,主機遭受到更嚴重的段壓縮開銷,因為開銷通常與段大小成比例增加。為了提高IO性能,克服收益遞減的問題,需要進行主機-設備聯合設計,將段壓縮的每個子任務放在最合適的位置,而不損害原始ZNS的利益,而不是簡單地將GC開銷從SSD轉移到主機。
?03 方法
?為了降低主機端做垃圾回收所帶來的開銷,本文提出三種方法通過協同垃圾回收優化來降低開銷。
1.基于內部區域壓實(IZC)的垃圾回收
傳統的段壓實過程如圖1(a)所示,待回收區域中所有的有效數據都需要讀取到主機端,再寫到目標區域中。這個過程需要大量的讀寫以及元數據更新操作,會占用主機端的資源帶來性能的下降。相比于傳統的段壓實,基于IZC的垃圾回收通過將未修改的有效數據的復制交付給SSD,并且利用SSD的copyback操作進行內部的數據復制,從而降低主機端的資源占用,優化系統性能。圖1(b)是IZC方案下的壓實過程,過程如下:普通段壓實的數據拷貝任務被拷貝卸載(3)所取代,它發送zone_compaction命令來傳輸塊拷貝信息(即源和目標LBA)。因為目標數據沒有被加載到主機頁面緩存中,所以不需要相應的頁面緩存分配。固態硬盤內部控制器可以有效地安排幾個讀和寫操作,同時最大限度地提高閃存芯片的利用率。因此,段壓實的延遲可以大大減少。此外,存儲內的塊復制可以利用copyback操作。更為具體的執行流程建議閱讀原文相關部分。
?
圖1段壓實過程對比圖
2.稀疏的順序重寫,對F2FS的Threaded Logging提供支持
為了消除傳統段壓實的開銷,F2FS提出的Threaded Logging機制為段壓實提供了全新的思路。由于ZNSSSD不支持隨機寫的功能,所以F2FS都是關閉Threaded Logging機制。本文提出了影子映射的方式,使得ZNSSSD對Threaded Logging提供支持,從而優化段壓實的開銷。通過TL_open命令打開的zone會分配一個影子zone,并通過映射表來記錄對應關系,同時維護一個bitmap記錄有效信息。例如,在圖2中,SSD為zone1(1)分配了一個LogFBG,FBG 15。對于TL_opened區,該區的數據塊被分配到兩個FBG中,即原始FBG(FBG6)和LogFBG(FBG 15)。因此,這兩個FBG必須作為該區的映射FBG來維護。為了處理一個讀取請求,SSD通過比較目標LBA和WP來識別最新數據的塊位置。如果目標LBA在WP后面(目標LBA < WP),則訪問LogFBG。否則,原始FBG將被訪問,以滿足讀取請求。當TL_opened區最終被關閉時,LogFBG取代了原來的FBG,它被重新分配以備將來使用。
?
圖2Threaded Logging支持示意圖
考慮插入順序,有兩種模式:
以LBA為順序插入:如圖2,當SSD收到對第0塊的兩個寫請求時,它從FBG 6讀取A和B的跳過的塊,將它們與主機發送的P和Q的塊合并,并在LogFBG處寫下一個完整的塊。在處理完對第0塊的寫請求后,SSD可以通過檢查該區的有效位圖來感知第1塊將被跳過。為了讓WP提前準備好對第2塊的寫請求,被跳過的那塊必須被復制到LogFBG中。因此,在處理一個寫請求后,如果以下邏輯塊在有效位圖中被標記為有效,ZNS+ SSD在調整WP的同時將它們復制到LogFBG。這種類型的插入被稱為LBA有序插入(LP),每次插入都是在區的當前WP進行,以遵循LBA有序的寫入約束。
以PPA為順序插入:在圖2的例子中,在0號和2號的寫入請求到達之前,3號可以被復制,因為它們使用不同的閃存芯片。如果第1塊已經被復制,即使第2塊和第4塊的寫請求還沒有到達,第5塊也可以被復制。我們稱這種技術為PPA有序插入(PP),它只考慮PPA有序的寫約束。每當一個閃存頁在LogFBG被編程時,PPA-ordered plugging就會檢查對應的閃存塊中映射到下面閃存頁的塊的有效性,并提前發出該閃存塊的所有可能的插入操作。然而,如果發出過多的插入操作,可能會干擾用戶的IO請求處理。為了解決這個問題,當目標閃存芯片處于空閑狀態時,插入操作將在后臺進行處理。如果沒有足夠的空閑時間,當該區的WP必須通過跳過的區塊位置時,它們就會被處理。
3.混合段回收策略
通過上述的兩個策略,目前有兩種垃圾回收的方式。為了權衡在垃圾回收時選取哪種方式,本文提出了兩種垃圾回收策略的cost-benefit計算公式,在垃圾回收時總是選取開銷最小的垃圾回收方式。Npre-inv和Nvalid分別表示pre-invalid塊的數量和有效塊的數量。fplugging(N)是N個區塊的存儲內插入成本。Nnode和Nmeta分別表示修改后的節點塊和元數據塊的數量。fcopy(N)和fwrite(N)分別是N塊的復制成本和寫入成本。Bcold表示預測的未來冷塊遷移的收益。公式中部分值很難計算或者無法計算,本文對這些值采取近似估計。
? ?
圖3cost-benefit權衡公式
?04 實驗結果
?評估實驗是基于FEMU的SSD仿真器評估了ZNS+ SSD的性能。相關延遲配置如下:
?
表1實驗平臺設置
?實驗性能對比包含三個方面,分別為段壓實、Threaded Logging和SSD內部芯片利用率。
?段壓實性能:該實驗主要基于IZC的垃圾回收策略效果進行評估。通過將copy操作卸載到SSD內部,并且利用copyback操作,優化垃圾回收過程,降低垃圾回收開銷。實驗結果驗證了IZC策略可以很好的降低垃圾回收開銷。
?
圖4段壓實實驗結果
Threaded Logging性能:該實驗主要對支持Threaded Logging后垃圾回收的性能評估。ZNS+在所有基準上都優于ZNS和IZC。ZNS+的吞吐量比ZNS高約1.33-2.91倍。與IZC相比,ZNS+將varmail工作負載的節點和元數據寫入流量減少了約48%。在所有的工作負載中,超過85.8%的回收段是由ZNS+的線程記錄處理的,因為定期檢查點方案限制了預無效塊的數量。
?
圖5支持Threaded Logging實驗結果
SSD內部芯片利用率:該實驗主要對SSD內部芯片利用率進行評估。在所有的工作負載中,IZC和ZNS+的芯片利用率都比ZNS高。ZNS+(LP)可以利用兩個連續的寫請求之間的空閑時間,而ZNS+(PP)可以通過利用空閑的閃存芯片,將插入操作與正常的寫請求處理重疊起來。因此,與ZNS+(PP)相比,ZNS+(LP)顯示出更高的芯片利用率。
?
圖6ZNSSSDvsStream SSD性能對比實驗結果
05總結
目前的ZNS接口在主機上施加了很高的存儲回收開銷,以簡化SSD。為了優化整體的IO性能,必須將每個存儲管理任務放在最合適的位置,并使主機和SSD合作。為了將塊復制操作卸載到SSD上,本文設計了ZNS+,它支持存儲區內的壓實和Threaded Logging。與傳統的段壓實相比,在性能和SSD內部芯片利用率有很大的改進。
-
接口
+關注
關注
33文章
8496瀏覽量
150834 -
數據傳輸
+關注
關注
9文章
1836瀏覽量
64475 -
帶寬
+關注
關注
3文章
907瀏覽量
40845
原文標題:如何優化ZNS下的垃圾回收?
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論