由于SSD的實(shí)際寫(xiě)入帶寬受到業(yè)務(wù)類型和內(nèi)部狀態(tài)的雙重影響,因此業(yè)界一般會(huì)標(biāo)出在典型工況下的寫(xiě)入帶寬。對(duì)于用戶來(lái)說(shuō),在系統(tǒng)設(shè)計(jì)時(shí),4kB隨機(jī)寫(xiě)入的穩(wěn)態(tài)性能通常被認(rèn)為是SSD的寫(xiě)入帶寬的下限。業(yè)界也有很多方法來(lái)測(cè)試該性能。為了使得測(cè)試結(jié)果有效,需要在測(cè)試前對(duì)待測(cè)SSD進(jìn)行清空(Purge)和預(yù)處理(Precondition),使得它進(jìn)入到穩(wěn)態(tài)。
是否可以直接全盤(pán)隨機(jī)寫(xiě)入進(jìn)行預(yù)處理?
在執(zhí)行4kB隨機(jī)寫(xiě)入測(cè)試之前,通常的預(yù)處理包括對(duì)于SSD全盤(pán)的一次順序?qū)懭牒蛶状坞S機(jī)寫(xiě)入。既然最終的測(cè)試是隨機(jī)性能,為什么在清空后一定需要先進(jìn)行一次順序?qū)懭朐龠M(jìn)行隨機(jī)寫(xiě)入而不是直接通過(guò)若干次隨機(jī)寫(xiě)入使得SSD進(jìn)入穩(wěn)態(tài)呢?這是由于SSD內(nèi)部的工作原理決定的:采用上述方法可以最快速度使得SSD進(jìn)入到隨機(jī)寫(xiě)的穩(wěn)態(tài)。實(shí)際上,SSD在清空后,內(nèi)部的Flash物理空間被全面釋放出來(lái),成為空閑資源。為了使SSD再次進(jìn)入穩(wěn)態(tài),需要盡可能向SSD內(nèi)部寫(xiě)入數(shù)據(jù),占據(jù)這些空閑的Flash塊。只有SSD內(nèi)部的空閑塊基本用完,才能觸發(fā)它內(nèi)部的垃圾回收(GC)機(jī)制并盡快使得性能下降到穩(wěn)態(tài)。
對(duì)于一個(gè)容量為1000GB的企業(yè)級(jí)SSD,存在約15%的超額配置(Over Provisioning),內(nèi)部的Flash物理空間總共約為1150GB。如果對(duì)全盤(pán)順序?qū)懭胍淮?,占用的物理空間就是1000GB。而如果采用4kB隨機(jī)寫(xiě)入的方式,對(duì)全盤(pán)隨機(jī)寫(xiě)入1000GB的數(shù)據(jù),由于兩次寫(xiě)入的位置可能存在重疊,因此雖然占用的物理空間仍然是1000GB,但是這些空間對(duì)應(yīng)的邏輯地址要小于1000GB。那么兩者之間的差異到底是多少呢?
為了寫(xiě)入1000GB的數(shù)據(jù),采用4kB的寫(xiě)入方式,待寫(xiě)入的空間包含n=1000GB/4kB=2.6×108個(gè)4kB的地址。而總計(jì)需要寫(xiě)入n次4kB數(shù)據(jù)。設(shè)隨機(jī)變量Mi=1代表地址i沒(méi)被寫(xiě)入任何數(shù)據(jù)這樣的事件,對(duì)于這n個(gè)地址中任意一個(gè),由于所有寫(xiě)入都是獨(dú)立并且均勻?qū)懭氲剿械刂房臻g,因此n次隨機(jī)寫(xiě)入全沒(méi)有命中指定地址的概率。

上面的式子利用了 并假設(shè)n足夠大,其中e=2.718是自然對(duì)數(shù)的底數(shù)。為了計(jì)算所有這樣的沒(méi)有任何寫(xiě)入命中地址空間的比例,借助大數(shù)定理

因此,全盤(pán)隨機(jī)寫(xiě)入一次導(dǎo)致從來(lái)沒(méi)有寫(xiě)入數(shù)據(jù)的地址所占據(jù)全盤(pán)的比例為e-1,也就是說(shuō)全盤(pán)隨機(jī)寫(xiě)入一次僅僅相當(dāng)于寫(xiě)入了1-e-1=63%的地址范圍,除此之外37%的地址范圍是不包含有效數(shù)據(jù)仍然處于空盤(pán)狀態(tài)。因此,采用這種方法,即便寫(xiě)入3次,也仍然有5%的地址范圍未被覆蓋,這相當(dāng)于憑空增加了5%的超額配置。因此采用全盤(pán)隨機(jī)寫(xiě)入的方法進(jìn)行預(yù)處理的效率是很低的。
有些磁盤(pán)性能測(cè)試工具可以選擇在隨機(jī)寫(xiě)入的時(shí)候指定是否允許寫(xiě)入重疊的地址范圍。例如fio在隨機(jī)寫(xiě)入的時(shí)候會(huì)記錄哪些地址曾經(jīng)寫(xiě)過(guò),它會(huì)避免已經(jīng)寫(xiě)入的地址重復(fù)寫(xiě)入,從而避免了上述填充的效率問(wèn)題。為了記錄已經(jīng)寫(xiě)入的地址范圍,它使用了系統(tǒng)中的一段內(nèi)存。如果系統(tǒng)內(nèi)存不足且不需要這個(gè)功能,可以通過(guò)norandommap開(kāi)關(guān)把這個(gè)功能關(guān)閉。
該如何加速SSD進(jìn)入穩(wěn)態(tài)?
而采用先進(jìn)行一次全盤(pán)順序?qū)?,再進(jìn)行數(shù)次隨機(jī)寫(xiě)的方案,則可以加速進(jìn)入穩(wěn)態(tài)。這是因?yàn)橄惹暗?000GB寫(xiě)入把所有的地址范圍全部占用了,在此基礎(chǔ)上的隨機(jī)寫(xiě)入則會(huì)占用多余的超額配置空間,使得SSD盡快啟動(dòng)垃圾回收并進(jìn)入到穩(wěn)態(tài)。此外,寫(xiě)入同樣的數(shù)據(jù)量,順序?qū)懭胍入S機(jī)寫(xiě)入快不少,可以提高預(yù)處理的效率。
在這個(gè)過(guò)程中,我們甚至可以觀察到SSD的寫(xiě)入帶寬從順序?qū)懙妮^高性能,先跌入到一個(gè)谷底而后再逐漸恢復(fù)到隨機(jī)寫(xiě)的穩(wěn)態(tài)性能。這個(gè)帶寬的谷底又是怎么回事?這僅僅是由于SSD垃圾回收采用了惰性策略導(dǎo)致不及時(shí)進(jìn)行垃圾回收所致嗎?

實(shí)際上,這個(gè)性能的低谷才是SSD寫(xiě)入性能的下界。這個(gè)谷底的產(chǎn)生是因?yàn)閷?xiě)壓力從順序轉(zhuǎn)換成隨機(jī),導(dǎo)致Flash物理塊的淘汰策略發(fā)生切換所致。由于之前的壓力為純順序?qū)懭?,在SSD內(nèi)部物理數(shù)據(jù)塊的淘汰采用了論資排輩的先寫(xiě)入先淘汰的方法,而一旦切換到隨機(jī)寫(xiě)入,原來(lái)這些“年齡”偏大的物理塊不再被繼續(xù)選擇出來(lái)淘汰,而新的寫(xiě)入方法尚未建立起穩(wěn)定的待回收的數(shù)據(jù)塊供應(yīng),因此這個(gè)時(shí)候所有等待回收的物理塊中有效數(shù)據(jù)全面偏多,造成性能的谷底。
小結(jié)
這就好比在2000年的時(shí)候,通信行業(yè)非?;鸨?,院校里通信和電子類專業(yè)非常熱門(mén)。但是等這些專業(yè)學(xué)生畢業(yè)的時(shí)候,通信行業(yè)的需求已經(jīng)有飽和的趨勢(shì),而計(jì)算機(jī)則成了新的熱門(mén),再往后是金融。如果處在選擇專業(yè)的高中畢業(yè)生只關(guān)注當(dāng)下的行業(yè)需求,缺少對(duì)未來(lái)的分析和判斷,那么往往選擇的專業(yè)在就業(yè)的時(shí)候就成為了明日黃花,只有有了預(yù)判能力,才能把握住時(shí)代的需求。對(duì)于一個(gè)有預(yù)判能力的SSD,就應(yīng)該根據(jù)用戶業(yè)務(wù)類型和內(nèi)部的數(shù)據(jù)塊中有效內(nèi)容的分布規(guī)律,提前和合理安排垃圾回收,才能避免這個(gè)寫(xiě)入性能的谷底,保持一個(gè)接近全盤(pán)隨機(jī)寫(xiě)的性能下限。
責(zé)任編輯:Ct
電子發(fā)燒友App














評(píng)論