SSD做爲新型存儲介質對外暴露成一種通用塊設備,傳統應用彷佛無需任何改變就能夠在SSD上運行。在實際應用過程當中,傳統業務的確能夠在SSD上直接運行,但問題是SSD並無被充分利用,優點沒有被充分發揮;更糟糕的是業務的IO特性會致使SSD出現新的問題。例如,在有些應用現場,用戶發現SSD的使用壽命被很快耗盡,寫放大系統變得很大,使用壽命與預期不一樣。廠商的寫放大系統是在特定的IO Pattern下測算出來的,實際應用因爲存在大量的512字節小寫問題,數據分佈不夠「完美」,從而致使SSD內部的寫放大係數比預期要大,從而影響SSD的使用壽命。一句話,SSD的使用不是那麼簡單的,其與業務的IO Pattern息息相關。若是想在企業級SSD上獲取足夠的性能、一致性以及使用壽命,那麼須要面向SSD對存儲軟件棧進行重構。重構過程的一個思路是經過優化輸入SSD的IO Pattern,來獲取SSD的最佳工做狀態,發揮SSD的性能、避免SSD的問題。緩存
在IO Pattern的優化方法中,正在蓬勃發展的NVDIMM須要尤爲關注。能夠這麼講,在技術上NVDIMM和SSD是天生一對,他倆能夠特性互補,短時間內共存發展。NVDIMM其實並不是一個革命性、全新的東西,不少磁盤存儲系統早就採用NVRAM技術來實現掉電非易失的緩存。這種NVRAM基於PCIe總線,經過電池保證系統在斷電狀況下的數據可靠性。NVRAM在存儲系統中一般會做爲數據緩存。爲了保證數據可靠性,一個系統中會設計兩塊NVRAM,經過Mirror的方式冗餘數據。NVDIMM與NVRAM相比,最大的差異是將接口從PCIe轉移到了DIMM(內存接口),其次在掉電數據保護方面經過NAND Flash和超級電容相結合的方式保證數據不丟,或者直接採用新型存儲介質,例如Xpoint、ReRAM等。服務器
在層次化存儲系統中,NVDIMM的性能基本和DDR內存的性能是相同的。在性能上遠遠超過了SSD,其IO訪問延遲在幾十至幾百納秒左右,而SSD的訪問延遲則達到了百微妙以上。可是,SSD在容量上要遠遠高於NVDIMM。所以,在現有的分層存儲體系架構中,引入NVDIMM能夠很好的對SSD、磁盤存儲進行優化,尤爲是IO Pattern方面的優化。架構
在設計閃存存儲系統的時候,2014年第一次開始使用NVDIMM,那時關於NVDIMM的標準剛剛開始由SNIA組織制定。那時的NVDIMM基本都是SLC NAND + SDRAM + SuperCap的設計方式,工做原理也基本相同,這種NVDIMM就是咱們如今標準中的NVDIMM-N。隨後在2015年以及2016延伸出另外兩個NVDIMM產品標準,分別爲NVDIMM-F和NVDIMM-P,這些產品的工做原理、形態都會有所不一樣。從下圖能夠看出NVDIMM產品標準的演進方向。不一樣的NVDIMM產品具備不一樣的應用場景。在存儲系統中經常使用來替代NVRAM的產品形態爲NVDIMM-N。ide
在現有的標準體系中,主要的產品形態有NVDIMM-N、NVDIMM-F以及NVDIMM-P,各自特性以下圖所示。其中NVDIMM-N是最先的產品形態,在存儲中用來替代NVRAM之類的應用,在系統中經過訪存的方式對其進行訪問。在性能上NVDIMM-N和普通的DDR內存是相同的,所不一樣的是在系統掉電的狀況下,NVDIMM-N中的數據會被同步寫入到內存條上的SLC NAND Flash中。整個掉電過程由超級電容來進行供電。NVDIMM-F是將Flash作成DIMM接口的塊設備,經過塊設備接口對其進行訪問。有一些存儲公司在作這樣的產品,經過這種方式能夠進一步避免因爲PCIe總線引入的SSD訪問延遲。因爲直接經過DIMM接口訪問NAND Flash,因此,NVDIMM-F的性能沒有辦法與NVDIMM-N相對比。經過採用NVDIMM-F形態的SSD,能夠構建高密閃存存儲系統,可是缺點是須要定製化服務器平臺。最新提出的NVDIMM-P是一種綜合NVDIMM-N和NVDIMM-F的產品形態,其技術架構於上述兩種都有所不一樣,最大想法是混合內存與NAND Flash,而且提供塊設備以及內存的訪問接口,在性能上也介於NVDIMM-N和NVDIMM-F之間,容量要遠大於NVDIMM-N,能夠作到和NVDIMM-F相同的存儲容量。性能
NVDIMM-N是最先提出的產品形態,默認所說的NVDIMM就是這種產品形態。NVDIMM-N的原理以下圖所示:測試
從上圖能夠看出,內存總線經過Buffer開關能夠直接訪問DRAM,因此,沒有引入額外的IO延遲。在正常使用過程當中,NVDIMM-N在系統中就是一片普通內存。在該子系統中咱們能夠發現有一個稱之爲Cntlr的控制器,早期產品該控制器都是採用FPGA來實現,經過該控制器能夠實現內存數據的持久化與加載操做。當控制器接收到SAVE命令信號後,將DRAM中的數據保存到NAND;在系統從新上電以後,從NAND中加載數據至DRAM中。正由於這個控制器的做用,才保證了在系統異常斷電狀況下的DRAM數據不丟失。和NVDIMM-P相比,操做系統沒法直接訪問NAND中的數據。對於NVDIMM-N而言,其一個很重要的技術點是如何在掉電的狀況下觸發內存數據的持久化操做。在早期的NVDIMM-N設計中,一般須要特殊主板的支持。在該類主板中存在一個硬件單元,例如採用CPLD對電源進行監測,當發現系統電源低於預期時,開始觸發處理器進行掉電保護。在該類設計中,操做系統會存在一個驅動程序,該驅動程序負責系統掉電狀況下的CPU數據刷新操做。經過該驅動將處理器Cache中的內容刷新到NVDIMM,而後再向NVDIMM硬件發送數據保存信號。NVDIMM接收到SAVE信號以後,將SDRAM中的數據進行持久化。整個過程能夠描述以下圖所示:優化
這種操做方式最大的一個問題是不通用,須要硬件平臺的定製,而且也須要大電容的續航能力,要保證處理器Cache中的數據所有刷新到內存。另外一種更加通用的方法是採用Intel標準的ADR技術,經過該技術,在Intel處理器檢測到斷電狀況時,處理器會向NVDIMM發送SAVE信號,而且讓NVDIMM處於自刷新的工做模式。這種方式最大的問題是如何保證處理器緩存數據的掉電非易失。前兩年和NVDIMM標準組織討論過這個問題,目前尚未標準來支持這個特性。也就是說,在系統異常掉電的狀況下,處理器Cache中的數據是不能保證非易失的。對於存儲應用來說這是一個嚴重的缺陷,頗有可能在系統掉電的狀況下出現數據丟失的問題。因此,在應用NVDIMM的時候必定要解決該問題,這纔是NVDIMM在存儲應用中的設計重點。spa
近兩年NVDIMM-N已經被相關組織標準化,而且ADR技術已經成爲主流技術手段。在DIMM接口方面也定義了新的接口信號。JEDEC JC45.6標準中對12V供電、SAVE_n信號、EVENT#信號以及I2C的電氣特性進行了標準化,具體定義如上圖所示。操作系統
在NVDIMM-N掉電保護過程當中的一大功臣是超級電容,這種電容具備很高的電容密度,具有快速充電的特性,在系統掉電狀況能夠爲NVDIMM提供足夠的能量,保證將SDRAM中的數據刷新至NAND Flash中。看起來這個部件沒有什麼特殊之處,彷佛在存儲系統中不須要對其進行過多考慮。其實否則,任何元件均可能發生故障,若是超級電容發生故障,那麼在系統掉電狀況下將會發生數據丟失的災難。超級電容的使用壽命和工做溫度息息相關,溫度越高,超級電容的使用年限越短,以下圖所示:架構設計
經過該圖能夠看出,在不一樣電容輸出電壓的狀況下,隨着環境工做溫度的提高,超級電容的使用壽命在降低。在55度工做環境下,不少超級電容的使用壽命竟然不到5年。在SSD存儲系統中,55度環境工做溫度是比較正常的,因此,超級電容的使用壽命成了NVDIMM在存儲應用中使用的一個問題。爲了解決這個問題,在存儲系統設計過程當中,須要對超級電容的使用壽命、狀態進行監測,一旦出現風吹草動,須要提早進行預警,不然將會致使數據災難。因此,在存儲系統中引入NVDIMM以後,咱們發現,NVDIMM解決了存儲系統中的不少問題,而且能夠和SSD進行配合,優化IO Pattern,可是與此同時也引入了不少棘手的現實問題。
我的以爲對NVDIMM-N衝擊比較的大的產品是新型存儲介質,例如Xpoint爲表明的半導體存儲介質。Xpoint構成的Memory最大的好處是不須要超級電容之類的故障部件,雖然在性能上不如NVDIMM-N,可是在存儲應用中,須要解決處理器Cache的問題,因此,綜合下來的性能Xpoint未必有多大的差距。Xpoint從2015年發佈以來,尚未出產品,可是採用Xpoint構建的PCIe SSD已經有測試結果了,性能遠遠超過採用NAND Flash構建的SSD。以下圖所示,在隊列深度爲1的狀況下,採用Xpoint構建的SSD能夠運行到將近8萬IOPS,是目前PCIe P3700 SSD的7.32倍。將來比較看好這種新型存儲介質能夠在NVDIMM產品形態上進行創新,與基於NAND Flash的SSD進行配合,通力打造高性能、高效、可靠數據存儲系統。
NVDIMM-F是一種比較直接的產品形態,其直接經過控制器將NAND Flash鏈接到內存總線上。具體原理以下圖所示。在系統中,經過塊設備的方式對NAND中的數據進行訪問。和基於PCIe總線的SSD相比,數據訪問總線發生了變化,具備更高的總線帶寬。在控制NAND的控制器中,須要實現相似於SSD中的FTL,將NAND包裝成塊設備供系統使用。
在存儲系統中,有些廠商採用這種設計思路。經過自定義硬件平臺的方式在內存總線上集成大量的NVDIMM-F模塊,從而在較小的物理空間內構建高密存儲。早年有一家Skyra存儲公司就是採用這種設計思路,想在1U的物理空間內打造PB級存儲,這個想法在那個年代仍是比較瘋狂的。隨着NAND Flash顆粒存儲密度的提高,在1U空間實現PB級存儲已經並不是難事,而且也不須要採用NVDIMM-F這樣的物理形態。
和NVDIMM-N相比,NVDIMM-F的訪問性能相對比較低,其主要限制於NAND Flash的性能。若是將NAND Flash替換成Xpoint之類的介質,那麼訪問性能將會大大提高。爲了均衡內存和NAND之間的性能與容量,誕生了NVDIMM-P產品形態,該產品的原理結構和前兩種都有所不一樣,其經過控制器的方式鏈接DRAM與NAND,而且能夠將NAND和DRAM空間都暴露給系統。這種方式能夠理解成一種混合存儲的架構,在系統忽然掉電的狀況下,經過SAVE信號將DRAM中的數據刷新至NAND中。
與NVDIMM-N相比,這種形態能夠作到很大的存儲容量。可是,因爲在DRAM和內存控制器之間介入了額外的控制器單元,所以,DRAM的IO訪問性能會有所影響,性能也是介於NVDIMM-N和NVDIMM-F之間。因爲是混合存儲的模式,因此比較擔憂性能的抖動性。
爲了充分優化SSD閃存存儲系統,NVDIMM是一種很是好的存儲介質,經過NVDIMM能夠實現對SSD IO Pattern的優化處理。可是任何東西都不會是完美的,在存儲系統中使用NVDIMM並不是找到了救命稻草,而在使用NVDIMM優良特性的同時會遇到不少新的問題。新型存儲架構設計過程一方面須要利用新型介質帶來的福利,更爲重要的是須要解決新型介質引入的問題。期待NVDIMM技術進一步發展與完善,在將來高性能閃存存儲系統中發揮更加劇要的角色。
(存儲之道)