如何加速SSD進入穩態?

摘要:對於一個有預判能力的SSD,應該根據用戶業務類型和內部的數據塊中有效內容的分佈規律,提前和合理安排垃圾回收,才能避免這個寫入性能的谷底,保持一個接近全盤隨機寫的性能下限。

 

由於SSD的實際寫入帶寬受到業務類型和內部狀態的雙重影響,因此業界一般會標出在典型工況下的寫入帶寬。對於用戶來說,在系統設計時,4kB隨機寫入的穩態性能通常被認爲是SSD的寫入帶寬的下限。業界也有很多方法來測試該性能。爲了使得測試結果有效,需要在測試前對待測SSD進行清空(Purge)和預處理(Precondition),使得它進入到穩態。

 

是否可以直接全盤隨機寫入進行預處理?

在執行4kB隨機寫入測試之前,通常的預處理包括對於SSD全盤的一次順序寫入和幾次隨機寫入。既然最終的測試是隨機性能,爲什麼在清空後一定需要先進行一次順序寫入再進行隨機寫入而不是直接通過若干次隨機寫入使得SSD進入穩態呢?這是由於SSD內部的工作原理決定的:採用上述方法可以最快速度使得SSD進入到隨機寫的穩態。實際上,SSD在清空後,內部的Flash物理空間被全面釋放出來,成爲空閒資源。爲了使SSD再次進入穩態,需要儘可能向SSD內部寫入數據,佔據這些空閒的Flash塊。只有SSD內部的空閒塊基本用完,才能觸發它內部的垃圾回收(GC)機制並儘快使得性能下降到穩態。

對於一個容量爲1000GB的企業級SSD,存在約15%的超額配置(Over Provisioning),內部的Flash物理空間總共約爲1150GB。如果對全盤順序寫入一次,佔用的物理空間就是1000GB。而如果採用4kB隨機寫入的方式,對全盤隨機寫入1000GB的數據,由於兩次寫入的位置可能存在重疊,因此雖然佔用的物理空間仍然是1000GB,但是這些空間對應的邏輯地址要小於1000GB。那麼兩者之間的差異到底是多少呢?

爲了寫入1000GB的數據,採用4kB的寫入方式,待寫入的空間包含n=1000GB/4kB=2.6\ast 10^{8}個4kB的地址。而總計需要寫入n次4kB數據。設隨機變量Mi=1代表地址i沒被寫入任何數據這樣的事件,對於這n個地址中任意一個,由於所有寫入都是獨立並且均勻寫入到所有地址空間,因此n次隨機寫入全沒有命中指定地址的概率

上面的式子利用了   並假設n足夠大,其中e=2.718是自然對數的底數。爲了計算所有這樣的沒有任何寫入命中地址空間的比例,藉助大數定理

 因此,全盤隨機寫入一次導致從來沒有寫入數據的地址所佔據全盤的比例爲e^{-1},也就是說全盤隨機寫入一次僅僅相當於寫入了1-e^{-1}=63%的地址範圍,除此之外37%的地址範圍是不包含有效數據仍然處於空盤狀態。因此,採用這種方法,即便寫入3次,也仍然有5%的地址範圍未被覆蓋,這相當於憑空增加了5%的超額配置。因此採用全盤隨機寫入的方法進行預處理的效率是很低的。

有些磁盤性能測試工具可以選擇在隨機寫入的時候指定是否允許寫入重疊的地址範圍。例如fio在隨機寫入的時候會記錄哪些地址曾經寫過,它會避免已經寫入的地址重複寫入,從而避免了上述填充的效率問題。爲了記錄已經寫入的地址範圍,它使用了系統中的一段內存。如果系統內存不足且不需要這個功能,可以通過norandommap開關把這個功能關閉。

 

該如何加速SSD進入穩態?

而採用先進行一次全盤順序寫,再進行數次隨機寫的方案,則可以加速進入穩態。這是因爲先前的1000GB寫入把所有的地址範圍全部佔用了,在此基礎上的隨機寫入則會佔用多餘的超額配置空間,使得SSD儘快啓動垃圾回收並進入到穩態。此外,寫入同樣的數據量,順序寫入要比隨機寫入快不少,可以提高預處理的效率。

在這個過程中,我們甚至可以觀察到SSD的寫入帶寬從順序寫的較高性能,先跌入到一個谷底而後再逐漸恢復到隨機寫的穩態性能。這個帶寬的谷底又是怎麼回事?這僅僅是由於SSD垃圾回收採用了惰性策略導致不及時進行垃圾回收所致嗎?

實際上,這個性能的低谷纔是SSD寫入性能的下界。這個谷底的產生是因爲寫壓力從順序轉換成隨機,導致Flash物理塊的淘汰策略發生切換所致。由於之前的壓力爲純順序寫入,在SSD內部物理數據塊的淘汰採用了論資排輩的先寫入先淘汰的方法,而一旦切換到隨機寫入,原來這些“年齡”偏大的物理塊不再被繼續選擇出來淘汰,而新的寫入方法尚未建立起穩定的待回收的數據塊供應,因此這個時候所有等待回收的物理塊中有效數據全面偏多,造成性能的谷底。

 

小結

這就好比在2000年的時候,通信行業非常火爆,院校裏通信和電子類專業非常熱門。但是等這些專業學生畢業的時候,通信行業的需求已經有飽和的趨勢,而計算機則成了新的熱門,再往後是金融。如果處在選擇專業的高中畢業生只關注當下的行業需求,缺少對未來的分析和判斷,那麼往往選擇的專業在就業的時候就成爲了明日黃花,只有有了預判能力,才能把握住時代的需求。對於一個有預判能力的SSD,就應該根據用戶業務類型和內部的數據塊中有效內容的分佈規律,提前和合理安排垃圾回收,才能避免這個寫入性能的谷底,保持一個接近全盤隨機寫的性能下限。

 

本文作者:路向峯   |   Memblaze 聯合創始人 & CTO

更多原創技術內容,請關注 Memblaze 微信公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章