一、ZNS SSD基本原理
ZNS SSD的原理是把namespace空間劃分多個zone空間,zone空間內部執行順序寫。這樣做的優勢:
-
降低SSD內部的寫放大,提升SSD的壽命
-
降低OP空間,host可以獲得更大的使用空間
-
降低SSD內部DRAM的容量,降低整體的SSD成本
-
降低SSD寫延遲
-
ZNS寫入了標準NVME協議,更易于打造軟件生態,利于普及
與SMR架構類似,ZNS SSD的zone空間內部,也是追加寫。每次順序寫完成后,有一個標記位“Write Pointer”來記錄已經寫過數據所在的LBA位置。
Zone的狀態有以下幾個:
-
Full:zone寫滿的狀態
-
Empty:zone數據空的狀態
-
Explicitly Opened:對zone執行open zone命令成功后的狀態
-
Implicitly Opened:對處于Empty或者Closed狀態的zone完成寫數據后的狀態
-
Closed:還未寫滿的zone,在close zone命令成功后的狀態
-
Read Only:處于只讀狀態的zone
-
Offline:zone處于異常狀態,可能是介質異常或者其他的問題
在Linux內核適配方面,針對zoned設備,之前針對SMR已經有ZAC/ZBC命令規范,并在4.10內核已經支持。針對ZNS SSD,在內核5.10以后也支持了ZNS SSD,軟件生態已經基本完善。
在傳統的SSD中,SSD控制器會搭配10-100個NAND Die存儲介質,管理這些NAND介質就需要一個強大的算法,這里就有一個FTL管理層。
在這個過程中,ZNS SSD最大的優勢是取消了塊接口稅(Block Inteface Tax)。
與傳統Block SSD相比,性能更加穩定,不受OP的影響。
如果在文件系統層刪除一個文件,比如下圖文件C,在沒有GC搬遷的情況下,會在無效數據C會占用大量的存儲空間。
GC搬遷有效數據到空的block后,之前無效文件C所在數據塊block就可以被整個block擦除了。
整個GC的過程最終導致寫放大WAF的增加。寫放大的增加相應對SSD帶來的負面效應就是寫帶寬下降、讀延遲升高、使用壽命下降等問題。
在ZNS的場景下,不同應用按照Zone配置信息,相應存放業務數據。主要集中在順序讀寫的workload場景。由于是Host管理數據的擺放和存取位置,會最大程度減少GC垃圾回收。
減少SSD的DRAM空間和去掉OP冗余空間,提升用戶可用的容量。
二者具體的優劣對比:
擴展閱讀:NVMe SSD:ZNS與FDP對決,你選誰?
二、字節跳動ZNS SSD應用案例分析
字節給出未來數據中心的發展趨勢,包括計算、網絡、存儲三大組件。
字節目前遇到云存儲的痛點主要包括:性能、成本、穩定性、定制化。性能方面,SSD的垃圾回收在傳統SSD并不可控。成本方面,傳統SSD需要預留一定的OP預留空間。穩定性方面,出現異常后,傳統SSD的定位周期很大程度依賴SSD廠商。定制化方面,目前主要有SGL、CMB、PMR、ZNS等。
在使用ZNS SSD的場景中,字節采用了軟硬結合的方式整體優化。軟件方面,負責GC,WL,NAND數據存放位置優化以及QoS優化。硬件方面,主要負責是底層NAND異常和NAND管理,以及CMB、PMR特性。
軟件架構如下:NAND相關等盤體異常可以通過AER進行錯誤上報。
軟件針對數據管理的架構:
利用分布式存儲chunk管理,與Zone SSD映射關系如下:
通過分布式存儲完成Host側的垃圾回收GC:
Host在對ZNS SSD寫數據過程中,有一個很重要的特性就是要支持寫入數據最后一個LBA overwrite覆蓋寫,優化NAND存儲空間,最終降低寫放大。LBA覆蓋寫在ZNS標準協議是不支持的,需要定制化設計。
同時,對于有硬件,有兩個重要的定制功能,是需要支持CMB和PMR。
CMB(Controller Memory Buffer),即控制器內存緩沖區,是SSD控制器內部用于緩存數據的動態隨機訪問存儲器(DRAM)。它的主要目的是加速數據處理,減少讀寫操作的延遲。通過使用CMB,SSD可以預先將一部分數據緩存在高速的DRAM中,然后根據需要快速地從CMB中提供數據給主機系統,或者臨時存儲等待寫入閃存的數據。
CMB的工作原理包括:
-
預取(Prefetching):當控制器預測到即將需要的數據時,會提前將其加載到CMB中,從而減少了實際從閃存讀取數據的時間。
-
寫回(Write-back):如果主機發出一個寫入請求,而目標地址已經存在于CMB中,那么控制器可以選擇先更新CMB中的數據,稍后再將修改后的數據寫入閃存。這允許更快地響應寫入操作,并且有助于提高整體性能。
在 NVME 1.4 SPEC引入了類似CMB的PMR(Persistent Memory Region),PMR的作用是提供一種內存級讀寫速度、斷電后數據不會丟失的存儲區域。它使用此功能創建并控制一個稱為持久性內存區域(PMR)的存儲區域,該存儲區可以映射到PCI Express總線上的地址空間上面,并且可被主機和其他設備訪問。PMR的主要特點是,在電源斷電(power cycle),控制器復位以及PMR啟用/禁用切換之后,寫入PMR的數據也會保留。此功能使SSD除了提供通過邏輯塊地址(LBA)訪問的存儲區域外,還提供了另一個非易失性存儲區域,并且這塊存儲區域假定的訪問方法是內存訪問而不是塊訪問。
Zero Copy通過消除這些不必要的數據復制來提高效率。它允許數據直接從源緩沖區傳輸到目標設備,而不需要經過中間緩沖區。這樣可以減少CPU的參與,釋放更多的計算資源,并加快數據傳輸的速度。
SGL(Scatter-Gather List)是實現Zero Copy的一種方法。在這種機制下,應用將一系列分散的數據塊(稱為scatter-gather list)提交給設備驅動程序,而不是一個連續的內存區域。驅動程序則可以直接將這些分散的數據塊傳輸到目標設備上,從而避免了在傳輸過程中對數據進行復制。
結合Zero Copy技術和SGL,可以顯著提升存儲系統的性能,尤其是對于需要處理大量小規模I/O操作的應用場景,如數據庫、虛擬化環境和大數據分析等。
針對云數據中心對ZNS SSD的特別定制需求,字節跳動總結如下:
基于字節跳動公布的ZNS SSD的應用效果顯示:可用容量提升30%,帶寬提升3倍,成本下降20%。