歡迎光臨
每天分享高質量文章

詳解NVMe SSD儲存效能影響因素

導讀: NVMe SSD的效能時常捉摸不定,為此我們需要開啟SSD的神秘盒子,從各個視角分析SSD效能影響因素,並思考從儲存軟體的角度如何最最佳化使用NVMe SSD,推進資料中心快閃記憶體化行程。本文從NVMe SSD的效能影響因素進行分析,並給出儲存系統設計方面的一些思考。


目錄


1 儲存介質的變革    
2 NVME SSD成為主流    
2.1 NAND FLASH介質發展    
2.2 軟體層面看SSD——多佇列技術    
2.3 深入理解SSD硬體    
3 影響NVME SSD的效能因素    
3.1 GC對效能的影響    
3.2 IO PATTERN對效能的影響    
3.2.1 順序寫入Pattern對SSD效能最佳化的奧秘    
3.2.2 讀寫衝突Pattern對效能的影響    
4 SSD寫效能分析模型    
5 小結


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成為主流


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效能的主要因素可以分成硬體、軟體和客觀環境三大部分,具體分析如下。



1,硬體因素


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效能。


2、軟體因素


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,獲取最佳效能。


3、客觀因素


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的效能產生嚴重影響,主要表現在如下幾個方面:


1,    不同的IO Pattern會產生不同的寫放大繫數,不同的寫放大繫數佔用後端NAND Flash頻寬不同。當前端應用對SSD採用完全順序的方式進行寫入時,此時是最佳的IO Pattern,對於SSD而言寫放大繫數接近1,SSD內部的背景流量基本可以忽略,前端效能達到最佳。在實際應用中,很難採用這種完全順序的資料寫模型,但可以透過最佳化逼近順序寫入。


2,    不同請求大小的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的效能,使得整體儲存系統的效能達到最佳。

文章來源:雲棲社群

更多技術已經整理成電子書

十一期間優惠活動相詳細資訊如下

(如滿足優惠條件下單可聯絡修改價格)


溫馨提示:

請搜尋“ICT_Architect”“掃一掃”二維碼關註公眾號,點選原文連結獲取更多電子書詳情

求知若渴, 虛心若愚

贊(0)

分享創造快樂