NVMe SSD的性能時常捉摸不定,為此我們需要打開SSD的神秘盒子,從各個視角分析SSD性能影響因素,并思考從存儲軟件的角度如何最優(yōu)化使用NVMe SSD,推進數(shù)據(jù)中心閃存化進程。本文從NVMe SSD的性能影響因素進行分析,并給出存儲系統(tǒng)設(shè)計方面的一些思考。
目錄
1 存儲介質(zhì)的變革
2 NVME SSD成為主流
2.1 NAND FLASH介質(zhì)發(fā)展
2.2 軟件層面看SSD——多隊列技術(shù)
2.3 深入理解SSD硬件
3 影響NVME SSD的性能因素
3.1 GC對性能的影響
3.2 IO PATTERN對性能的影響
3.2.1 順序?qū)懭隤attern對SSD性能優(yōu)化的奧秘
3.2.2 讀寫沖突Pattern對性能的影響
4 SSD寫性能分析模型
5 小結(jié)
NVMe SSD的性能時常捉摸不定,為此我們需要打開SSD的神秘盒子,從各個視角分析SSD性能影響因素,并思考從存儲軟件的角度如何最優(yōu)化使用NVMe SSD,推進數(shù)據(jù)中心閃存化進程。本文從NVMe SSD的性能影響因素進行分析,并給出存儲系統(tǒng)設(shè)計方面的一些思考。
1 存儲介質(zhì)的變革
近幾年存儲行業(yè)發(fā)生了翻天覆地的變化,半導(dǎo)體存儲登上了歷史的舞臺。和傳統(tǒng)磁盤存儲介質(zhì)相比,半導(dǎo)體存儲介質(zhì)具有天然的優(yōu)勢。無論在可靠性、性能、功耗等方面都遠遠超越傳統(tǒng)磁盤。目前常用的半導(dǎo)體存儲介質(zhì)是NVMe SSD,采用PCIe接口方式與主機進行交互,大大提升了性能,釋放了存儲介質(zhì)本身的性能。通常NVMe SSD內(nèi)部采用NAND Flash存儲介質(zhì)進行數(shù)據(jù)存儲,該介質(zhì)本身具有讀寫不對稱性,使用壽命等問題。為此在SSD內(nèi)部通過FTL(Flash Translation Layer)解決NAND Flash存在的問題,為上層應(yīng)用軟件呈現(xiàn)和普通磁盤相同的應(yīng)用接口和使用方式。
如上圖所示,隨著半導(dǎo)體存儲介質(zhì)的發(fā)展,計算機系統(tǒng)的IO性能得到了飛速發(fā)展?;诖沤橘|(zhì)進行數(shù)據(jù)存儲的磁盤和處理器CPU之間一直存在著棘手的剪刀差性能鴻溝。隨著存儲介質(zhì)的演進與革新,這種性能剪刀差將不復(fù)存在。從整個系統(tǒng)的角度來看,IO性能瓶頸正從后端磁盤往處理器和網(wǎng)絡(luò)方向轉(zhuǎn)移。如下圖性能數(shù)據(jù)所示,在4KB訪問粒度下,NVMe SSD和15K轉(zhuǎn)速磁盤相比,每秒隨機讀IO處理能力提升了將近5000倍;每秒隨機寫IO處理能力提升了1000多倍。隨著非易失性存儲介質(zhì)的進一步發(fā)展,半導(dǎo)體存儲介質(zhì)的性能將進一步提升,并且會具有更好的IO QoS能力。
存儲介質(zhì)的革命一方面給存儲系統(tǒng)性能提升帶來了福音;另一方面對存儲系統(tǒng)的設(shè)計帶來了諸多挑戰(zhàn)。原有面向磁盤設(shè)計的存儲系統(tǒng)不再適用于新型存儲介質(zhì),面向新型存儲介質(zhì)需要重新設(shè)計更加合理的存儲軟件堆棧,發(fā)揮存儲介質(zhì)的性能,并且可以規(guī)避新介質(zhì)帶來的新問題。面向新型存儲介質(zhì)重構(gòu)存儲軟件棧、重構(gòu)存儲系統(tǒng)是最近幾年存儲領(lǐng)域的熱門技術(shù)話題。
在面向NVMe SSD進行存儲系統(tǒng)設(shè)計時,首先需要對NVMe SSD本身的特性要非常熟悉,需要了解SSD性能的影響因素。在設(shè)計過程中需要針對SSD的特性通過軟件的方式進行優(yōu)化。本文對SSD進行簡要介紹,并從性能影響因素角度出發(fā),對NVMe SSD進行深入剖析,在此基礎(chǔ)上給出閃存存儲設(shè)計方面的一些思考。
2 NVMe SSD成為主流
2.1 NAND Flash介質(zhì)發(fā)展
目前NVMe SSD主流采用的存儲介質(zhì)是NAND Flash。最近幾年NAND Flash技術(shù)快速發(fā)展,主要發(fā)展的思路有兩條:第一,通過3D堆疊的方式增加NAND Flash的存儲密度;第二,通過增加單Cell比特數(shù)來提升NAND Flash的存儲密度。3D NAND Flash已經(jīng)成為SSD標配,目前主流發(fā)布的SSD都會采用3D NAND Flash技術(shù)工藝。從cell的角度來看,目前單個cell可以表示3bit,這就是通常所說的TLC NAND Flash。今年單個cell的bit存儲密度又提升了33%,可以表示4bit,向前演進至QLC NAND Flash。NAND Flash的不斷演進,推動了SSD存儲密度不斷提升。截止到今天,單個3.5寸SSD盤可以做到128TB的容量,遠遠超過了磁盤的容量。下圖是近幾年NAND Flash技術(shù)的發(fā)展、演進過程。
從上圖可以看出,NAND Flash在不斷演進的過程中,一些新的非易失性內(nèi)存技術(shù)也開始發(fā)展。Intel已經(jīng)推出了AEP內(nèi)存存儲介質(zhì),可以預(yù)計,未來將會是非易失性內(nèi)存和閃存共存的半導(dǎo)體存儲時代。
2.2 軟件層面看SSD——多隊列技術(shù)
從軟件接口的角度來看,NVMe SSD和普通的磁盤沒有太多的區(qū)別,在Linux環(huán)境下都是標準塊設(shè)備。由于NVMe SSD采用了最新的NVMe協(xié)議標準,因此從軟件堆棧的角度來看,NVMe SSD的軟件棧簡化了很多。在NVMe標準中,和傳統(tǒng)的SATA/SAS相比,一個重大的差別是引入了多隊列機制,如下圖所示。
何為多隊列技術(shù)?主機(X86 Server)與SSD進行數(shù)據(jù)交互的模型采用“生產(chǎn)者-消費者”模型,采用生產(chǎn)者-消費者隊列進行數(shù)據(jù)交互。在原有的AHCI規(guī)范中,只定義了一個交互隊列,那么主機與HDD之間的數(shù)據(jù)交互只能通過一個隊列通信,多核處理器也只能通過一個隊列與HDD進行數(shù)據(jù)交互。在磁盤存儲時代,由于磁盤是慢速設(shè)備,所以一個隊列也就夠用了。多個處理器核通過一個共享隊列與磁盤進行數(shù)據(jù)交互,雖然處理器之間會存在資源競爭,但是相比磁盤的性能,處理器之間競爭所引入的開銷實在是微乎其微,可以忽略。在磁盤存儲時代,單隊列有其他的好處,一個隊列存在一個IO調(diào)度器,可以很好的保證提交請求的IO順序最優(yōu)化。
和磁盤相比,半導(dǎo)體存儲介質(zhì)具有很高的性能,AHCI原有的規(guī)范不再適用,原有的假設(shè)也已經(jīng)不復(fù)存在,在此背景下NVMe規(guī)范誕生了。NVMe規(guī)范替代了原有的AHCI規(guī)范,并且軟件層面的處理命令也進行了重新定義,不再采用SCSI/ATA命令規(guī)范集。在NVMe時代,外設(shè)和處理器之間的距離更近了,不再需要像SAS一樣的面向連接的存儲通信網(wǎng)絡(luò)。相比于以前的AHCI、SAS等協(xié)議規(guī)范,NVMe規(guī)范是一種非常簡化,面向新型存儲介質(zhì)的協(xié)議規(guī)范。該規(guī)范的推出,將存儲外設(shè)一下子拉到了處理器局部總線上,性能大為提升。并且主機和SSD處理器之間采用多隊列的設(shè)計,適應(yīng)了多核的發(fā)展趨勢,每個處理器核與SSD之間可以采用獨立的硬件Queue Pair進行數(shù)據(jù)交互。
從軟件的角度來看,每個CPU Core都可以創(chuàng)建一對Queue Pair和SSD進行數(shù)據(jù)交互。Queue Pair由Submission Queue與Completion Queue構(gòu)成,通過Submission queue發(fā)送數(shù)據(jù);通過Completion queue接受完成事件。SSD硬件和主機驅(qū)動軟件控制queue的Head與Tail指針完成雙方的數(shù)據(jù)交互。
2.3 深入理解SSD硬件
和磁盤相比,NVMe SSD最大的變化在于存儲介質(zhì)發(fā)生了變化。目前NVMe SSD普遍采用3D NAND Flash作為存儲介質(zhì)。NAND Flash內(nèi)部有多個存儲陣列單元構(gòu)成,采用floating gate或者charge trap的方式存儲電荷,通過存儲電荷的多少來保持數(shù)據(jù)存儲狀態(tài)。由于電容效應(yīng)的存在、磨損老化、操作電壓干擾等問題的影響,NAND Flash天生會存在漏電問題(電荷泄漏),從而導(dǎo)致存儲數(shù)據(jù)發(fā)生變化。因此,從本質(zhì)上講,NAND Flash是一種不可靠介質(zhì),非常容易出現(xiàn)Bit翻轉(zhuǎn)問題。SSD通過控制器和固件程序?qū)⑦@種不可靠的NAND Flash變成了可靠的數(shù)據(jù)存儲介質(zhì)。
為了在這種不可靠介質(zhì)上構(gòu)建可靠存儲,SSD內(nèi)部做了大量工作。在硬件層面,需要通過ECC單元解決經(jīng)常出現(xiàn)的比特翻轉(zhuǎn)問題。每次數(shù)據(jù)存儲的時候,硬件單元需要為存儲的數(shù)據(jù)計算ECC校驗碼;在數(shù)據(jù)讀取的時候,硬件單元會根據(jù)校驗碼恢復(fù)被破壞的bit數(shù)據(jù)。ECC硬件單元集成在SSD控制器內(nèi)部,代表了SSD控制器的能力。在MLC存儲時代,BCH編解碼技術(shù)可以解決問題,4KB數(shù)據(jù)中存在100bit翻轉(zhuǎn)時可以糾正錯誤;在TLC存儲時代,bit錯誤率大為提升,需要采用更高糾錯能力的LDPC編解碼技術(shù),在4KB出現(xiàn)550bit翻轉(zhuǎn)時,LDPC硬解碼仍然可以恢復(fù)數(shù)據(jù)。下圖對比了LDPC硬解碼、BCH以及LDPC軟解碼之間的能力, 從對比結(jié)果可以看出,LDPC軟解碼具有更強的糾錯能力,通常使用在硬解碼失效的情況下。LDPC軟解碼的不足之處在于增加了IO的延遲。
在軟件層面,SSD內(nèi)部設(shè)計了FTL(Flash Translation Layer),該軟件層的設(shè)計思想和log-structured file system設(shè)計思想類似。采用log追加寫的方式記錄數(shù)據(jù),采用LBA至PBA的地址映射表記錄數(shù)據(jù)組織方式。Log-structured系統(tǒng)最大的一個問題就是垃圾回收(GC)。因此,雖然NAND Flash本身具有很高的IO性能,但受限于GC的影響,SSD層面的性能會大受影響,并且存在十分嚴重的IO QoS問題,這也是目前標準NVMe SSD一個很重要的問題。SSD內(nèi)部通過FTL解決了NAND Flash不能inplace write的問題;采用wear leveling算法解決了NAND Flash磨損均衡問題;通過data retention算法解決了NAND Flash長時間存放漏電問題;通過data migration方式解決read diatribe問題。FTL是NAND Flash得以大規(guī)模使用的核心技術(shù),是SSD的重要組成部分。
NAND Flash內(nèi)部本身具有很多并發(fā)單元,如上圖所示,一個NAND Flash芯片由多個Target構(gòu)成,每個Target包含多個Die。每個Die是一個獨立的存儲單元,一個Die由多個Plane構(gòu)成,多個Plane之間共享一套操作總線,多個Plane可以組成一個單元并發(fā)操作,構(gòu)建Multi-plane。一個Plane由若干個Block構(gòu)成,每個Block是一個擦除單元,該單元的大小也決定了SSD軟件層面的GC回收粒度。每個Block由多個page頁構(gòu)成,每個Page是最小寫入(編程)單元,通常大小為16KB。SSD內(nèi)部軟件(固件)需要充分利用這些并發(fā)單元,構(gòu)建高性能的存儲盤。
一塊普通NVMe SSD的物理硬件結(jié)構(gòu)簡單,由大量的NAND Flash構(gòu)成,這些NAND Flash通過SOC(SSD控制器)進行控制,F(xiàn)TL軟件運行在SOC內(nèi)部,并通過多隊列的PCIe總線與主機進行對接。為了提升性能,企業(yè)級SSD需要板載DRAM,DRAM資源一方面可以用來緩存數(shù)據(jù),提升寫性能;另一方面用來緩存FTL映射表。企業(yè)級SSD為了提升性能,通常采用Flat mapping的方式,需要占據(jù)較多的內(nèi)存(0.1%)。內(nèi)存容量的問題也限制了大容量NVMe SSD的發(fā)展,為了解決內(nèi)存問題,目前一種可行的方法是增大sector size。標準NVMe SSD的sector size為4KB,為了進一步增大NVMe SSD的容量,有些廠商已經(jīng)開始采用16KB的sector size。16KB Sector size的普及應(yīng)用,會加速大容量NVMe SSD的推廣。
3 影響NVMe SSD的性能因素
NVMe SSD 廠商Spec給出的性能非常完美,前面也給出了NVMe SSD和磁盤之間的性能對比,NVMe SSD的性能的確比磁盤高很多。但在實際應(yīng)用過程中,NVMe SSD的性能可能沒有想象中的那么好,并且看上去不是特別的穩(wěn)定,找不到完美的規(guī)律。和磁盤介質(zhì)相比,SSD的性能和很多因素相關(guān),分析SSD的性能影響因素,首先需要大體了解SSD構(gòu)成的主要部分。如下圖所示,其主要包括主機CPU、PCIe互連帶寬、SSD控制器及FTL軟件、后端NAND Flash帶寬、NAND Flash介質(zhì)。影響SSD性能的主要因素可以分成硬件、軟件和客觀環(huán)境三大部分,具體分析如下。
1, 硬件因素
a) NAND Flash本身。不同類型的NAND Flash本身具有不同的性能,例如SLC的性能高于MLC,MLC的性能優(yōu)于TLC。選擇不同的工藝、不同類別的NAND Flash,都會具有不同的性能。
b) 后端通道數(shù)(CE數(shù)量)及總線頻率。后端通道數(shù)決定了并發(fā)NAND Flash的數(shù)量,決定了并發(fā)能力。不同的SSD控制器支持不同數(shù)量的通道數(shù),也決定了SSD的后端吞吐帶寬能力。NAND Flash Channel的總線頻率也決定了訪問Flash的性能。
c) SSD控制器的處理能力。SSD控制器中會運行復(fù)雜的FTL(Flash Translation Layer)處理邏輯,將邏輯塊讀寫映射轉(zhuǎn)換成NAND Flash 讀寫請求。在大數(shù)據(jù)塊讀寫時,對處理器能力要求不是很高;在小數(shù)據(jù)塊讀寫時,對處理器能力要求極高,處理器能力很容易成為整個IO系統(tǒng)的性能瓶頸點。
d) SSD控制器架構(gòu)。通常SSD控制器采用SMP或者MPP兩種架構(gòu),早期的控制器通常采用MPP架構(gòu),多個小處理器通過內(nèi)部高速總線進行互連,通過硬件消息隊列進行通信。內(nèi)存資源作為獨立的外設(shè)供所有的處理器進行共享。這種架構(gòu)和基于消息通信的分布式系統(tǒng)類似。MPP架構(gòu)的很大優(yōu)勢在于性能,但是編程復(fù)雜度較高;SMP架構(gòu)的性能可擴展性取決于軟件,編程簡單,和在x86平臺上編程相似。不同的控制器架構(gòu)會影響到SSD的總體性能,在SSD設(shè)計時,會根據(jù)設(shè)計目標,選擇不同類型的SSD控制器。
e) 內(nèi)存支持容量。為了追求高性能,SSD內(nèi)部的映射資源表會常駐內(nèi)存,映射表的內(nèi)存占用大小是盤容量的0.1%,當內(nèi)存容量不夠大時,會出現(xiàn)映射表換入換出的問題,影響到性能。
f) PCIe的吞吐帶寬能力。PCIe前端帶寬體現(xiàn)了SSD的前端吞吐能力,目前NVMe SSD采用x4 lane的接入方式,上限帶寬為3GB/s,當后端NAND Flash帶寬和處理器能力足夠時,前端PCIe往往會成為性能瓶頸點。NAND Flash具有很高的讀性能,目前來看,SSD的讀性能在很大程度上受限于PCIe總線,因此需要快速推進PCIe4.0標準。
g) 溫度對性能造成影響。在NAND Flash全速運行的情況下,會產(chǎn)生較大的散熱功耗,當溫度高到一定程度時,系統(tǒng)將會處于不正常的工作狀態(tài),為此,SSD內(nèi)部做了控溫系統(tǒng),通過溫度檢測系統(tǒng)來調(diào)整SSD性能,從而保證系統(tǒng)溫度維持在閾值之內(nèi)。調(diào)整溫度會犧牲性能,本質(zhì)上就是通過降低SSD性能來降溫。因此,當環(huán)境溫度過高時,會影響到SSD的性能,觸發(fā)SSD內(nèi)部的溫度控制系統(tǒng),調(diào)節(jié)SSD的性能。
h) 使用壽命對性能造成影響。NAND Flash在不斷擦除使用時,F(xiàn)lash的bit error會不斷上升,錯誤率的提升會影響到SSD的IO性能。
2, 軟件因素
a) 數(shù)據(jù)布局方式。數(shù)據(jù)布局方法需要充分考慮NAND Flash中的并發(fā)單元,如何將IO操作轉(zhuǎn)換成NAND Flash的并發(fā)操作,這是數(shù)據(jù)布局需要考慮的問題。例如,采用數(shù)據(jù)交錯的方式在多通道page上進行數(shù)據(jù)布局,通過這種方式可以優(yōu)化順序帶寬。
b) 垃圾回收/wear leveling調(diào)度方法。數(shù)據(jù)回收、wear leveling、data retention等操作會產(chǎn)生大量的NAND Flash后端流量,后端流量直接反應(yīng)了SSD的寫放大系數(shù),也直接體現(xiàn)在后端帶寬的占用。垃圾回收等產(chǎn)生的流量也可以稱之為背景流量,背景流量會直接影響到前端用戶性能。因此需要對背景流量和用戶流量之間進行合理調(diào)度,使得用戶IO性能達到最佳。
c) OP預(yù)留。為了解決壞塊、垃圾回收等問題,在SSD內(nèi)部預(yù)留了一部分空閑資源,這些資源被稱之為OP(Overprovisioning)。OP越大,GC過程中平均搬移的數(shù)據(jù)會越少,背景流量會越小,因此,寫放大降低,用戶IO性能提升。反之,OP越小,性能會越低,寫放大會越大。在SSD容量較小的時代,為了提升SSD的使用壽命,往往OP都設(shè)置的比較大。
d) Bit error處理影響性能。在SSD內(nèi)部采用多種機制來處理NAND Flash所產(chǎn)生的Bit error。ECC糾錯、read retry、soft LDPC以及RAIN都是用來糾正bit翻轉(zhuǎn)導(dǎo)致的錯誤。當Bit錯誤率增加時,軟件處理的開銷越大,在bit控制在一定范圍之內(nèi),完全可以通過硬件進行糾正。一旦軟件參與到bit糾正的時候,會引入較大的性能開銷。
e) FTL算法。FTL算法會影響到SSD性能,對于不同用途的SSD,F(xiàn)TL的設(shè)計與實現(xiàn)是完全不同的,企業(yè)級SSD為了追求高性能,通常采用Flat mapping的方式,采用大內(nèi)存緩存映射表;消費級SSD為了追求低成本,通常采用元數(shù)據(jù)換入換出的方式,并且采用pSLC+TLC的組合方式進行分層存儲,也可以采用主機端內(nèi)存緩存元數(shù)據(jù)信息,但是這些方式都會影響到性能。
f) IO調(diào)度算法。NAND Flash具有嚴重的性能不對稱性,F(xiàn)lash Erase和Program具有ms級延遲,F(xiàn)lash read的延遲在us級。因此,如何調(diào)度Erase、Program以及read是SSD后端設(shè)計需要考慮的問題。另外,前端IO以及背景IO之間的調(diào)度也是需要權(quán)衡考慮,通過IO調(diào)度可以達到最佳性能表現(xiàn)。在IO調(diào)度過程中,還需要利用NAND Flash的特性,例如Program Suspension,通過這些特性的利用,最優(yōu)化SSD前端IO性能。
g) 驅(qū)動軟件。驅(qū)動軟件運行在主機端,通常分為內(nèi)核態(tài)和用戶態(tài)兩大類,內(nèi)核態(tài)驅(qū)動會消耗較多的CPU資源,存在頻繁上下文切換、中斷處理,因此性能較低;用戶態(tài)驅(qū)動通常采用Polling IO處理模式,去除了上下文切換,可以充分提升CPU效率,提升整體IO性能。
h) IO Pattern對性能產(chǎn)生影響。IO Pattern影響了SSD內(nèi)部的GC數(shù)據(jù)布局,間接影響了GC過程中的數(shù)據(jù)搬移量,決定了后端流量。當IO Pattern為全順序時,這種Pattern對SSD內(nèi)部GC是最為友好的,寫放大接近于1,因此具有最好的性能;當IO Pattern為小塊隨機時,會產(chǎn)生較多的GC搬移數(shù)據(jù)量,因此性能大為下降。在實際應(yīng)用中,需要通過本地文件系統(tǒng)最優(yōu)化IO Pattern,獲取最佳性能。
3, 客觀因素
a) 使用時間越長會導(dǎo)致SSD性能變差。使用時間變長之后,SSD內(nèi)部NAND Flash的磨損會加重,NAND Flash磨損變大之后會導(dǎo)致bit錯誤率提升。在SSD內(nèi)部存在一套完整的bit錯誤恢復(fù)機制,由硬件和軟件兩大部分構(gòu)成。當bit錯誤率達到一定程度之后,硬件機制將會失效。硬件機制失效之后,需要通過軟件(Firmware)的方式恢復(fù)翻轉(zhuǎn)的bit,軟件恢復(fù)將會帶來較大的延遲開銷,因此會影響到SSD對外表現(xiàn)的性能。在有些情況下,如果一塊SSD在掉電情況下放置一段時間之后,也可能會導(dǎo)致性能變差,原因在于SSD內(nèi)部NAND Flash中存儲電荷的漏電,放置一段時間之后導(dǎo)致bit錯誤率增加,從而影響性能。SSD的性能和時間相關(guān),本質(zhì)上還是與NAND Flash的比特錯誤率相關(guān)。
b) 環(huán)境溫度也會對性能造成影響。為了控制SSD溫度不能超過上限值,在SSD內(nèi)部設(shè)計有一套溫度負反饋機制,該機制通過檢測的溫度對NAND Flash后端帶寬進行控制,達到降低溫度的效果。如果一旦溫度負反饋機制開始工作,那么NAND Flash后端帶寬將會受到限制,從而影響前端應(yīng)用IO的性能。
下面從軟件的角度出發(fā),重點闡述GC以及IO Pattern對SSD性能的影響。
3.1 GC對性能的影響
SSD內(nèi)部有一個非常厚重的軟件層,該軟件層用來解決NAND Flash的問題,采用log-structured的方式記錄數(shù)據(jù)。Log-structured方式引入了GC的問題,對于前端業(yè)務(wù)來講,GC流量就是背景噪聲。GC流量不是時時刻刻存在的,因此,SSD對外體現(xiàn)性能大幅度波動。當SSD為空盤時,性能會非常好,為最佳性能;當SSD被用過一段時間之后,性能會大幅降低。其中GC起到了很重要的作用。企業(yè)級SSD在發(fā)布Spec的時候,都會發(fā)布SSD盤的穩(wěn)態(tài)性能。在性能測試的時候,需要對盤進行老化預(yù)處理。通常預(yù)處理的方法是順序?qū)憹M盤,然后再隨機兩遍寫盤,預(yù)處理完成之后,再對盤進行隨機讀寫測試,得到Spec中定義的值。穩(wěn)態(tài)值基本可以認為是盤的下限性能。
上圖所示是多個廠商的盤在空盤和穩(wěn)態(tài)情況下的性能對比,由此可見穩(wěn)態(tài)情況和空盤情況下的性能差距很大。在穩(wěn)態(tài)情況下,SSD內(nèi)部的GC會全速運行,會占用較多的NAND Flash后端帶寬。背景流量和前端數(shù)據(jù)流的比例也就體現(xiàn)了SSD盤的寫放大系數(shù),寫放大系數(shù)越大,背景流量占用帶寬越多,SSD對外體現(xiàn)的前端性能也就越差。寫放大系數(shù)很多因素相關(guān),例如OP、應(yīng)用IO Pattern等。如果應(yīng)用IO Pattern比較好,那么可以降低寫放大系數(shù),背景噪聲流就會減少,前端業(yè)務(wù)的性能會提升。例如,在SSD完全順序?qū)懭氲那闆r下,寫放大系數(shù)可以接近于1,此時GC產(chǎn)生的數(shù)據(jù)流很少,背景流量基本沒有,后端帶寬基本被業(yè)務(wù)數(shù)據(jù)流占用,因此對外體現(xiàn)的性能會很好。
GC是影響性能的重要因素,除了影響性能之外,GC會增大寫放大,對SSD的使用壽命產(chǎn)生影響。從軟件層面的角度考慮,可以通過優(yōu)化應(yīng)用IO Pattern的方式優(yōu)化SSD內(nèi)部GC,從而進一步提升SSD的性能,優(yōu)化使用壽命。對于下一代更為廉價的QLC SSD介質(zhì),就需要采用這種優(yōu)化思路,否則無法很好的滿足實際業(yè)務(wù)的應(yīng)用需求。
3.2 IO Pattern對性能的影響
IO Pattern會對SSD的性能產(chǎn)生嚴重影響,主要表現(xiàn)在如下幾個方面:
1, 不同的IO Pattern會產(chǎn)生不同的寫放大系數(shù),不同的寫放大系數(shù)占用后端NAND Flash帶寬不同。當前端應(yīng)用對SSD采用完全順序的方式進行寫入時,此時是最佳的IO Pattern,對于SSD而言寫放大系數(shù)接近1,SSD內(nèi)部的背景流量基本可以忽略,前端性能達到最佳。在實際應(yīng)用中,很難采用這種完全順序的數(shù)據(jù)寫模型,但可以通過優(yōu)化逼近順序?qū)懭搿?/p>
2, 不同請求大小的IO之間會產(chǎn)生干擾;讀寫請求之間會產(chǎn)生干擾。小請求會受到大請求的干擾,從而導(dǎo)致小請求的延遲增加,這個比較容易理解,在HDD上同樣會存在這種情況。由于NAND Flash介質(zhì)存在嚴重的讀寫不對稱性,因此讀寫請求之間也會互相干擾,尤其是寫請求對讀請求產(chǎn)生嚴重的性能影響。
3.2.1 順序?qū)懭隤attern對SSD性能優(yōu)化的奧秘
在針對閃存系統(tǒng)的設(shè)計中,需要考慮IO Pattern對性能產(chǎn)生的影響,通過軟件的優(yōu)化來最優(yōu)化SSD的使用。在實際應(yīng)用中完全順序?qū)懭氲腎O Pattern基本上是不存在的,除非用作順序?qū)懭氲娜罩驹O(shè)備。對于順序?qū)懭雰?yōu)化性能這個結(jié)論,需要從SSD內(nèi)部實現(xiàn)來深入理解,知道根源之后,可以采用合理的方式來逼近順序?qū)懭氲哪J?,從而最?yōu)化SSD的性能。
SSD內(nèi)部采用log-structured的數(shù)據(jù)記錄模式,并發(fā)寫入的IO數(shù)據(jù)按照時間順序匯聚成大數(shù)據(jù)塊,合并形成的大數(shù)據(jù)塊以Page stripe的方式寫入NAND Flash。多個Page stripe會被寫入同一個GC單元(Chunk or Superblock),當一個GC單元被寫完成之后,該GC單元進入sealed模式(只讀),分配新的GC單元寫新的數(shù)據(jù)。在這種模式下,如果多個業(yè)務(wù)的數(shù)據(jù)流并發(fā)隨機的往SSD中寫入數(shù)據(jù),那么多個應(yīng)用的數(shù)據(jù)就會交錯在一起被存儲到同一個GC單元中。如下圖所示,不同應(yīng)用的數(shù)據(jù)生命周期不同,當需要回收一個GC單元的時候,會存在大量數(shù)據(jù)的遷移,這些遷移的數(shù)據(jù)就會形成寫放大,影響性能和使用壽命。
不同應(yīng)用的數(shù)據(jù)交錯存儲在同一個GC單元,本質(zhì)上就是不同冷熱程度的數(shù)據(jù)交錯存儲的問題。從GC的角度來講,相同冷熱程度的數(shù)據(jù)存儲在同一個GC單元上是最佳的,為此三星推出了Multi-stream SSD,該SSD就允許不同應(yīng)用的數(shù)據(jù)存儲到不同的Stream單元(GC單元),從而提升GC效率,降低寫放大。Multi-stream是一種顯式的設(shè)計方式,需要更改SSD接口以及應(yīng)用程序。從IO Pattern的角度考慮,可以通過順序大塊的方式也可以逼近類似的效果。假設(shè)操作SSD只存在一個線程,不同的應(yīng)用都采用大數(shù)據(jù)塊的方式寫入數(shù)據(jù),那么在一個時間片段內(nèi)只存在一個應(yīng)用的數(shù)據(jù)往SSD中寫入數(shù)據(jù),那么在一個GC單元內(nèi)存儲的數(shù)據(jù)會變得有序和規(guī)則。如下圖所示,采用上述方法之后,一個GC單元內(nèi)存儲的數(shù)據(jù)將會變得冷熱均勻。在GC過程中會大大減少數(shù)據(jù)的搬移,從而減少背景流量。
在實際應(yīng)用中,上述IO Pattern很難產(chǎn)生,主要是應(yīng)用很難產(chǎn)生非常大粒度的請求。為此在存儲系統(tǒng)設(shè)計過程中,可以引入Optane高性能存儲介質(zhì)作為SSD的寫緩存。前端不同業(yè)務(wù)的寫請求首先寫到Optane持久化介質(zhì)中,在Optane持久化介質(zhì)中聚合形成大數(shù)據(jù)塊。一旦聚合形成大數(shù)據(jù)塊之后,再寫入SSD,通過這種方式可以最大程度的逼近SSD順序?qū)懭脒^程,提升SSD的性能和使用壽命。
3.2.2 讀寫沖突Pattern對性能的影響
如下圖所示,NAND Flash介質(zhì)具有很強的讀寫不對稱性。Block Erase和Page Program的延遲會遠遠高于Page Read所耗費的時間。那么在這種情況下,如果read請求在同一個Flash Channel上和Erase、Program操作沖突,那么read操作將會被Erase/program操作影響。這是在讀寫混合情況下,讀性能會受到影響的重要因素。
在實際應(yīng)用過程中,經(jīng)常會發(fā)現(xiàn)應(yīng)用的測試結(jié)果和SSD Spec對不上,會比Spec給出的值要來的低。Spec給出的值通常為純讀或者純寫情況下的性能指標,在讀寫混合的場景下,性能表現(xiàn)和Spec給出的值就會存在非常大的出入。
對于不同的SSD,通過測試可以發(fā)現(xiàn)在讀寫混合情況下的性能表現(xiàn)差距會比較大。在SSD處于穩(wěn)態(tài)條件下,應(yīng)用隨機讀的情況下,如果引入一個壓力不是很大的順序?qū)?,那么會發(fā)現(xiàn)不同SSD的抗干擾能力是不同的。有些SSD在寫干擾的情況下,讀性能會急劇下降,延遲快速上升,QoS性能得不到保證。下圖是兩個SSD在相同情況下的測試結(jié)果,從結(jié)果來看,有些SSD的抗寫干擾能力比較強,讀性能不會急劇下降。
為什么有些SSD會具備比較強的抗寫干擾能力呢?其中的奧秘就在于SSD內(nèi)部的IO調(diào)度器。IO調(diào)度器會對write、read 和Erase請求進行調(diào)度處理,該調(diào)度器算法的不同就會表現(xiàn)出不同的抗干擾能力。目前很多NAND Flash可以支持Program/Erase Suspension的功能,在IO調(diào)度處理的過程中,為了提升讀性能,降低讀請求延遲,可以采用Suspension命令對Program/Erase命令暫停,對read請求優(yōu)先調(diào)度處理。
讀寫沖突是SSD內(nèi)部影響IO QoS的重要因素。在SSD內(nèi)部通過IO調(diào)度器的優(yōu)化可以提升SSD性能的QoS能力,但是還是無法與存儲軟件結(jié)合來協(xié)同優(yōu)化QoS。為了達到最佳的SSD性能QoS,需要關(guān)注Openchannel技術(shù)。Openchannel其實只是一種軟硬件層次劃分的方法,通常來講,SSD內(nèi)部的邏輯可以劃分為面向NAND資源的物理資源管理層以及面向數(shù)據(jù)布局的資源映射層。物理資源管理由于和NAND Flash密切相關(guān),因此可以放到SSD內(nèi)部。傳統(tǒng)的NVMe SSD需要對外暴露標準的塊設(shè)備接口,因此需要在SSD內(nèi)部實現(xiàn)資源映射層。從端至端的角度來看,資源映射層可以與存儲軟件層結(jié)合起來,為此將資源映射層從SSD內(nèi)部剝離出來,集成至存儲軟件層。一旦資源映射層從SSD內(nèi)部剝離之后,需要定義一個新的SSD接口,其中的一種接口方式就是Openchannel。
盤古分布式存儲針對SSD QoS問題進行了大量研究,提出了Object SSD的概念,Object SSD也是一種新的SSD接口方式,其采用對象方式對SSD進行讀寫刪操作,每個對象采用Append write操作方式。這種接口方式可以很好的與分布式存儲無縫結(jié)合。采用Object SSD之后,SSD內(nèi)部的大量工作被簡化,IO的調(diào)度會更加靈活,存儲軟件與SSD協(xié)同配合,達到IO性能的最優(yōu)化,以及QoS的最大化。
4 SSD寫性能分析模型
SSD內(nèi)部的數(shù)據(jù)流分成兩大類,一類為前端用戶數(shù)據(jù)流;另一類為內(nèi)部背景數(shù)據(jù)流。前端用戶數(shù)據(jù)流和背景數(shù)據(jù)流會匯聚成NAND Flash后端流量。當背景數(shù)據(jù)流不存在時,NAND Flash帶寬會被用戶數(shù)據(jù)流全部占據(jù),此時SSD對外表現(xiàn)的性能達到最佳。當SSD具有較大寫放大時,會產(chǎn)生很大的背景數(shù)據(jù)流,背景流會搶占NAND Flash帶寬,導(dǎo)致前端用戶IO性能降低。為了穩(wěn)定前端IO性能,在SSD內(nèi)部的調(diào)度器會均衡前端和背景流量,保證前端性能的一致性。背景流量的占比反應(yīng)了SSD的寫放大系數(shù),因此,站在NAND Flash帶寬占用的角度可以分析SSD在穩(wěn)態(tài)情況下的性能。
在此,假設(shè)寫放大系數(shù)為WA,順序?qū)懬闆r下的總帶寬數(shù)為B,用戶寫入流量(隨機寫入流量)為U。那么,由于GC寫放大造成的背景流量為:(WA - 1)* U
寫放大流量為一讀一寫,都會占用帶寬,因此,總帶寬可以描述為:
2 (WA - 1) U + U = B
因此,可以得到:
U = B / (2(WA - 1) + 1) = B / (2 WA - 1)
上述公式表述了前端用戶流量和NAND Flash總帶寬、寫放大系數(shù)之間的關(guān)系。
根據(jù)Spec,Intel P4500的順序?qū)憥挒?.9GB/s,按照上述公式,在隨機訪問模式下的帶寬為: 1900 / (2 * 4 - 1) = 270MB/s,IOPS為67K,根據(jù)該公式推導(dǎo)的結(jié)果和Spec給出的結(jié)果相同。
下圖是Intel P4500和Samsung PM963隨機寫延遲和推導(dǎo)公式之間的對比。結(jié)果非常吻合。
由此可以推出,隨機寫性能由SSD內(nèi)部后端帶寬以及寫放大系數(shù)來決定。因此,從存儲軟件的角度出發(fā),我們可以通過優(yōu)化IO Pattern的方式減小寫放大系數(shù),從而可以提升SSD的隨機寫性能。
5 小結(jié)
閃存存儲技術(shù)正在飛速發(fā)展,閃存介質(zhì)、SSD控制器、存儲系統(tǒng)軟件、存儲硬件平臺都在圍繞閃存日新月異的發(fā)展。閃存給數(shù)據(jù)存儲帶來的價值顯而易見,數(shù)據(jù)中心閃存化是重要發(fā)展趨勢。NVMe SSD性能受到很多因素的影響,在軟件層面可以通過IO Pattern優(yōu)化SSD的性能,使得整體存儲系統(tǒng)的性能達到最佳。
作者:云棲社區(qū) 云攻略小攻
-
SSD
+關(guān)注
關(guān)注
21文章
2984瀏覽量
119629 -
nvme
+關(guān)注
關(guān)注
0文章
252瀏覽量
23248
發(fā)布評論請先 登錄
Xilinx FPGA NVMe主機控制器IP,高性能版本介紹應(yīng)用
Xilinx FPGA高性能NVMe SSD主機控制器,NVMe Host Controller IP
高性能NVMe主機控制器,Xilinx FPGA NVMe Host Accelerator IP
NVMe協(xié)議研究掃盲
NVMe P4600的速度部分低于SATA SSD?
在Xilinx ZCU102評估套件上啟用NVMe SSD接口
如何為工業(yè)應(yīng)用設(shè)計NVMe SSD呢
西部數(shù)據(jù)推出新款高性能NVMe SSD
重新定義NVMe SSD外形

評論