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

SSD是什么意思,什么是SSD
SSD1289寫(xiě)寄存器函數(shù)
ADC噪聲系數(shù)參數(shù)在數(shù)據(jù)轉(zhuǎn)換器中有哪些應(yīng)用?
求大神解釋下在ssd1306 oled中怎么寫(xiě)數(shù)據(jù)啊,看了一天的數(shù)據(jù)手冊(cè)也只會(huì)寫(xiě)命令不會(huì)寫(xiě)數(shù)據(jù)啊
SSD1306芯片介紹
如何在射頻設(shè)計(jì)中有效地使用S參數(shù)
怎么使用SSD才能避免越寫(xiě)越慢?

為什么程序員都寫(xiě)博客
讀、寫(xiě)、擦除是SSD對(duì)NAND的三大基本操作
對(duì)SSD性能同樣重要的參數(shù)有哪些

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

評(píng)論