讀和寫操作混合才符合服務(wù)器的真實(shí)應(yīng)用常態(tài),至于具體的讀寫比例,需要根據(jù)預(yù)期部署的業(yè)務(wù)來定。根據(jù)經(jīng)驗(yàn),在線交易、虛擬化類的應(yīng)用,讀寫比例大約是70:30的量級;CDN、AI等應(yīng)用,是90:10。做視頻點(diǎn)播、大數(shù)據(jù)應(yīng)用的,可以不考慮做隨機(jī)讀寫的測試,做90:10的順序讀寫更為合理。相應(yīng)的,我們也可以根據(jù)SSD的特點(diǎn)去預(yù)設(shè)其適合的應(yīng)用領(lǐng)域,譬如DWPD為1的SSD,設(shè)計(jì)測試方案的時(shí)候,安排70:30的混合隨機(jī)讀寫是沒有錯(cuò)的;而DWPD小于0.5的SSD,做70:30的混合隨機(jī)讀寫就是強(qiáng)人所難了,改為90:10更為合理。
獲得可信的性能數(shù)據(jù)
在消費(fèi)類SSD的測試文章中,大家可能會(huì)看到一種表達(dá):在填充若干容量數(shù)據(jù)之后,讓SSD靜置若干時(shí)間,然后進(jìn)行某某測試。這么做的目的是讓SSD有機(jī)會(huì)進(jìn)行垃圾回收,讓SLC緩存容量盡量恢復(fù),甚至包括降低溫度,以期在后續(xù)的測試中獲得更好的測試結(jié)果。當(dāng)然,這不能稱為作弊,因?yàn)閭€(gè)人電腦本來就是斷斷續(xù)續(xù)地工作的,連續(xù)讀寫大容量數(shù)據(jù)的時(shí)候并不多,進(jìn)行適當(dāng)?shù)男菡筮M(jìn)行的測試更符合真實(shí)情況。
然而,服務(wù)器的工作有峰谷之別,但很可能并沒有休息的時(shí)候。因此,數(shù)據(jù)中心SSD特別關(guān)注的是在連續(xù)運(yùn)行的情況下,它還能穩(wěn)定地輸出多少性能。用術(shù)語來說,就是需要考察SSD的“穩(wěn)態(tài)”(Steady State)性能。前面曾經(jīng)提到的“萬秒圖”可以看做是一種簡易地觀察SSD穩(wěn)態(tài)性能的方式,這樣的壓力測試對于消費(fèi)類產(chǎn)品而言是足夠的,但對于容量較大的數(shù)據(jù)中心SSD并不具備普適性。稍后我們會(huì)專門介紹讓數(shù)據(jù)中心SSD進(jìn)入穩(wěn)態(tài)的標(biāo)準(zhǔn)操作。
一個(gè)SSD在正常工作期間會(huì)經(jīng)歷三個(gè)階段,參考SNIA的提法,分別是:
FOB(Fresh Out of the Box):就是全新的、剛開封的盤。經(jīng)過安全擦除的SSD也近似于FOB狀態(tài)。這個(gè)時(shí)候的盤所有的頁都是空白的,任何寫入操作都可以直接進(jìn)行編程,不需要考慮擦除、垃圾回收等操作的影響。消費(fèi)類SSD的標(biāo)稱性能都是處于這個(gè)狀態(tài)。這個(gè)階段的測試成績可以看做是養(yǎng)精蓄銳之后的沖刺,漂亮,但不可持續(xù)。
Transition:過渡或者轉(zhuǎn)換狀態(tài)。這個(gè)狀態(tài)的性能會(huì)明顯低于全新時(shí)的表現(xiàn),但是又高于穩(wěn)定態(tài)。不同的SSD在這個(gè)階段的性能表現(xiàn)和持續(xù)時(shí)間差異較大,這與主控、固件、介質(zhì)都有關(guān)系。隨著技術(shù)進(jìn)步,較新式的數(shù)據(jù)中心SSD會(huì)比早期的SSD更容易度過這個(gè)階段。這個(gè)階段可以看做是跑步期間休息了一會(huì)兒,再次跑起來的時(shí)候顯得還比較輕松,但也不可持續(xù)。
Steady State:穩(wěn)定態(tài)或穩(wěn)態(tài)。測試成績比之前的要低,但波動(dòng)不大了,譬如連續(xù)五次測試的平均性能變化不超過20%。這是長跑的真正狀態(tài),呼吸節(jié)奏均勻,對肌肉酸痛已經(jīng)麻木,配速比較穩(wěn)定。隨著時(shí)間持續(xù),性能可能會(huì)進(jìn)一步下降,但變化比較平緩。
對于服務(wù)器而言,SSD進(jìn)入穩(wěn)態(tài)后的數(shù)據(jù)才是有參考價(jià)值的。在SNIA的示意圖當(dāng)中,SSD需要兩三百分鐘才進(jìn)入穩(wěn)定態(tài)。事實(shí)上,我們單項(xiàng)測試進(jìn)行預(yù)處理(Preconditioning)的時(shí)間確實(shí)需要花幾個(gè)小時(shí),甚至十幾、幾十小時(shí),尤其對于容量巨大的SSD而言。但是,要獲得讓用戶有參考價(jià)值、令人信服的性能,這種代價(jià)是必須的。
如何有效地進(jìn)行預(yù)處理?
只要SSD持續(xù)測試的時(shí)間夠長,SSD總可以進(jìn)入穩(wěn)定態(tài)的——“萬秒圖”不夠的話,那就搞“十萬秒圖”?真這樣干就顯得很盲目??!
說到蠻干,嘿嘿……其實(shí)……我把預(yù)處理放在IOmeter的測試方法后面才說,是有“險(xiǎn)惡用心”的。前面我教了大家把讀啊寫啊的測試項(xiàng)一股腦堆到任務(wù)列表里,甚至教大家逐次增加隊(duì)列,測試總量很容易就堆積出來了。雖然每個(gè)測試也就10分鐘而已,但任務(wù)多啊,這一通組合搞完,幾個(gè)小時(shí)甚至幾天就過去了。然后,發(fā)現(xiàn)數(shù)據(jù)不太可靠,這……大腿都得拍腫了!
所以,我們應(yīng)該提前進(jìn)行有意識、有效率地操作,讓SSD盡快進(jìn)入穩(wěn)態(tài)。這個(gè)過程就叫做“預(yù)處理”(Preconditioning)。
預(yù)處理的本質(zhì)就是確保把NAND Flash的所有頁填滿(垃圾)數(shù)據(jù),讓SSD的所有寫操作都在相對低效率的情況下完成。這就如同人需要被逼到極度疲勞的狀態(tài)下,才能更清楚地了解其基本功,包括技術(shù)、耐力、意志力,甚至道德底線——這是特種部隊(duì)用地獄周進(jìn)行選拔的模式。也只有經(jīng)過這種嚴(yán)格的考核,數(shù)據(jù)中心SSD才能體現(xiàn)其遠(yuǎn)高于消費(fèi)類產(chǎn)品的溢價(jià)。
由于SSD在標(biāo)稱容量之外,還有一些保留的空間(OP),所以,為了確保所有頁被寫入,設(shè)計(jì)的寫入量一定要明顯大于標(biāo)稱容量,通常操作就是直接滿盤寫兩遍。而且這個(gè)寫入過程必須是連續(xù)的,否則SSD一旦獲得喘息之機(jī),開始專心進(jìn)行垃圾回收,那后面的情況就很難說了。多數(shù)快餐測試軟件不能進(jìn)行長時(shí)間的、穩(wěn)定地寫入,譬如消費(fèi)類SSD常跑的CrystalDiskMark,單項(xiàng)測試時(shí)長最多選擇60秒,循環(huán)10次,總時(shí)間不過10分鐘而已。
簡而言之,10分鐘一個(gè)項(xiàng)目,做穩(wěn)態(tài)階段的測試足夠,但做預(yù)處理是不夠的。最適合做預(yù)處理的就是FIO,這個(gè)以后介紹,我們先介紹IOmeter做預(yù)處理的方法。
通常順序讀寫測試使用128KB數(shù)據(jù)包,我們就建立一個(gè)128KB順序?qū)懙捻?xiàng)目。順序?qū)懸彩亲羁焯顫M的方法了。
Worker可以只用1個(gè),相當(dāng)于1個(gè)線程。數(shù)據(jù)選擇偽隨機(jī)。I/O深度固定在16或者32就夠了。
IOmeter做預(yù)處理不像FIO那么方便,后者可以設(shè)置相對于容量的循環(huán),前者只能通過運(yùn)行時(shí)間來間接控制寫入量。我們可以用容量去除以標(biāo)稱的順序?qū)懭胨俣?,這樣就可以預(yù)估寫滿一遍的時(shí)間。把這個(gè)時(shí)間乘2,那就是計(jì)劃的持續(xù)寫的時(shí)間。特別強(qiáng)調(diào)的是,基于標(biāo)稱速度的計(jì)算只對數(shù)據(jù)中心SSD有效,因?yàn)閿?shù)據(jù)中心SSD標(biāo)稱的通常是穩(wěn)態(tài)性能,是可信的。而消費(fèi)類SSD標(biāo)稱的寫入速度是極大值,出緩后的寫入性能必然暴跌——除非你知道會(huì)跌到什么程度,否則拿什么數(shù)值當(dāng)除數(shù)呢?這也側(cè)面說明了“可預(yù)期”的性能是多么重要。
如果我們對測試對象的順序?qū)懭胄阅軟]有自信,那就不設(shè)具體的時(shí)間,直接開始跑順序?qū)戫?xiàng)目,IOmeter會(huì)不間斷地運(yùn)行。在此期間,我們可以看到平均寫入速度。平均寫入速度會(huì)逐步下降,當(dāng)相對平穩(wěn)的時(shí)候,我們就可以根據(jù)這個(gè)速度去估算合理的總時(shí)間,超過這個(gè)時(shí)間后手動(dòng)結(jié)束測試,這樣初步的預(yù)處理就算完成了。
我們也可以通過CystalDiskInfo之類的軟件隨時(shí)判讀SSD的寫入量變化。如果增量達(dá)到2倍容量,就可以停止寫入。對于預(yù)設(shè)了時(shí)間的操作,如果寫入量達(dá)到1.5倍容量,也是可以接受的,否則就只能設(shè)一個(gè)更長的寫入時(shí)間,重新進(jìn)行預(yù)處理。
預(yù)處理完成后,我們可以先進(jìn)行簡單的測試,不做太復(fù)雜的設(shè)置,看看數(shù)據(jù)是否穩(wěn)定。初期可能會(huì)出現(xiàn)寫入IOPS比較高的情況,如果10分鐘左右就能進(jìn)入正常區(qū)間就是比較順利的。感覺比較穩(wěn)之后,就可以大刑伺候了。
結(jié)語
經(jīng)過三個(gè)階段的學(xué)習(xí),相信大家在Windows下已經(jīng)可以熟練使用IOmeter了。雖然IOmeter的設(shè)置界面比快餐軟件們復(fù)雜很多,但只要測試思路明確,設(shè)置起來還是很直觀的。建立了自己的配置文件之后,操作起來就更是輕車熟路,碾壓普通的數(shù)碼UP主那是小菜一碟啊。
對于面向數(shù)據(jù)中心、企業(yè)市場的經(jīng)銷商、集成商,熟悉IOmeter只是在專業(yè)領(lǐng)域入了門。大家還是要進(jìn)一步熟悉服務(wù)器主流操作系統(tǒng)Linux的實(shí)際操作,下一階段,我們就要把FIO用起來。