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

基于邏輯區(qū)間熱度的垃圾回收算法

電子垃圾回收產(chǎn)業(yè)的隱秘世界
Jvm垃圾回收機制及性能調(diào)優(yōu)實戰(zhàn)
交大發(fā)布可回收物垃圾分揀機器人,實現(xiàn)助力全國垃圾分類回收工作
智能垃圾回收機器人的應(yīng)用優(yōu)勢是什么
智能垃圾回收機器人的應(yīng)用優(yōu)勢有哪些
生活垃圾數(shù)據(jù)化分類回收方法及其回收系統(tǒng)(機械部分)
詳解JVM的垃圾回收算法和垃圾回收器

Kubernetes容器垃圾回收的策略
智能垃圾回收箱及其控制系統(tǒng)

智能垃圾回收箱控制系統(tǒng)硬件設(shè)計

智能垃圾回收箱功能實驗

評論