由于GC的存在,就有一個問題,用戶要寫入一定的數(shù)據(jù),SSD為了騰出空間寫這些數(shù)據(jù),需要額外的做一些數(shù)據(jù)的搬移,也就是額外的寫,最后導(dǎo)致的后果往往就是SSD往閃存中寫入的數(shù)據(jù)量比實際用戶寫入SSD的數(shù)據(jù)量多。因此,我們SSD中有個重要參數(shù),就是寫放大(WA, Write Amplification):
對空盤來說(未觸發(fā)GC),寫放大一般為1,即用戶寫入多少數(shù)據(jù),SSD寫入閃存也是多少數(shù)據(jù)量(這里忽略SSD內(nèi)部數(shù)據(jù)的寫,如映射表的寫入)。在SandForce控制器出來之前,寫放大最小值為1。但是由于SandForce控制器內(nèi)部具有實時數(shù)據(jù)壓縮模塊,它能對用戶寫入的數(shù)據(jù)進行實時壓縮,然后再把它們寫入到閃存,因此WA可以做到小于1。舉個例子,用戶寫入8KB數(shù)據(jù),經(jīng)壓縮后,數(shù)據(jù)變?yōu)?KB,如果這個時候還沒有垃圾回收,那么寫放大就只有0.5。
一說到SandForce的主控,過去好多年了,我對她的愛還是沒有減弱,女神一般的存在呀。。。
來看看GC觸發(fā)后,WA是怎么算的。以前面GC為例,我們挑選每個Die上的Block 0做垃圾回收:
一共36個方塊,其中有12個有效數(shù)據(jù)塊,我們做完垃圾回收后,需把這12個有效數(shù)據(jù)塊寫回:
后面還可以寫入24個方塊的用戶數(shù)據(jù)。因此,為了寫這24個方塊的用戶數(shù)據(jù),SSD實際寫了12個方塊的原有效數(shù)據(jù),再加上該24個方塊的用戶數(shù)據(jù),總共寫入36個方塊數(shù)據(jù),按照寫放大定義:WA= 36/24 = 1.5 。
寫放大越大,意味著額外寫入閃存的數(shù)據(jù)越多,一方面磨損閃存,減少SSD壽命,另一方面,寫入這些額外數(shù)據(jù)時會占用底層閃存帶寬,影響SSD性能。因此,SSD設(shè)計的一個目標不是沒有蛀牙,而是讓W(xué)A盡量小。減小寫放大,可以使用前面提到的壓縮辦法(主控決定),順序?qū)懸部梢詼p小寫放大(垃圾集中,但順序?qū)懣捎霾豢汕螅Q于用戶workload),還有就是增大OP (這個可控)。
增大OP怎么就能減小寫放大? 先定義OP比例=(閃存空間-用戶空間)/用戶空間。
還是以前面SSD空間為例,SSD容量是180個小方塊,當(dāng)OP是36個小方塊時,整個SSD閃存空間為216個小方塊,OP比例是36/180= 20%。那么180個小方塊的用戶數(shù)據(jù)平均分攤到216個小方塊時,每個小方塊的平均有效數(shù)據(jù)為180/216 = 0.83,一個閃存塊上的有效數(shù)據(jù)為0.83*9 = 7.5,也就是一個閃存塊上面平均有7.5個小綠塊和1.5個小紅塊。為了寫1.5個用戶數(shù)據(jù)方塊,需要寫9個方塊的數(shù)據(jù)(原有7.5個有效數(shù)據(jù),加1.5個用戶數(shù)據(jù)),寫放大是9/1.5 = 6。
如果整個SSD閃存空間不變,還是216個小方塊,調(diào)整OP比例至72個小方塊 (犧牲用戶空間,OP比例50%),因此,SSD容量就變成144個小方塊。144個小方塊的用戶數(shù)據(jù)平均分攤到216個小方塊時,每個小方塊的平均有效數(shù)據(jù)為144/216 = 0.67,一個閃存塊上的有效數(shù)據(jù)為0.67*9 = 6,也就是一個閃存塊上面平均有6個小綠塊和3個小紅塊。為了寫3個用戶數(shù)據(jù)方塊,需要寫9個方塊的數(shù)據(jù)(原有6個有效數(shù)據(jù),加3個用戶數(shù)據(jù)),寫放大是9/3 = 3。
從中看出,OP越大,寫放大越小。很好理解,OP越大,每個閃存塊有效數(shù)據(jù)越少,垃圾越多,因此需要重寫更少的數(shù)據(jù),因此寫放大越小。同時,由于GC需要重寫的數(shù)據(jù)越少,SSD滿盤寫性能也越好。
當(dāng)然,上面說的都是最壞情況(垃圾數(shù)據(jù)平均分攤到每個閃存塊上)。現(xiàn)實是,垃圾數(shù)據(jù)更多時候并不是平均分配到每個閃存塊上去,有些塊上的垃圾多,有些塊上的垃圾少,實際GC挑選閃存塊,是挑垃圾多的,因此,實際寫放大是小于前面的計算值的。
OP大小和寫放大以及SSD耐寫度的關(guān)系見圖:
圖1-1 OP大小對寫放大和耐寫度的影響
總結(jié)一下:
WA越小越好,因為越小意味著對閃存損耗越小,可以給閃存延年益壽,從而支持更多的用戶數(shù)據(jù)寫入量;OP越大越好,OP越大,意味著寫放大越小,意味著SSD寫性能越好。
影響寫放大的因素主要有:
OP: 我們已經(jīng)看到,OP越大,WA越小;
用戶寫入的數(shù)據(jù)Pattern:如前面看到的,如果用戶都是順序?qū)懭耄珿C做的量就少(極好情況下是整個閃存塊都是無效數(shù)據(jù),只需擦除無需數(shù)據(jù)搬移),寫放大小;
GC策略:在挑選源閃存塊的時候,如果不是挑選有效數(shù)據(jù)最少(垃圾數(shù)據(jù)越多)的塊作為源閃存塊,就會增加寫放大;另外,控制后臺GC產(chǎn)生空閑閃存塊的數(shù)量,也能減小寫放大;
磨損平衡:為平衡每個閃存塊的擦除次數(shù),需要數(shù)據(jù)的搬移;
Read disturb和Data Retention handling:數(shù)據(jù)搬移增加寫放大;
主控:帶壓縮和不帶壓縮的控制器肯定會影響寫放大;
Trim:有沒有Trim,對寫放大影響很大,后面Trim章節(jié)會介紹。
-
閃存
+關(guān)注
關(guān)注
16文章
1836瀏覽量
115762 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7246瀏覽量
91192 -
SSD
+關(guān)注
關(guān)注
21文章
2953瀏覽量
119185
原文標題:SSD寫放大
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
SSD是什么意思,什么是SSD
SSD1289寫寄存器函數(shù)
ADC噪聲系數(shù)參數(shù)在數(shù)據(jù)轉(zhuǎn)換器中有哪些應(yīng)用?
求大神解釋下在ssd1306 oled中怎么寫數(shù)據(jù)啊,看了一天的數(shù)據(jù)手冊也只會寫命令不會寫數(shù)據(jù)啊
SSD1306芯片介紹
怎么使用SSD才能避免越寫越慢?

讀、寫、擦除是SSD對NAND的三大基本操作
對SSD性能同樣重要的參數(shù)有哪些

如何衡量SSD的壽命水平?關(guān)于SSD的可用年數(shù)
如何衡量SSD的壽命水平?SSD硬盤多久才能寫死?
如何寫一個簡單的裝飾器

評論