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

評(píng)論