本工作發表于ATC 2021。當前基于閃存的 SSD 保留了幾十年前的塊接口,這使得在容量過度配置、用于頁面映射表的DRAM、垃圾回收開銷以及試圖減輕垃圾回收的主機軟件復雜性等方面付出了巨大的代價。分區命名空間 (ZNS) 接口為這種不斷增加的塊接口稅提供了庇護。ZNS使基于閃存的SSD具有更高的性能和更低的每字節成本。通過將管理擦除塊內數據組織的責任從FTL層轉移到主機軟件,ZNS消除了設備內LBA到頁的映射、垃圾回收和OP空間。
01?背景
目前基于閃存的固態硬盤保持著幾十年前的塊層接口,這在容量超額配置、頁面映射表的DRAM、垃圾回收開銷以及試圖減輕垃圾回收的主機軟件復雜性等方面帶來了巨大的代價。塊層接口向其上層展現出來的是一個一維的LBA數組,每個LBA都可以被讀寫,其最初的引用是為了隱藏存儲介質的不同。然而隨著存儲介質的迭代,為flash based存儲設備維護塊層接口語義代價越來越大,如flash based SSDs中FTL的運轉需要大量DRAM,GC需要OP空間,并且設備請求命令延遲被GC干擾后有抖動。
02?問題
塊接口稅
現代存儲設備,如SSD和SMR HDD,采取的是與塊層接口不匹配的記錄技術。這種不匹配導致了性能和操作成本的降低。在基于閃存的固態硬盤上,一個空的閃存頁可以在寫入時被編程,但覆蓋它需要一個擦除操作,這個操作只能在擦除塊(一組一個或多個閃存塊,每個塊包括多個頁面)的粒度上發生。對于固態硬盤暴露出的塊層接口,FTL必須管理一些功能,如使用隨處寫的方法進行就地更新,將主機邏輯塊地址(LBA)映射到物理設備頁面,垃圾回收陳舊數據,并確保擦除塊的均衡磨損。
但是,FTL對性能和操作成本有很大影響。為了避免就地更新的媒介限制,每個LBA寫入都被引導到下一個可用的位置。因此,主機放棄了對物理數據放置的控制,而由FTL執行。此外,舊的、陳舊的數據版本必須被垃圾回收,導致正在進行的操作的性能不可預測性。由于需要進行垃圾回收,必須在設備上分配物理資源。這就要求媒體超額配置總容量的28%,以便在物理地址之間移動數據。還需要額外的DRAM來維持邏輯和物理地址之間的易失性映射。容量超額配置和DRAM是固態硬盤中最昂貴的部件,導致每千兆字節可用容量的成本更高。
圖1 多線程寫入工作負載的吞吐量
現有的減稅策略可能是低效的
降低塊層接口稅主要包含兩種方法:支持流的SSD (Stream SSD) 和開放通道SSD (OCSSD)。
Stream SSD允許主機用流提示來標記其寫入命令。流提示由Stream SSD解釋,允許它將傳入的數據區分到不同的擦除塊上,從而提高固態硬盤的整體性能和介質壽命。流式固態硬盤要求主機仔細標記具有相似壽命的數據,以減少垃圾回收。如果主機將不同壽命的數據混合到同一個數據流中,Stream SSD的行為與塊層接口固態硬盤類似。Stream SSD必須攜帶資源來管理這樣的事件,所以Stream SSD不會舍棄塊層接口固態硬盤的額外介質超額配置和DRAM的成本。
OCSSD允許主機和固態硬盤通過一組連續的LBA塊進行合作。OCSSD可以將這些塊暴露出來,使其與媒體的物理擦除塊邊界一致。這消除了設備內的垃圾收集開銷,并減少了媒體超額配置和DRAM的成本。在OCSSD中,主機負責數據放置。這包括底層介質的可靠性管理,如磨損平衡,以及特定的介質故障特征(取決于OCSSD類型)。這有可能提高固態硬盤的性能和介質壽命,但主機必須管理不同的固態硬盤實現的差異,以保證耐用性,使接口難以采用,并需要不斷的軟件維護。
03?方法
NVMe分區命名空間命令集規范,簡稱為ZNS,最近被引入作為基于閃存的SSD的新接口標準。ZNS接口代表了主機軟件和基于閃存的SSD之間的新功能劃分。ZNS提供了對這種不斷增長的塊層接口稅的庇護。
Zoned存儲模型
Zoned Storage model,最初的思想來源于SMR HDDs和OCSSDs,誕生于無需兼容塊接口同時又滿足存儲設備的需要。ZNS接口提供了與媒介無關的下一代存儲接口。
Zoned Storage model中存儲設備的管理單位為zone,zone是一組連續LBA的集合。在zone中,支持random read,但是write必須是順序的,對zone的over write需要對整塊zone進行reset。
每個zone有其各自的狀態,如empty、full、opened、closed,zone的狀態表達了其在該zone中的操作限制。且由于資源的限制,處于opened狀態的zones的數量受到設備限制。
圖2 zone邏輯概念圖
ZNS SSD設計架構
ZNS SSDs的設計主要考慮兩方面,一是硬件方面,二是使應用適應ZNS接口方面。
1. 硬件方面:
ZNS SSDs放棄了對隨機寫的支持,隨之而來的使由host端負責GC工作。在ZNS SSDs' FTL的設計需要考慮以下的權衡。
Zone Sizing:Zone Size不同產生的效果也不同。Size小的則host有更多的數據放置自由度,代價是zone可能無法橫跨所有die而對單個zone的讀寫達不到flash的滿帶寬。而Size大的則host放置數據自由度低,而帶來的結果是單個zone的讀寫帶寬很高。
Mapping Table:塊層接口SSDs中的FTL維護著lba粒度的全相聯mapping table,1TB的存儲介質大約需要1GB的mapping table。在ZNS SSDs中可以考慮將更改mapping table的粒度,如到zone粒度,以減少DRAM的使用。
Device Resources:每個opened zone都需要一定的設備資源來維護元數據。同時SSDs內部資源有限,如DRAM、Channel等。ZNS SSDs中所有的zones共享這些資源,所以SSDs進行了active zones的數量限制。通常可限制同時活動的zones的數量為8-32個。
2. 軟件方面:
目前討論三種使主機軟件適配于ZNS interface的方法,分別是主機端FTL、文件系統和端到端數據放置。
Host-side FTL:主機端FTL充當應用端隨機寫、in-place update與ZNS SSDs端順序寫語義的橋梁。主機端FTL在主機端控制數據放置和垃圾回收,暴漏給應用傳統的塊層接口。
File Systems:目前的文件系統大部分都是in-place writes,并不適應Zoned存儲模型。一些LFS文件系統如f2fs、btrfs和zfs已經添加了對Zones的支持。但如f2fs和btrfs對zone model的支持僅限于在SCSI中的ZAC/ZBC,本文是對f2fs進行修改以對ZNS's zone model進行支持。
End-to-End Data Placement:理想情況下zone-write語義應該與應用中的數據結構完全匹配,以達到最小的寫放大、最高的帶寬和最低的延遲。此類應用的合適候選者為RocksDB、CacheLib等。本文展示了ZenFS作為RocksDB的存儲后端的性能。
圖3 ZenFS架構圖
04?實驗結果
評估實驗是基于一個生產型固態硬盤硬件平臺上進行的,該平臺該平臺可以將自己暴露為塊狀接口固態硬盤或ZNS固態硬盤。硬件平臺的配置如下:
表1 實驗平臺設置
實驗性能對比包含三個方面,分別為原始設備I/O性能、端到端的應用性能和與ZNS SSD vs Stream SSD。
原始設備I/O性能:該實驗主要對ZNS SSD和傳統塊層接口SSD的吞吐量進行評估。ZNS SSD由于最大化減小了塊層接口稅,所以體現出更優秀的吞吐量。塊層接口SSD的目標寫入速度高達300MiB/s(0% OP)和500MiB/s(28% OP),而ZNS固態硬盤的寫入速度為1GiB/s。實驗結果驗證了ZNS SSD可以很好的避免塊層接口稅開銷問題。
圖4 吞吐量優化實驗結果
????端到端的應用性能:該實驗主要對RocksDB在不同的文件系統作為存儲后端的性能評估。通過修改文件系統為ZNS SSD管理提供支持,從而獲取更優的吞吐量。兩個基準測試都顯示XFS和F2fs設置的性能低于F2fs(ZNS)和ZenFS。最重要的影響出現在overwrite基準中,其中垃圾收集的開銷嚴重影響了整體性能。ZenFS比XFS快183%,而f2fs(ZNS)的表現 比XFS好42%,比f2fs好33%。
圖5 IOPS優化實驗結果
ZNS SSD vs Stream SSD:該實驗主要對ZNS SSD和Stream SSD的性能評估。在具有 7% OP并且在 XFS 和 f2fs 之上啟用或禁用流的塊層接口 SSD上執行的fillrandom和overwrite基準測試的吞吐量。在啟用流的 SSD 上,XFS上的RocksDB在fillrandom和overwrite上分別提高了11%和16%的吞吐量。在啟用流的 SSD 上,f2fs上的RocksDB在fillrandom和overwrite分別提高了24%和4%的吞吐量。與f2fs(Streams)相比,f2fs (ZNS)的吞吐量分別提高了 17% 和 44%。
圖6 ZNS SSD vs Stream SSD性能對比實驗結果
05?總結
ZNS使基于閃存的固態硬盤具有更高的性能和更低的每字節成本。通過將管理擦除塊內數據組織的責任從FTL轉移到主機軟件,ZNS消除了設備內LBA到頁的映射、垃圾回收和OP空間。文章對ZNS專用的F2FS和RocksDB實施的實驗表明,與在相同的SSD硬件上運行的傳統FTL相比,在寫吞吐量、讀尾部延遲和寫放大方面有很大的改進。
致謝
感謝本次論文解讀者,來自華東師范大學的準博士生宋云鵬,主要研究方向為軟硬件協同設計。
編輯:黃飛
?
評論
查看更多