一些數(shù)碼大V在消費(fèi)類SSD中也會使用IOmeter以體現(xiàn)其專業(yè)度。這種“專業(yè)”會包括兩方面:其一,IOmeter的界面比CystalDiskMark、TxBENCH、AS SSD等“快餐”測試軟件要復(fù)雜得多,會給人營造艱深晦澀的感覺。
其二,IOmeter確實可以提供“快餐”軟件所缺乏的數(shù)據(jù),典型的成果包括諸如“萬秒圖”之類的?!叭f秒”意味著可以給SSD比較重的負(fù)荷,說服力也會高很多。而工作負(fù)荷的輕重,不僅僅是高低檔消費(fèi)類SSD的區(qū)別,也是數(shù)據(jù)中心SSD與消費(fèi)類SSD的根本區(qū)別。
SSD工作負(fù)荷的輕重,主要體現(xiàn)在幾個方面:
?1、隊列深度
?2、混合讀寫
?3、持續(xù)時間
這幾方面的內(nèi)容我們會在相關(guān)的測試項目中逐步展開。同時,我們先通過消費(fèi)者熟悉的快餐測試軟件幫助讀者理解測試項目的內(nèi)涵,并在此基礎(chǔ)上逐步過渡到IOmeter,再進(jìn)階到FIO的應(yīng)用。
?
?測試最基本的設(shè)置:數(shù)據(jù)包大小
?略有SSD測試常識的人都知道,需要考察幾種性能:順序讀、順序?qū)?、隨機(jī)讀、隨機(jī)寫。
那么,順序和隨機(jī)的定義是什么?
先說隨機(jī)?,F(xiàn)代操作系統(tǒng)的內(nèi)存和文件系統(tǒng)都是頁式管理,以4KB為單位?;诖疟P的512Byte扇區(qū)概念對SSD而言意義不大。因為NAND Flash的基本存儲單元是頁,容量一般為2KB或者4KB,這是最小的讀寫單元。因此,綜合操作系統(tǒng)和NAND Flash的特點(diǎn),4KB的數(shù)據(jù)塊會被看做是最基本、最通用的操作單元,公認(rèn)用這個容量的數(shù)據(jù)包當(dāng)做“隨機(jī)”讀寫的代表。
考慮到應(yīng)用或者SSD的特點(diǎn),在某些測試中8KB、16KB這樣的數(shù)據(jù)會更有實際意義。譬如Oracle數(shù)據(jù)庫的默認(rèn)塊大小是8KB,也可以被設(shè)為2KB~64KB不等。再譬如Solidigm D5-P5316、P5336等大容量SSD使用了64KB或者16KB大小的間接單元(IU,indirection unit),它們可以接受4KB的寫入,但使用更大的數(shù)據(jù)單元會更有效率。使用這些軟硬件的用戶都會進(jìn)行針對性的優(yōu)化,對應(yīng)的,測試軟件在考察隨機(jī)性能時也應(yīng)該進(jìn)行相應(yīng)的設(shè)置。
剛才說的是“隨機(jī)”讀寫的尺度與“頁”相關(guān),那么,“順序”讀寫的尺度就與塊相關(guān)了。若干NAND Flash的頁會組成一個塊,典型的是64個頁。常見的塊容量可能是128KB、256KB、512KB。NAND Flash的擦除是以塊為單位的。因此,128KB數(shù)據(jù)包的讀寫可以看作是順序操作的最小單元,1到4個數(shù)據(jù)塊正好填滿一個塊。也有的測試會使用較大的單元,如IOmeter的預(yù)設(shè)是256KB,CrystalDiskMark預(yù)設(shè)了1MB等,這些數(shù)據(jù)包的容量可能更接近NAND Flash的實際塊容量。
以人們熟悉的CrystalDiskMark為例,左側(cè)的色塊是SEQ1M、SEQ128K、RND4K,代表的就是順序讀寫(1MB數(shù)據(jù)包)、順序讀寫(128KB數(shù)據(jù)包)、隨機(jī)讀寫(4KB數(shù)據(jù)包)。
綜上,設(shè)置正確的數(shù)據(jù)包大小,就是考察SSD的隨機(jī)或順序讀寫的性能。最普適的設(shè)置是4KB和128KB,酌情按照需要額外增加特定的數(shù)據(jù)包大小。
?對測試成績影響最大的設(shè)置:隊列深度
?要想在SSD測試中獲得理想的成績,最值得留意的重點(diǎn)是設(shè)置適宜的隊列深度。
對于個人電腦,需要同時訪問SSD的應(yīng)用程序并不多,主要就是前臺運(yùn)行的軟件(如游戲、圖形圖像軟件)會斷續(xù)讀寫較大的文件,以及后臺運(yùn)行的通訊工具(包括電子郵箱、即時通訊工具)偶爾接收信息,持續(xù)時間較長但吞吐量比較小的行為主要是后臺上傳下載一些文件或者系統(tǒng)更新等。整體而言,消費(fèi)類SSD的工作隊列深度在1~4之間。
服務(wù)器面對的情況就不一樣,其會同時服務(wù)多個用戶/租戶,其并行操作的規(guī)模要大得多,平均到每個SSD的工作隊列深度通常在16~64的水平。
常用的測試軟件大多可以模擬比較大規(guī)模的訪問,譬如CystalDiskMark,其4KB隨機(jī)寫測試的默認(rèn)設(shè)置是線程數(shù)為1,隊列32——ATA協(xié)議的最大隊列深度就是32。而針對NVMe SSD的預(yù)設(shè)為線程16、隊列32,也就是界面中簡寫的“Q32T16”。
實際的隊列深度就是隊列數(shù)乘以線程數(shù),Q32T16就是32×16=512,總共可以向SSD發(fā)出512隊列深度的操作請求。NVMe協(xié)議可以接受64K之多的隊列,而且還可以優(yōu)化操作順序,原則上隊列深度越大,平攤下來的指令延遲相對越小,IOPS會越高。因此,在使用CystalDiskMark做測試時,如果忘記選擇NVMe模式,那就是使用較小的32隊列深度進(jìn)行隨機(jī)測試,成績就會差一些。
?深究一下隊列和線程
隊列深度是我們設(shè)置的隊列數(shù)和線程數(shù)的積。理論上來說,對于SSD而言,線程1×隊列512,與線程16×隊列32,由于乘積相同,其實是等效的。
較多的線程可以充分發(fā)揮現(xiàn)代處理器核心數(shù)量的優(yōu)勢,有可能帶來更優(yōu)的測試數(shù)據(jù),但這并不絕對,這是因為跨處理器內(nèi)核甚至跨插槽的操作也可能會帶來預(yù)期以外的結(jié)果。相對而言,線程1得到的測試數(shù)據(jù)更容易復(fù)現(xiàn)。因此,在實際的測試當(dāng)中,我們會建議分別考察1個線程和8/16個線程的結(jié)果。
多線程的測試還有更為復(fù)雜的設(shè)置技巧,譬如讓不同線程寫入不同的區(qū)域,這會帶來更可靠的性能。?
?較大的隊列深度有利于獲得更高的IOPS,讓數(shù)據(jù)更好看。但對于消費(fèi)類SSD,深隊列的測試數(shù)據(jù)參考價值不高,大家還是看淺隊列(Q1T1)的數(shù)據(jù)更有參考價值。對于數(shù)據(jù)中心SSD,一般官方公布的4KB隨機(jī)讀寫測試的數(shù)據(jù)是在256隊列深度下的。更大的隊列深度,如512,可以體現(xiàn)特別極端的情況,但實際應(yīng)用中很少發(fā)生,因為積壓太多請求也意味著累積的延遲非常大,會拖慢整個系統(tǒng)的響應(yīng)。如果服務(wù)器真的會有這么大的負(fù)荷,那應(yīng)該建議配置更多的SSD來分擔(dān)。
?小結(jié)
?今天,大家對SSD測試的基本參數(shù)就算入門了,對常見測試軟件提供的預(yù)設(shè)信息可以做到“知其然,知其所以然”。對于IOmeter,我們只是初步展示其界面,其中有許多的預(yù)設(shè)項目,經(jīng)過本節(jié)文章,大家也能夠有所理解。下一節(jié),我們將詳細(xì)講解IOmeter的設(shè)置,以及一些稍微高級的測試設(shè)計技巧。