


摘?要:隨著制造工藝的發展,NAND閃存顆粒的存儲容量越來越大,固態驅動器(SSD)的價格得以降低,全閃存存儲逐漸成為主流。但在容量提升的同時,閃存顆粒的性能越來越低,使用壽命也越來越短,存儲系統中的數據損壞風險直線上升。另一方面,新型的持久內存(PMEM)介質和設備不斷出現,其擁有持久性、字節尋址、高性能、低延遲的特性,使用壽命和性能都遠大于SSD。通過合理的系統設計,可以充分發揮二者的優勢,利用PMEM優化閃存的性能和壽命,構建高性價比的全閃存存儲系統。
關鍵詞:SSD;PMEM;持久內存;閃存;耐久度;性能
隨著技術的發展,主流固態驅動器(SSD)使用的閃存顆粒從SLC、MLC、TLC逐步過渡到QLC,加之3D NAND堆疊工藝,使得閃存顆粒的容量越來越大,容量型SSD具有較高的性價比,可用于取代傳統機械硬盤(HDD),構建全閃存存儲。但隨之而來的是,QLC閃存顆粒的性能和耐久度遠低于TLC,主流的QLC只能擦除500~1000次,更適合用來構建溫數據或冷數據存儲。當用于存儲需要頻繁修改的熱數據時,閃存磨損過快,SSD損壞的風險直線上升。QLC的性能降低也導致數據訪問延遲上升,故而無法承載諸如OLTP數據庫等對性能要求較高的在線業務。
與此同時,以電阻式存儲器(ReRAM)、磁阻式存儲器(MRAM)、相變存儲器(PCM)等為代表的持久內存(PMEM)技術近年來得到了大幅的發展,其擁有持久性、字節尋址、高性能、低延遲的特性。持久內存的性能與易失性內存(DRAM)接近,可擦寫次數和延遲都大幅優于TLC、QLC等閃存介質。
Intel在2019年發布傲騰數據中心持久內存Optane DCPMM,容量有128GB、256GB、512GB三種規格。雖然持久內存具有很多的優秀特性,但相比SSD來說,其價格仍然較高、容量也較小。
QLC SSD容量大,價格低,但壽命較短,PMEM性能高,壽命長,但容量偏小,二者具有較強的互補性。如何針對二者的特征,設計面向高負載場景的閃存存儲,是本文要解決的問題。
基于持久內存的高性能和字節尋址特性,本文提出了一種面向PMEM優化的閃存存儲系統,通過將PMEM與閃存設備同時使用,優化數據讀寫的策略,極大地降低了閃存的讀寫次數,從而延長其使用壽命;同時,發揮PMEM的高性能特征,降低請求延遲,提升系統的并發IOPS。相比于使用TLC SSD搭建閃存存儲,基于PMEM和QLC SSD搭建的閃存存儲,在性能和成本上都具備較為明顯的優勢。
1 系統設計
本系統基于PMEM和SSD搭建混合存儲,通過識別頻繁讀寫的熱點數據,以及對SSD不友好的小粒度IO,將其存儲到PMEM中,從而優化SSD壽命和系統整體性能。
基于QLC SSD搭建本系統時,能達到最好的性價比。TLC SSD的壽命問題沒有QLC SSD突出,但基于TLC SSD搭建本存儲系統時仍然可以獲得更好的系統性能表現,降低滿足同等性能要求時所花費的硬件成本。
系統整體架構如圖1所示。一方面,本系統根據讀寫請求的數據大小,確定其寫入位置;另一方面,根據數據的讀寫頻度識別熱點數據,并按需將冷熱數據在持久內存和SSD之間遷移,可以達到優化性能和閃存壽命的目的。
1.1 小粒度IO寫策略
小粒度IO指小于4KB的請求。SSD的page(更新操作的最小粒度)大小通常都是4KB,對于小于4KB的寫請求將通過Read-Modify-Write完成寫入,即首先讀取4KB的原始內容設備的緩存中,然后將修改的數據合并到緩存,最后重新寫入完整的4KB數據。此時,更新操作的性能較低,寫放大也較大。
由于PMEM是字節尋址的,當小粒度IO寫入PMEM時,可以直接寫入存儲介質,而無需執行Read-Modify-Write過程。無論從性能還是耐久度方面考慮,將小粒度IO寫入PMEM都是一個更優的選擇。可以達到優化性能和SSD壽命的雙重目的。
1.2 中等粒度IO寫策略
中等粒度IO指介于4KB和2MB之間的請求。對于此類請求,同樣優先寫入PMEM。此策略主要是考慮到減少閃存中數據的移動和擦除操作,以優化閃存的壽命。
雖然SSD的更新操作以page為粒度,但FTL(Flash Translation Layer)層執行擦除操作時,需要以block為單位進行。一個block中包含若干個page,典型的block大小為2MB。當4KB-2MB大小的隨機數據寫入閃存時,會分配新的page進行存儲,同時將舊的page標記為無效。此時,無效數據在block的連續空間上形成空洞。隨著數據的不斷寫入,FTL需要執行垃圾收集(GC)操作,將有效數據塊進行移動,然后擦除和回收完整的block空間。
本系統對于4KB-2MB大小的數據直接寫入持久內存中,并將邏輯上連續的數據不斷的合并成2MB大小的數據塊,然后按需將其遷移到SSD中。這樣既減少了SSD的數據寫入,也減少了FTL層執行垃圾收集時數據的移動和擦除操作,從而減少了閃存的磨損。同時,因為持久內存優秀的性能,將數據直接寫入持久內存也提高了系統的整體性能表現。
1.3 大粒度IO寫策略
大粒度IO指2MB以上的IO,對于此類數據會直接寫入閃存中。一方面,現有的PMEM設備在大粒度IO的吞吐率上優勢不明顯;另一方面,由于中小粒度IO已寫入PMEM,故此時數據寫入閃存時大概率是順序存儲的,閃存block中出現空洞的概率較小,從而減輕了FTL層執行垃圾收集的頻率和開銷。
1.4 熱點數據
除了按照數據粒度進行區分之外,本系統還針對數據讀寫頻度進行統計,并將熱點數據優先存儲到PMEM中。一方面,對于與頻繁讀取的數據,將其存儲到PMEM中可以顯著降低讀取延遲,提升訪問性能;另一方面,對于頻繁更新的數據,將寫操作轉移到PMEM,也可以進一步優化SSD的壽命。
2 數據放置策略
對于上述4類數據,在寫入時根據類型不同,優先寫入PMEM或SSD,并根據PMEM的空間容量,以及數據熱點的識別情況進行遷移。
當PMEM剩余空間不足時,需要將數據刷寫到SSD中,以釋放存儲空間。當熱點數據變更時,則需要將SSD中的數據緩存到PMEM,以提升訪問性能。
2.1 中小粒度IO寫流程
小粒度IO和中等粒度IO的寫入流程相同,即優先寫入PMEM。具體步驟為:
(1)從索引獲取數據在持久內存中的地址;
(2)若該地址有效,轉到步驟5;
(3)否則,在持久內存中分配存儲空間;成功申請空間后,跳轉到步驟5;
(4)否則,觸發持久內存空間回收機制;然后重新申請分配存儲空間,即跳轉回步驟3;
(5)將數據寫入持久內存;
(6)更新索引信息。
需要指出的是,隨著PMEM使用空間的增加,當中小粒度IO再次寫入時,可能實際已遷移到SSD中。此時,仍然可以通過上述流程將新數據寫入PMEM,同時回收SSD存儲空間。
由于SSD實際總是執行異地寫入,故保留該SSD空間以用于后續可能的PMEM空間回收(此時該數據被再次遷移到SSD)并不會產生實際收益。立即回收該空間,同時向SSD發送TRIM或UNMAP指令反而更加有利于優化SSD的垃圾收集。
2.2 大粒度IO寫流程
大粒度IO優先寫入SSD,但仍然應當先在空間索引中查詢其是否存儲在PMEM中,因為大粒度IO可能被識別為熱點數據而遷移到PMEM中。
如果數據不在PMEM中,則按如下流程處理:
(1)獲取數據在SSD中的空間地址;
(2)若該地址已存在且有效,轉到步驟5;
(3)在SSD中分配存儲空間地址;
(4)將數據寫入SSD地址對應的數據存儲空間;
(5)更新索引信息。
與PMEM空間不同,當無法分配SSD存儲空間時,則意味著整個系統的可用容量不足,寫流程將會返回失敗信息,提示用戶進行清理或擴容操作。
2.3 PMEM空間回收
隨著數據的寫入,PMEM剩余空間逐步減少。當達到設定的閾值時,觸發持久內存空間回收機制。根據數據放置的策略,持久內存中的數據可能包括讀寫熱點數據、中等粒度數據,以及小粒度數據。其中,熱點數據可能是大粒度數據,也可能是中小粒度數據。
執行空間回收時,需要按恰當的優先級處理上述各類數據,以達到最佳效果。具體而言,按照熱點數據(大粒度)、中等粒度數據、小粒度數據、熱點數據(中小粒度)的順序進行回收。這樣排序的目的是盡快釋放更多的持久內存空間,此外,將更大粒度的數據寫入SSD時,寫放大更低,對垃圾收集的影響也更小。
當PMEM剩余空間滿足預定比例后,回收即告終止。
2.4 熱點數據遷移
對于頻繁訪問的熱點數據,可以將其從閃存空間遷移到持久內存空間,即對數據按熱度進行分級存儲。熱點數據從SSD遷移到PMEM的具體步驟如下:
(1)根據熱點數據識別算法識別閃存中的熱點數據;
(2)申請熱點數據的持久內存的空間地址;若持久內存不足導致申請失敗,則直接結束;
(3)將熱點數據寫入持久內存中對應的地址;
(4)更新熱點數據的索引信息,講閃存空間地址替換為持久內存空間地址。
當PMEM空間申請失敗時,可以認為PMEM空間回收操作正在進行,故無須在本流程中實現額外的空間回收機制。
結語
通過在閃存存儲中引入持久內存設備,并針對持久內存和閃存的IO特征優化數據讀寫策略,本系統提升了閃存存儲的性能和壽命。尤其是QLC閃存介質的SSD,其使用場景得到了擴展,使得基于低成本的容量型SSD搭建高性能閃存存儲成為可能,有效地降低了系統的整體擁有成本。
大多數系統中的IO都是中小粒度的IO,故而,使用PMEM優化閃存存儲的好處顯而易見,在獲得極大的IOPS提升的同時,SSD的寫入次數也相應降低,有效延長了SSD的使用壽命。
隨著RDMA技術的普及,通過高速網絡訪問持久內存的技術和規范也日趨成熟,在低延遲網絡上搭建基于持久內存和SSD的分布式閃存存儲也成為可能,大容量、高性能的分布式存儲有著廣泛的應用前景,是未來主要的技術發展方向。
參考文獻:
[1]陸游游,舒繼武.閃存存儲系統綜述[J].計算機研究與發展,2013,50(01):49-59.
[2]鄧傲松.閃存友好型文件系統性能優化技術的設計[D].重慶大學,2018.
[3]石亮.閃存存儲系統的性能優化研究[D].中國科學技術大學,2013.
[4]曾祥偉.基于閃存特性的固態盤緩存算法研究[D].暨南大學,2020.
[5]李棋.基于閃存文件系統的存儲技術研究[D].重慶大學,2019.
[6]韓書楷,熊子威,蔣德鈞,熊勁.基于持久化內存的索引設計重新思考與優化[J].計算機研究與發展,2021,58(02):356-370.
[7]徐遠超.面向新型非易失存儲的文件系統研究綜述[J].計算機應用研究,2021,38(06):1601-1610.
[8]肖仁智,馮丹,胡燏翀,張曉祎,程良鋒.面向非易失內存的數據一致性研究綜述[J].計算機研究與發展,2020,57(01):85-101.
[9]王佰平.基于新型非易失存儲的混合內存數據頁交換算法研究[D].重慶大學,2019.
基金項目:國家重點研發計劃(2018YFB1003302);廣東省科研事業單位重點領域研發計劃項目(2020B010139 0001)
作者簡介:陳正華(1983—?),男,工程師,CCF會員,研究方向:分布式存儲、持久內存、高性能網絡。