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