深度: NVMe SSD存儲性能有OA盤源碼搭建哪些影響因素?

導讀: NVMe SSD的性能時常捉摸不定OA盤源碼搭建,須要請搜索dsluntan.com 客服企娥1151880099 V信17061863513,,爲此咱們須要打開SSD的神祕盒子,從各個視角分析SSD性能影響因素,並思考從存儲軟件的角度如何最優化使用NVMe SSD,推動數據中心閃存化進程。本文從NVMe SSD的性能影響因素進行分析,並給出存儲系統設計方面的一些思考。前端

NVMe SSD的性能時常捉摸不定,爲此咱們須要打開SSD的神祕盒子,從各個視角分析SSD性能影響因素,並思考從存儲軟件的角度如何最優化使用NVMe SSD,推動數據中心閃存化進程。本文從NVMe SSD的性能影響因素進行分析,並給出存儲系統設計方面的一些思考。算法

1、存儲介質的變革 編程

近幾年存儲行業發生了翻天覆地的變化,半導體存儲登上了歷史的舞臺。和傳統磁盤存儲介質相比,半導體存儲介質具備自然的優點。不管在可靠性、性能、功耗等方面都遠遠超越傳統磁盤。目前經常使用的半導體存儲介質是NVMe SSD,採用PCIe接口方式與主機進行交互,大大提高了性能,釋放了存儲介質自己的性能。後端

一般NVMe SSD內部採用NAND Flash存儲介質進行數據存儲,該介質自己具備讀寫不對稱性,使用壽命等問題。爲此在SSD內部經過FTL(Flash Translation Layer)解決NAND Flash存在的問題,爲上層應用軟件呈現和普通磁盤相同的應用接口和使用方式。緩存

如上圖所示,隨着半導體存儲介質的發展,計算機系統的IO性能獲得了飛速發展。基於磁介質進行數據存儲的磁盤和處理器CPU之間一直存在着棘手的剪刀差性能鴻溝。隨着存儲介質的演進與革新,這種性能剪刀差將不復存在。性能優化

從整個系統的角度來看,IO性能瓶頸正從後端磁盤往處理器和網絡方向轉移。以下圖性能數據所示,在4KB訪問粒度下,NVMe SSD和15K轉速磁盤相比,每秒隨機讀IO處理能力提高了將近5000倍;每秒隨機寫IO處理能力提高了1000多倍。隨着非易失性存儲介質的進一步發展,半導體存儲介質的性能將進一步提高,而且會具備更好的IO QoS能力。網絡

存儲介質的革命一方面給存儲系統性能提高帶來了福音;另外一方面對存儲系統的設計帶來了諸多挑戰。原有面向磁盤設計的存儲系統再也不適用於新型存儲介質,面向新型存儲介質須要從新設計更加合理的存儲軟件堆棧,發揮存儲介質的性能,而且能夠規避新介質帶來的新問題。面向新型存儲介質重構存儲軟件棧、重構存儲系統是最近幾年存儲領域的熱門技術話題。架構

在面向NVMe SSD進行存儲系統設計時,首先須要對NVMe SSD自己的特性要很是熟悉,須要瞭解SSD性能的影響因素。在設計過程當中須要針對SSD的特性經過軟件的方式進行優化。本文對SSD進行簡要介紹,並從性能影響因素角度出發,對NVMe SSD進行深刻剖析,在此基礎上給出閃存存儲設計方面的一些思考。併發

2、NVMe SSD成爲主流app

2.1 NAND Flash介質發展

目前NVMe SSD主流採用的存儲介質是NAND Flash。最近幾年NAND Flash技術快速發展,主要發展的思路有兩條:

  • 第一,經過3D堆疊的方式增長NAND Flash的存儲密度;
  • 第二,經過增長單Cell比特數來提高NAND Flash的存儲密度。

3D NAND Flash已經成爲SSD標配,目前主流發佈的SSD都會採用3D NAND Flash技術工藝。從cell的角度來看,目前單個cell能夠表示3bit,這就是一般所說的TLC NAND Flash。

今年單個cell的bit存儲密度又提高了33%,能夠表示4bit,向前演進至QLC NAND Flash。NAND Flash的不斷演進,推進了SSD存儲密度不斷提高。截止到今天,單個3.5寸SSD盤能夠作到128TB的容量,遠遠超過了磁盤的容量。下圖是近幾年NAND Flash技術的發展、演進過程。

從上圖能夠看出,NAND Flash在不斷演進的過程當中,一些新的非易失性內存技術也開始發展。Intel已經推出了AEP內存存儲介質,能夠預計,將來將會是非易失性內存和閃存共存的半導體存儲時代。

2.2 軟件層面看SSD——多隊列技術

從軟件接口的角度來看,NVMe SSD和普通的磁盤沒有太多的區別,在Linux環境下都是標準塊設備。因爲NVMe SSD採用了最新的NVMe協議標準,所以從軟件堆棧的角度來看,NVMe SSD的軟件棧簡化了不少。在NVMe標準中,和傳統的SATA/SAS相比,一個重大的差異是引入了多隊列機制,以下圖所示。

何爲多隊列技術?主機(X86 Server)與SSD進行數據交互的模型採用「生產者-消費者」模型,採用生產者-消費者隊列進行數據交互。在原有的AHCI規範中,只定義了一個交互隊列,那麼主機與HDD之間的數據交互只能經過一個隊列通訊,多核處理器也只能經過一個隊列與HDD進行數據交互。在磁盤存儲時代,因爲磁盤是慢速設備,因此一個隊列也就夠用了。

多個處理器核經過一個共享隊列與磁盤進行數據交互,雖然處理器之間會存在資源競爭,可是相比磁盤的性能,處理器之間競爭所引入的開銷實在是微乎其微,能夠忽略。在磁盤存儲時代,單隊列有其餘的好處,一個隊列存在一個IO調度器,能夠很好的保證提交請求的IO順序最優化。

和磁盤相比,半導體存儲介質具備很高的性能,AHCI原有的規範再也不適用,原有的假設也已經不復存在,在此背景下NVMe規範誕生了。

NVMe規範替代了原有的AHCI規範,而且軟件層面的處理命令也進行了從新定義,再也不採用SCSI/ATA命令規範集。在NVMe時代,外設和處理器之間的距離更近了,再也不須要像SAS同樣的面向鏈接的存儲通訊網絡。相比於之前的AHCI、SAS等協議規範,NVMe規範是一種很是簡化,面向新型存儲介質的協議規範。該規範的推出,將存儲外設一會兒拉到了處理器局部總線上,性能大爲提高。而且主機和SSD處理器之間採用多隊列的設計,適應了多核的發展趨勢,每一個處理器核與SSD之間能夠採用獨立的硬件Queue Pair進行數據交互。

從軟件的角度來看,每一個CPU Core均可以建立一對Queue Pair和SSD進行數據交互。Queue Pair由Submission Queue與Completion Queue構成,經過Submission queue發送數據;經過Completion queue接受完成事件。SSD硬件和主機驅動軟件控制queue的Head與Tail指針完成雙方的數據交互。

2.3 深刻理解SSD硬件

和磁盤相比,NVMe SSD最大的變化在於存儲介質發生了變化。目前NVMe SSD廣泛採用3D NAND Flash做爲存儲介質。NAND Flash內部有多個存儲陣列單元構成,採用floating gate或者charge trap的方式存儲電荷,經過存儲電荷的多少來保持數據存儲狀態。

因爲電容效應的存在、磨損老化、操做電壓干擾等問題的影響,NAND Flash天生會存在漏電問題(電荷泄漏),從而致使存儲數據發生變化。所以,從本質上講,NAND Flash是一種不可靠介質,很是容易出現Bit翻轉問題。SSD經過控制器和固件程序將這種不可靠的NAND Flash變成了可靠的數據存儲介質。

爲了在這種不可靠介質上構建可靠存儲,SSD內部作了大量工做。在硬件層面,須要經過ECC單元解決常常出現的比特翻轉問題。每次數據存儲的時候,硬件單元須要爲存儲的數據計算ECC校驗碼;在數據讀取的時候,硬件單元會根據校驗碼恢復被破壞的bit數據。ECC硬件單元集成在SSD控制器內部,表明了SSD控制器的能力。

在MLC存儲時代,BCH編解碼技術能夠解決問題,4KB數據中存在100bit翻轉時能夠糾正錯誤;在TLC存儲時代,bit錯誤率大爲提高,須要採用更高糾錯能力的LDPC編解碼技術,在4KB出現550bit翻轉時,LDPC硬解碼仍然能夠恢復數據。下圖對比了LDPC硬解碼、BCH以及LDPC軟解碼之間的能力, 從對比結果能夠看出,LDPC軟解碼具備更強的糾錯能力,一般使用在硬解碼失效的狀況下。LDPC軟解碼的不足之處在於增長了IO的延遲。

在軟件層面,SSD內部設計了FTL(Flash Translation Layer),該軟件層的設計思想和Log-Structured File System設計思想相似。採用log追加寫的方式記錄數據,採用LBA至PBA的地址映射表記錄數據組織方式。

Log-structured系統最大的一個問題就是垃圾回收(GC)。所以,雖然NAND Flash自己具備很高的IO性能,但受限於GC的影響,SSD層面的性能會大受影響,而且存在十分嚴重的IO QoS問題,這也是目前標準NVMe SSD一個很重要的問題。

SSD內部經過FTL解決了NAND Flash不能Inplace Write的問題;採用Wear Leveling算法解決了NAND Flash磨損均衡問題;經過Data Retention算法解決了NAND Flash長時間存放漏電問題;經過Data Migration方式解決Tead Diatribe問題。FTL是NAND Flash得以大規模使用的核心技術,是SSD的重要組成部分。

NAND Flash內部自己具備不少併發單元,如上圖所示,一個NAND Flash芯片由多個Target構成,每一個Target包含多個Die。每一個Die是一個獨立的存儲單元,一個Die由多個Plane構成,多個Plane之間共享一套操做總線,多個Plane能夠組成一個單元併發操做,構建Multi-plane。

一個Plane由若干個Block構成,每一個Block是一個擦除單元,該單元的大小也決定了SSD軟件層面的GC回收粒度。每一個Block由多個page頁構成,每一個Page是最小寫入(編程)單元,一般大小爲16KB。SSD內部軟件(固件)須要充分利用這些併發單元,構建高性能的存儲盤。

一塊普通NVMe SSD的物理硬件結構簡單,由大量的NAND Flash構成,這些NAND Flash經過SOC(SSD控制器)進行控制,FTL軟件運行在SOC內部,並經過多隊列的PCIe總線與主機進行對接。爲了提高性能,企業級SSD須要板載DRAM,DRAM資源一方面能夠用來緩存數據,提高寫性能;另外一方面用來緩存FTL映射表。企業級SSD爲了提高性能,一般採用Flat mapping的方式,須要佔據較多的內存(0.1%)。

內存容量的問題也限制了大容量NVMe SSD的發展,爲了解決內存問題,目前一種可行的方法是增大sector size。標準NVMe SSD的sector size爲4KB,爲了進一步增大NVMe SSD的容量,有些廠商已經開始採用16KB的sector size。16KB Sector size的普及應用,會加速大容量NVMe SSD的推廣。

3、影響NVMe SSD的性能因素

NVMe SSD 廠商Spec給出的性能很是完美,前面也給出了NVMe SSD和磁盤之間的性能對比,NVMe SSD的性能的確比磁盤高不少。但在實際應用過程當中,NVMe SSD的性能可能沒有想象中的那麼好,而且看上去不是特別的穩定,找不到完美的規律。

和磁盤介質相比,SSD的性能和不少因素相關,分析SSD的性能影響因素,首先須要大致瞭解SSD構成的主要部分。以下圖所示,其主要包括主機CPU、PCIe互連帶寬、SSD控制器及FTL軟件、後端NAND Flash帶寬、NAND Flash介質。影響SSD性能的主要因素能夠分紅硬件、軟件和客觀環境三大部分,具體分析以下。

一、硬件因素

A) NAND Flash自己:不一樣類型的NAND Flash自己具備不一樣的性能,例如SLC的性能高於MLC,MLC的性能優於TLC。選擇不一樣的工藝、不一樣類別的NAND Flash,都會具備不一樣的性能。

B)後端通道數(CE數量)及總線頻率:後端通道數決定了併發NAND Flash的數量,決定了併發能力。不一樣的SSD控制器支持不一樣數量的通道數,也決定了SSD的後端吞吐帶寬能力。NAND Flash Channel的總線頻率也決定了訪問Flash的性能。

C) SSD控制器的處理能力:SSD控制器中會運行復雜的FTL(Flash Translation Layer)處理邏輯,將邏輯塊讀寫映射轉換成NAND Flash 讀寫請求。在大數據塊讀寫時,對處理器能力要求不是很高;在小數據塊讀寫時,對處理器能力要求極高,處理器能力很容易成爲整個IO系統的性能瓶頸點。

D) SSD控制器架構:一般SSD控制器採用SMP或者MPP兩種架構,早期的控制器一般採用MPP架構,多個小處理器經過內部高速總線進行互連,經過硬件消息隊列進行通訊。內存資源做爲獨立的外設供全部的處理器進行共享。

這種架構和基於消息通訊的分佈式系統相似。MPP架構的很大優點在於性能,可是編程複雜度較高;SMP架構的性能可擴展性取決於軟件,編程簡單,和在x86平臺上編程類似。不一樣的控制器架構會影響到SSD的整體性能,在SSD設計時,會根據設計目標,選擇不一樣類型的SSD控制器。

E) 內存支持容量:爲了追求高性能,SSD內部的映射資源表會常駐內存,映射表的內存佔用大小是盤容量的0.1%,當內存容量不夠大時,會出現映射表換入換出的問題,影響到性能。

F) PCIe的吞吐帶寬能力:PCIe前端帶寬體現了SSD的前端吞吐能力,目前NVMe SSD採用x4 lane的接入方式,上限帶寬爲3GB/s,當後端NAND Flash帶寬和處理器能力足夠時,前端PCIe每每會成爲性能瓶頸點。NAND Flash具備很高的讀性能,目前來看,SSD的讀性能在很大程度上受限於PCIe總線,所以須要快速推動PCIe4.0標準。

G) 溫度對性能形成影響:在NAND Flash全速運行的狀況下,會產生較大的散熱功耗,當溫度高到必定程度時,系統將會處於不正常的工做狀態,爲此,SSD內部作了控溫系統,經過溫度檢測系統來調整SSD性能,從而保證系統溫度維持在閾值以內。調整溫度會犧牲性能,本質上就是經過下降SSD性能來降溫。所以,當環境溫度太高時,會影響到SSD的性能,觸發SSD內部的溫度控制系統,調節SSD的性能。

H) 使用壽命對性能形成影響:NAND Flash在不斷擦除使用時,Flash的bit error會不斷上升,錯誤率的提高會影響到SSD的IO性能。

二、軟件因素

A) 數據佈局方式:數據佈局方法須要充分考慮NAND Flash中的併發單元,如何將IO操做轉換成NAND Flash的併發操做,這是數據佈局須要考慮的問題。例如,採用數據交錯的方式在多通道page上進行數據佈局,經過這種方式能夠優化順序帶寬。

B) 垃圾回收/wear leveling調度方法:數據回收、wear leveling、data retention等操做會產生大量的NAND Flash後端流量,後端流量直接反應了SSD的寫放大係數,也直接體如今後端帶寬的佔用。垃圾回收等產生的流量也能夠稱之爲背景流量,背景流量會直接影響到前端用戶性能。所以須要對背景流量和用戶流量之間進行合理調度,使得用戶IO性能達到最佳。

C) OP預留:爲了解決壞塊、垃圾回收等問題,在SSD內部預留了一部分空閒資源,這些資源被稱之爲OP(Overprovisioning)。OP越大,GC過程當中平均搬移的數據會越少,背景流量會越小,所以,寫放大下降,用戶IO性能提高。反之,OP越小,性能會越低,寫放大會越大。在SSD容量較小的時代,爲了提高SSD的使用壽命,每每OP都設置的比較大。

D) Bit error處理影響性能:在SSD內部採用多種機制來處理NAND Flash所產生的Bit error。ECC糾錯、read retry、soft LDPC以及RAIN都是用來糾正bit翻轉致使的錯誤。當Bit錯誤率增長時,軟件處理的開銷越大,在bit控制在必定範圍以內,徹底能夠經過硬件進行糾正。一旦軟件參與到bit糾正的時候,會引入較大的性能開銷。

E) FTL算法:FTL算法會影響到SSD性能,對於不一樣用途的SSD,FTL的設計與實現是徹底不一樣的,企業級SSD爲了追求高性能,一般採用Flat mapping的方式,採用大內存緩存映射表;消費級SSD爲了追求低成本,一般採用元數據換入換出的方式,而且採用pSLC+TLC的組合方式進行分層存儲,也能夠採用主機端內存緩存元數據信息,可是這些方式都會影響到性能。

F) IO調度算法:NAND Flash具備嚴重的性能不對稱性,Flash Erase和Program具備ms級延遲,Flash read的延遲在us級。所以,如何調度Erase、Program以及read是SSD後端設計須要考慮的問題。另外,前端IO以及背景IO之間的調度也是須要權衡考慮,經過IO調度能夠達到最佳性能表現。在IO調度過程當中,還須要利用NAND Flash的特性,例如Program Suspension,經過這些特性的利用,最優化SSD前端IO性能。

G)驅動軟件:驅動軟件運行在主機端,一般分爲內核態和用戶態兩大類,內核態驅動會消耗較多的CPU資源,存在頻繁上下文切換、中斷處理,所以性能較低;用戶態驅動一般採用Polling IO處理模式,去除了上下文切換,能夠充分提高CPU效率,提高總體IO性能。

H) IO Pattern對性能產生影響:IO Pattern影響了SSD內部的GC數據佈局,間接影響了GC過程當中的數據搬移量,決定了後端流量。當IO Pattern爲全順序時,這種Pattern對SSD內部GC是最爲友好的,寫放大接近於1,所以具備最好的性能;當IO Pattern爲小塊隨機時,會產生較多的GC搬移數據量,所以性能大爲降低。在實際應用中,須要經過本地文件系統最優化IO Pattern,獲取最佳性能。

三、客觀因素

A) 使用時間越長會致使SSD性能變差:使用時間變長以後,SSD內部NAND Flash的磨損會加劇,NAND Flash磨損變大以後會致使bit錯誤率提高。在SSD內部存在一套完整的bit錯誤恢復機制,由硬件和軟件兩大部分構成。當bit錯誤率達到必定程度以後,硬件機制將會失效。硬件機制失效以後,須要經過軟件(Firmware)的方式恢復翻轉的bit,軟件恢復將會帶來較大的延遲開銷,所以會影響到SSD對外表現的性能。

在有些狀況下,若是一塊SSD在掉電狀況下放置一段時間以後,也可能會致使性能變差,緣由在於SSD內部NAND Flash中存儲電荷的漏電,放置一段時間以後致使bit錯誤率增長,從而影響性能。SSD的性能和時間相關,本質上仍是與NAND Flash的比特錯誤率相關。

B) 環境溫度也會對性能形成影響:爲了控制SSD溫度不能超過上限值,在SSD內部設計有一套溫度負反饋機制,該機制經過檢測的溫度對NAND Flash後端帶寬進行控制,達到下降溫度的效果。若是一旦溫度負反饋機制開始工做,那麼NAND Flash後端帶寬將會受到限制,從而影響前端應用IO的性能。

下面從軟件的角度出發,重點闡述GC以及IO Pattern對SSD性能的影響。

3.1 GC對性能的影響

SSD內部有一個很是厚重的軟件層,該軟件層用來解決NAND Flash的問題,採用log-structured的方式記錄數據。Log-structured方式引入了GC的問題,對於前端業務來說,GC流量就是背景噪聲。GC流量不是時時刻刻存在的,所以,SSD對外體現性能大幅度波動。

當SSD爲空盤時,性能會很是好,爲最佳性能;當SSD被用過一段時間以後,性能會大幅下降。其中GC起到了很重要的做用。企業級SSD在發佈Spec的時候,都會發布SSD盤的穩態性能。在性能測試的時候,須要對盤進行老化預處理。一般預處理的方法是順序寫滿盤,而後再隨機兩遍寫盤,預處理完成以後,再對盤進行隨機讀寫測試,獲得Spec中定義的值。穩態值基本能夠認爲是盤的下限性能。

上圖所示是多個廠商的盤在空盤和穩態狀況下的性能對比,因而可知穩態狀況和空盤狀況下的性能差距很大。在穩態狀況下,SSD內部的GC會全速運行,會佔用較多的NAND Flash後端帶寬。背景流量和前端數據流的比例也就體現了SSD盤的寫放大係數,寫放大係數越大,背景流量佔用帶寬越多,SSD對外體現的前端性能也就越差。寫放大係數不少因素相關,例如OP、應用IO Pattern等。

若是應用IO Pattern比較好,那麼能夠下降寫放大係數,背景噪聲流就會減小,前端業務的性能會提高。例如,在SSD徹底順序寫入的狀況下,寫放大係數能夠接近於1,此時GC產生的數據流不多,背景流量基本沒有,後端帶寬基本被業務數據流佔用,所以對外體現的性能會很好。

GC是影響性能的重要因素,除了影響性能以外,GC會增大寫放大,對SSD的使用壽命產生影響。從軟件層面的角度考慮,能夠經過優化應用IO Pattern的方式優化SSD內部GC,從而進一步提高SSD的性能,優化使用壽命。對於下一代更爲廉價的QLC SSD介質,就須要採用這種優化思路,不然沒法很好的知足實際業務的應用需求。

3.2 IO Pattern對性能的影響

IO Pattern會對SSD的性能產生嚴重影響,主要表如今以下幾個方面:

一、不一樣的IO Pattern會產生不一樣的寫放大係數,不一樣的寫放大係數佔用後端NAND Flash帶寬不一樣。當前端應用對SSD採用徹底順序的方式進行寫入時,此時是最佳的IO Pattern,對於SSD而言寫放大係數接近1,SSD內部的背景流量基本能夠忽略,前端性能達到最佳。在實際應用中,很難採用這種徹底順序的數據寫模型,但能夠經過優化逼近順序寫入。

二、不一樣請求大小的IO之間會產生干擾;讀寫請求之間會產生干擾。小請求會受到大請求的干擾,從而致使小請求的延遲增長,這個比較容易理解,在HDD上一樣會存在這種狀況。因爲NAND Flash介質存在嚴重的讀寫不對稱性,所以讀寫請求之間也會互相干擾,尤爲是寫請求對讀請求產生嚴重的性能影響。

3.2.1 順序寫入Pattern對SSD性能優化的奧祕

在針對閃存系統的設計中,須要考慮IO Pattern對性能產生的影響,經過軟件的優化來最優化SSD的使用。在實際應用中徹底順序寫入的IO Pattern基本上是不存在的,除非用做順序寫入的日誌設備。對於順序寫入優化性能這個結論,須要從SSD內部實現來深刻理解,知道根源以後,能夠採用合理的方式來逼近順序寫入的模式,從而最優化SSD的性能。

SSD內部採用log-structured的數據記錄模式,併發寫入的IO數據按照時間順序匯聚成大數據塊,合併造成的大數據塊以Page stripe的方式寫入NAND Flash。

多個Page stripe會被寫入同一個GC單元(Chunk or Superblock),當一個GC單元被寫完成以後,該GC單元進入sealed模式(只讀),分配新的GC單元寫新的數據。在這種模式下,若是多個業務的數據流併發隨機的往SSD中寫入數據,那麼多個應用的數據就會交錯在一塊兒被存儲到同一個GC單元中。

以下圖所示,不一樣應用的數據生命週期不一樣,當須要回收一個GC單元的時候,會存在大量數據的遷移,這些遷移的數據就會造成寫放大,影響性能和使用壽命。

不一樣應用的數據交錯存儲在同一個GC單元,本質上就是不一樣冷熱程度的數據交錯存儲的問題。從GC的角度來說,相同冷熱程度的數據存儲在同一個GC單元上是最佳的,爲此三星推出了Multi-stream SSD,該SSD就容許不一樣應用的數據存儲到不一樣的Stream單元(GC單元),從而提高GC效率,下降寫放大。Multi-stream是一種顯式的設計方式,須要更改SSD接口以及應用程序。從IO Pattern的角度考慮,能夠經過順序大塊的方式也能夠逼近相似的效果。

假設操做SSD只存在一個線程,不一樣的應用都採用大數據塊的方式寫入數據,那麼在一個時間片斷內只存在一個應用的數據往SSD中寫入數據,那麼在一個GC單元內存儲的數據會變得有序和規則。以下圖所示,採用上述方法以後,一個GC單元內存儲的數據將會變得冷熱均勻。在GC過程當中會大大減小數據的搬移,從而減小背景流量。

在實際應用中,上述IO Pattern很難產生,主要是應用很難產生很是大粒度的請求。爲此在存儲系統設計過程當中,能夠引入Optane高性能存儲介質做爲SSD的寫緩存。前端不一樣業務的寫請求首先寫到Optane持久化介質中,在Optane持久化介質中聚合造成大數據塊。一旦聚合造成大數據塊以後,再寫入SSD,經過這種方式能夠最大程度的逼近SSD順序寫入過程,提高SSD的性能和使用壽命。

3.2.2 讀寫衝突Pattern對性能的影響

以下圖所示,NAND Flash介質具備很強的讀寫不對稱性。Block Erase和Page Program的延遲會遠遠高於Page Read所耗費的時間。那麼在這種狀況下,若是read請求在同一個Flash Channel上和Erase、Program操做衝突,那麼read操做將會被Erase/program操做影響。這是在讀寫混合狀況下,讀性能會受到影響的重要因素。

在實際應用過程當中,常常會發現應用的測試結果和SSD Spec對不上,會比Spec給出的值要來的低。Spec給出的值一般爲純讀或者純寫狀況下的性能指標,在讀寫混合的場景下,性能表現和Spec給出的值就會存在很是大的出入。

對於不一樣的SSD,經過測試能夠發如今讀寫混合狀況下的性能表現差距會比較大。在SSD處於穩態條件下,應用隨機讀的狀況下,若是引入一個壓力不是很大的順序寫,那麼會發現不一樣SSD的抗干擾能力是不一樣的。有些SSD在寫干擾的狀況下,讀性能會急劇降低,延遲快速上升,QoS性能得不到保證。下圖是兩個SSD在相同狀況下的測試結果,從結果來看,有些SSD的抗寫干擾能力比較強,讀性能不會急劇降低。

爲何有些SSD會具有比較強的抗寫干擾能力呢?其中的奧祕就在於SSD內部的IO調度器。IO調度器會對write、read 和Erase請求進行調度處理,該調度器算法的不一樣就會表現出不一樣的抗干擾能力。目前不少NAND Flash能夠支持Program/Erase Suspension的功能,在IO調度處理的過程當中,爲了提高讀性能,下降讀請求延遲,能夠採用Suspension命令對Program/Erase命令暫停,對read請求優先調度處理。

讀寫衝突是SSD內部影響IO QoS的重要因素。在SSD內部經過IO調度器的優化能夠提高SSD性能的QoS能力,可是仍是沒法與存儲軟件結合來協同優化QoS。爲了達到最佳的SSD性能QoS,須要關注Openchannel技術。Openchannel其實只是一種軟硬件層次劃分的方法,一般來說,SSD內部的邏輯能夠劃分爲面向NAND資源的物理資源管理層以及面向數據佈局的資源映射層。物理資源管理因爲和NAND Flash密切相關,所以能夠放到SSD內部。

傳統的NVMe SSD須要對外暴露標準的塊設備接口,所以須要在SSD內部實現資源映射層。從端至端的角度來看,資源映射層能夠與存儲軟件層結合起來,爲此將資源映射層從SSD內部剝離出來,集成至存儲軟件層。一旦資源映射層從SSD內部剝離以後,須要定義一個新的SSD接口,其中的一種接口方式就是Openchannel。

盤古分佈式存儲針對SSD QoS問題進行了大量研究,提出了Object SSD的概念,Object SSD也是一種新的SSD接口方式,其採用對象方式對SSD進行讀寫刪操做,每一個對象採用Append write操做方式。這種接口方式能夠很好的與分佈式存儲無縫結合。採用Object SSD以後,SSD內部的大量工做被簡化,IO的調度會更加靈活,存儲軟件與SSD協同配合,達到IO性能的最優化,以及QoS的最大化。

4、SSD寫性能分析模型

SSD內部的數據流分紅兩大類,一類爲前端用戶數據流;另外一類爲內部背景數據流。前端用戶數據流和背景數據流會匯聚成NAND Flash後端流量。當背景數據流不存在時,NAND Flash帶寬會被用戶數據流所有佔據,此時SSD對外表現的性能達到最佳。當SSD具備較大寫放大時,會產生很大的背景數據流,背景流會搶佔NAND Flash帶寬,致使前端用戶IO性能下降。爲了穩定前端IO性能,在SSD內部的調度器會均衡前端和背景流量,保證前端性能的一致性。背景流量的佔比反應了SSD的寫放大係數,所以,站在NAND Flash帶寬佔用的角度能夠分析SSD在穩態狀況下的性能。

在此,假設寫放大係數爲WA,順序寫狀況下的總帶寬數爲B,用戶寫入流量(隨機寫入流量)爲U。那麼,因爲GC寫放大形成的背景流量爲:(WA – 1)* U
寫放大流量爲一讀一寫,都會佔用帶寬,所以,總帶寬能夠描述爲:

2  (WA – 1)  U + U = B
所以,能夠獲得:
U = B / (2(WA – 1) + 1) = B / (2  WA – 1)
上述公式表述了前端用戶流量和NAND Flash總帶寬、寫放大係數之間的關係。

根據Spec,Intel P4500的順序寫帶寬爲1.9GB/s,按照上述公式,在隨機訪問模式下的帶寬爲: 1900 / (2 * 4 – 1) = 270MB/s,IOPS爲67K,根據該公式推導的結果和Spec給出的結果相同。

下圖是Intel P4500和Samsung PM963隨機寫延遲和推導公式之間的對比。結果很是吻合。

由此能夠推出,隨機寫性能由SSD內部後端帶寬以及寫放大係數來決定。所以,從存儲軟件的角度出發,咱們能夠經過優化IO Pattern的方式減少寫放大係數,從而能夠提高SSD的隨機寫性能。

5、小結

閃存存儲技術正在飛速發展,閃存介質、SSD控制器、存儲系統軟件、存儲硬件平臺都在圍繞閃存突飛猛進的發展。閃存給數據存儲帶來的價值顯而易見,數據中心閃存化是重要發展趨勢。NVMe SSD性能受到不少因素的影響,在軟件層面能夠經過IO Pattern優化SSD的性能,使得總體存儲系統的性能達到最佳。

相關文章
相關標籤/搜索