如何啟用NVMeZNS
ZNS的硬件變化
在較高層次上,為了啟用ZNS,市場上的大多數(shù)SSD只需要更新固件。ZNS對SSD控制器或其他硬件組件沒有任何新的要求,僅通過更改固件,就可以為現(xiàn)有SSD實現(xiàn)此特性。
硬件中的關(guān)鍵因素在于SSD被設(shè)計成只支持ZNS。首先,也是最重要的一點,只使用ZNS的SSD不需要像傳統(tǒng)企業(yè)SSD那樣過度配置。ZNS SSD同時負(fù)責(zé)執(zhí)行磨損平衡,但不再需要為垃圾回收過程提供很大的備用區(qū)域。使用得當(dāng),ZNS允許主機軟件避免SSD內(nèi)部寫入放大(Write Amplification,即WA)的幾乎所有情況。企業(yè)級SSD通常使用高達28%的超額配置比率(在典型的3 DWPD模型上,每1024GB閃存可用800GB), ZNS SSD可以將幾乎所有的容量暴露給主機系統(tǒng),同時不會影響高持續(xù)寫性能的能力。ZNS SSD仍然需要一些備用容量(如用于應(yīng)對閃存耗盡時突然出現(xiàn)的故障),但西部數(shù)據(jù)表示,預(yù)計ZNS在過載比率方面可以降低大約10倍。
對WA的更好控制也意味著在某些用例下QLC NAND是一個更可行的選擇(否則需要TLC NAND)。企業(yè)存儲工作負(fù)載經(jīng)常導(dǎo)致WA因子為2-5倍。使用ZNS,SSD本身幾乎不會引起WA,而合適的主機軟件可以避免引起很多WA,因此總體效果是提高SSD壽命,彌補QLC相對于TLC較低的耐久性。即使在ZNS SSD中,QLC NAND從根本上還是比TLC慢,但是在SSD中幾乎消除了后臺數(shù)據(jù)管理,意味著基于QLC的ZNS SSD可以在QoS指標(biāo)上與基于TLC的傳統(tǒng)SSD競爭(盡管總吞吐量更低)。
ZNS支持的另一個主要硬件更改是DRAM需求的大幅降低。在傳統(tǒng)的基于塊的SSD中,閃存轉(zhuǎn)換層(FTL)需要1GB的DRAM來處理1TB的NAND閃存,用來存儲地址映射或間接表,記錄當(dāng)前存儲每個邏輯塊地址(LBA)的物理NAND閃存地址。1GB / 1TB是FTL以4kB粒度管理flash的結(jié)果。ZNS消除了這一需求,它讓SSD管理每個區(qū)域數(shù)百MB的整個區(qū)域。追蹤包含每個區(qū)域的物理NAND擦除塊現(xiàn)在只需要很少的內(nèi)存,甚至可以用控制器上的SRAM來完成,甚至可以用幾十TB閃存的SSD。ZNS并不能讓SSD完全不需要DRAM,因為SSD對每個區(qū)域需要存儲的元數(shù)據(jù)比傳統(tǒng)FTL需要為每個LBA存儲量要大,同時SSD可能會使用一些DRAM緩存。
軟件模型
為了與分區(qū)存儲設(shè)備一起工作,為傳統(tǒng)塊存儲設(shè)備編寫的驅(qū)動程序(和其他軟件)需要進行一些修改。最明顯的是,主機軟件必須遵守只能在區(qū)域內(nèi)按順序?qū)懭氲男录s束,但光這樣還不夠。分區(qū)存儲還使主機軟件負(fù)責(zé)更多的數(shù)據(jù)放置管理工作,處理這項工作首先要跟蹤每個區(qū)域的狀態(tài)。這比聽起來要復(fù)雜得多,ZNS采用與主機管理的SMR硬盤相同的可能區(qū)域狀態(tài)概念。技術(shù)上,分別對應(yīng)SCSI和ATA命令集的ZBC和ZAC擴展:
這7個圓圈中的每一個都表示ZNS SSD上某個區(qū)域的可能狀態(tài)。這七個狀態(tài)中的一些狀態(tài)有一個明顯的目的:空區(qū)(Empty)和滿區(qū)(Full)被明顯標(biāo)識出來。
(一個區(qū)域在沒有存儲滿其容量下,可以被置于Full狀態(tài)。在這些情況下,將一個區(qū)域置于Full狀態(tài)就像在燒錄后完成光盤:在該區(qū)域被重置(擦除)之前,不能再寫入任何內(nèi)容。)
只讀(Read Only)和離線(Offline)狀態(tài)是當(dāng)硬盤的閃存失敗時使用的錯誤狀態(tài)。雖然ZNS SSD減少了寫放大,但仍需要在硬件層面上執(zhí)行損耗均衡。只讀和離線狀態(tài)只在整個硬盤生命周期結(jié)束時才會出現(xiàn)。因此,許多以分區(qū)存儲為目標(biāo)的軟件不會對這些狀態(tài)做任何事情,一旦一個分區(qū)進入其中一種狀態(tài),就會簡單地將整個設(shè)備視為死機。
現(xiàn)在還剩下三種狀態(tài):隱式打開(Implicitly Opened)、顯式打開(Explicitly Opened)和關(guān)閉(Closed)。
處于這三種狀態(tài)之一的區(qū)域被認(rèn)為是活動的。在任何給定時間,硬盤往往會限制可以打開(顯式或隱式)或活動區(qū)域的數(shù)量。產(chǎn)生這些限制是因為活動區(qū)域或開放區(qū)域需要一些額外的跟蹤信息。對于每個活動區(qū)域,硬盤需要跟蹤寫指針,該指針指示該區(qū)域已經(jīng)使用了多少容量以及對該區(qū)域的下一次寫操作將在何處進行。寫指針對于滿區(qū)或空區(qū)不需要,因為滿區(qū)不能接受更多的寫操作,空區(qū)將從區(qū)域的開頭寫入。
一個區(qū)域必須打開才能接受新的寫操作。區(qū)域可以通過簡單地發(fā)出寫命令隱式地打開,也可以使用區(qū)域管理命令顯式地打開(該操作實際上不寫新數(shù)據(jù))。
隱式和顯式打開區(qū)域之間的區(qū)別在于:SSD控制器可以自由地自動關(guān)閉通過寫命令隱式打開的區(qū)域;顯式打開的區(qū)域只有在主機軟件發(fā)出命令時才會處于關(guān)閉狀態(tài)。
如果ZNS SSD打開的區(qū)域數(shù)量達到最大值,并且它們都是顯式打開的,那么任何打開新區(qū)域的嘗試都將失敗。但是,如果其中一些區(qū)域只是隱式打開的,那么嘗試打開一個新區(qū)域?qū)?dǎo)致SSD關(guān)閉其中一個隱式打開的區(qū)域。
開放區(qū)和關(guān)閉區(qū)之間的區(qū)別允許硬盤保持對內(nèi)部資源的實際限制,以處理對區(qū)域新的寫操作。在某種程度上,這只是從SMR硬盤的延續(xù),但在閃存如何工作方面有一個相關(guān)的限制。現(xiàn)在,NAND閃存通常有大約16kB的頁面大小,但是ZNS SSD仍然支持對單個LBA的寫操作,通常是4kB(或512字節(jié))。這意味著寫入一個區(qū)域可以使閃存單元在一個部分編程的狀態(tài)。即使在只執(zhí)行頁面大小和正確對齊的寫操作時,由于SSD通常將頁面映射到物理內(nèi)存單元的方式,單元格可能會一直處于部分編程狀態(tài),直到進一步的寫操作到達。
處于部分編程狀態(tài)的閃存單元很容易發(fā)生讀取干擾錯誤,當(dāng)試圖從該單元或相鄰單元讀取時,可能會改變部分編程單元的電壓。Open Channel SSD通過簡單地禁止從這類頁面讀取來處理這個問題,但是分區(qū)存儲模型試圖避免對讀取命令施加額外的限制。ZNS SSD通常會緩存最近寫入的數(shù)據(jù),這樣讀取命令就可以在不接觸部分已編程的NAND頁面的情況下進行處理。用于這種緩存的可用內(nèi)存限制了開放區(qū)域的數(shù)量。
如果要關(guān)閉一個帶有部分編程內(nèi)存單元的開放區(qū)域,硬盤有兩種選擇:使用一些填充數(shù)據(jù)完成對這些單元的編程,跟蹤區(qū)域中的漏洞,并希望主機后面不要嘗試使用該區(qū)域的全部容量;或者硬盤可以一直緩沖最近寫入的數(shù)據(jù),甚至對于關(guān)閉區(qū)域也是如此。根據(jù)硬盤希望支持的活動區(qū)域數(shù)量,仍然允許ZNS SSD使用比傳統(tǒng)SSD少得多的DRAM,因此這種方法在實踐中更有可能被使用。既支持分區(qū)IO命名空間又支持塊IO命名空間的SSD可能能夠同時保持其所有區(qū)域處于活動狀態(tài)或打開狀態(tài)。
原則上,ZNS SSD可以將每個單獨的閃存擦除塊作為一個單獨的區(qū)域,具體大?。赡苁菐渍鬃止?jié))取決于底層閃存。這將意味著對單個區(qū)域的寫入速度限制為對單個NAND閃存die的寫入速度。對于最近的TLC NAND閃存,單模寫入速度上升到大約82MB/s(三星第6代V-NAND),對于QLC單模寫入速度低于10MB/s。在實際中,硬盤傾向于聚集多個擦除塊(支持跨多個die和所有控制器通道)的區(qū)域大小,這樣對單個區(qū)域的順序?qū)?或讀)就可以像傳統(tǒng)的基于FTL SSD所支持的那樣快。
最近的一個帶有512GB ZNS原型SSD的西部數(shù)據(jù)演示顯示,該硬盤使用256MB的區(qū)域大小(總共2047個區(qū)域),但也支持2GB區(qū)域。在單個分區(qū)的命名空間中,所有區(qū)域?qū)⑹褂孟嗤膮^(qū)域大小,但是硬盤可以支持重新格式化命名空間以更改其區(qū)域大小,或者支持使用不同區(qū)域大小的多個命名空間。
提示
許多最新的NVMe特性允許SSD和主機軟件交換關(guān)于數(shù)據(jù)布局、訪問模式和生存周期的可選提示。這是主機的SSD驅(qū)動特性,而不需要雙方都支持使用該信息。ZNS使區(qū)域成為主機必須直接處理的顯式概念,但對SSD的其他一些內(nèi)部操作采用提示方法。
ZNS SSD不執(zhí)行傳統(tǒng)SSD意義上的垃圾回收,但它們?nèi)匀回?fù)責(zé)損耗均衡。這意味著硬盤將不得不重新定位數(shù)據(jù)到不同的物理NAND擦除塊,特別是如果硬盤存儲的都是不太會被修改的數(shù)據(jù)。重寫整個區(qū)域(比說,256MB)是一項相當(dāng)大的后臺工作,它會對處理來自主機的IO命令的延遲產(chǎn)生顯著影響。ZNS SSD可以通知主機,它建議重新設(shè)置一個區(qū)域,因為它計劃很快在該區(qū)域上做一些后臺工作,并可以通知該項工作多久之后會開始進行。這為主機提供了重新設(shè)置區(qū)域的機會,如果仍然需要區(qū)域中的部分?jǐn)?shù)據(jù),則可能需要主機自己進行一些垃圾回收。(為了幫助處理這種情況,NVMe還添加了一個Copy命令,以便將不同的數(shù)據(jù)塊收集到單個連續(xù)的數(shù)據(jù)塊中,而不需要數(shù)據(jù)離開SSD。)
類似地,ZNS SSD可以建議主機將活動區(qū)域移動到滿狀態(tài),可以通過寫滿區(qū)域的剩余容量,或者發(fā)出區(qū)域Finish命令。
當(dāng)主機軟件同時注意以上提示并采取推薦的操作時,SSD就可以避免幾乎所有對性能影響較大的后臺操作或?qū)懛糯蟛僮?。但是因為這些僅僅是暗示,如果主機軟件忽略它們或者根本不符合要求,SSD仍然有義務(wù)在整個后臺處理過程中保存用戶數(shù)據(jù)。這可能會有一些副作用,例如在特殊情況下,硬盤必須將開放或活動區(qū)域移動到滿狀態(tài),并且必須編寫主機軟件來容忍這些事件。完全消除寫放大也是不可能的,例如,靜態(tài)數(shù)據(jù)可能最終還是需要重寫,以防止由于累積的讀取干擾錯誤而產(chǎn)生不可糾正的錯誤。
支持多個寫線程
在一個區(qū)域內(nèi)按順序?qū)懭霐?shù)據(jù)的要求,對軟件管理數(shù)據(jù),特別是對現(xiàn)有數(shù)據(jù)的更新提出了明顯的挑戰(zhàn)。但是,當(dāng)多個線程想要寫入同一區(qū)域時,也會造成性能瓶頸。發(fā)送到SSD的每個寫命令都需要定位到區(qū)域的寫指針指向的LBA。當(dāng)多個線程寫入一個區(qū)域時,在線程檢查寫入指針的位置和寫入命令到達SSD之間存在寫入指針可以被另一個線程寫入的競爭條件,將導(dǎo)致寫入被SSD拒絕。為了防止這種情況發(fā)生,軟件必須在線程之間同步,以正確序列化對每個區(qū)域的寫操作。當(dāng)有更多的線程在寫線程時,所產(chǎn)生的鎖開銷往往會導(dǎo)致寫性能下降,并且很難使隊列深度超過1。
為了解決這個限制,ZNS規(guī)范包括一個可選的append命令,可以用來代替write命令。append命令總是定位到區(qū)域的開頭,但是當(dāng)SSD開始處理該命令時,它將在寫指針?biāo)诘奈恢脤懭霐?shù)據(jù)。當(dāng)通知該命令完成時,SSD將數(shù)據(jù)實際著陸的LBA主機。這消除了同步需求,并允許多個線程同時將新數(shù)據(jù)寫入一個區(qū)域,而根本不需要core對core通信。缺點是主機軟件變得更加復(fù)雜,現(xiàn)在它必須在事后記錄數(shù)據(jù)位置,而不是在寫入數(shù)據(jù)之前嘗試分配空間。對于現(xiàn)有的IO API來說,即使是返回數(shù)據(jù)到達應(yīng)用程序的地址也是一個挑戰(zhàn),因為它們通常只設(shè)置為返回錯誤代碼給應(yīng)用程序。
append命令不是解決這種可擴展性挑戰(zhàn)的唯一解決方案;它只是這個NVMe ZNS規(guī)范的初始版本中標(biāo)準(zhǔn)化的一個。在原型或非標(biāo)準(zhǔn)的分區(qū)SSD中已經(jīng)提出和實現(xiàn)了其他解決方案。Radian內(nèi)存多年來一直在其SSD上支持自己的分區(qū)存儲形式。他們的解決方案是允許在寫指針前一定距離內(nèi)的無序?qū)懖僮?。SSD將緩存這些寫操作,并將寫指針提前定位到數(shù)據(jù)目前寫入的第一個間隙。還有一項NVMe技術(shù)提案正在標(biāo)準(zhǔn)化,即ZRWA(Zone Random Write Area),允許在SSD緩存中對數(shù)據(jù)進行隨機寫入和就地覆蓋。與Zone Append命令相比,這兩種方法在SSD上都需要更多的資源,但可以證明,這使軟件開發(fā)人員的工作更加輕松。
-
控制器
+關(guān)注
關(guān)注
114文章
17100瀏覽量
184219 -
SSD
+關(guān)注
關(guān)注
21文章
2983瀏覽量
119571 -
存儲設(shè)備
+關(guān)注
關(guān)注
0文章
167瀏覽量
19289
原文標(biāo)題:ZNS來了!一文看懂NVMe分區(qū)存儲!
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
華宇創(chuàng)新中心盛大啟用
賽米控丹佛斯南京工廠正式啟用
如何啟用XRDC的時鐘?
微軟東京研究基地正式啟用
在TMS320DM6467上啟用SmartReflex

在TI開發(fā)板上啟用Android Automotive

使用HIC啟用外圍擴展應(yīng)用程序應(yīng)用說明

評論