作者:-1????發(fā)布時間:2021-07-23 17:26 ????瀏覽次數(shù) :
Block中的數(shù)據變老或者無效,是指沒有任何映射關系指向它們,用戶不會訪問到這些FLASH空間,它們被新的映射關系所取代。比如有一個Host Page A,開始它存儲在FLASH空間的X,映射關系為A->X。后來,HOST重寫了該Host Page,由于FLASH不能覆蓋寫,SSD內部必須尋找一個沒有寫過的位置寫入新的數(shù)據,假設為Y,這個時候新的映射關系建立:A->Y,之前的映射關系解除,位置X上的數(shù)據變老失效,我們把這些數(shù)據叫垃圾數(shù)據。
隨著HOST的持續(xù)寫入,F(xiàn)LASH存儲空間慢慢變小,直到耗盡。如果不及時清除這些垃圾數(shù)據,HOST就無法寫入。SSD內部都有垃圾回收機制,它的基本原理是把幾個Block中的有效數(shù)據(非垃圾數(shù)據,上圖中的綠色小方塊表示的)集中搬到一個新的Block上面去,然后再把這幾個Block擦除掉,這樣就產生新的可用Block了。
一塊剛買的SSD,你會發(fā)現(xiàn)寫入速度很快,那是因為一開始總能找到可用的Block來進行寫入。但是,隨著你對SSD的使用,你會發(fā)現(xiàn)它會變慢。原因就在于SSD寫滿后,當你需要寫入新的數(shù)據,往往需要做上述的垃圾回收:把若干個Block上面的有效數(shù)據搬移到某個Block,然后擦掉原先的Block,然后再把你的Host數(shù)據寫入。這比最初單純的找個可用的Block來寫耗時多了,所以速度變慢也就可以理解了。
還是以上圖為例。假設HOST要寫入4KB數(shù)據 (H) ,由于當前可用Block過少,SSD開始做垃圾回收。從上圖可以看出,對Block x來說,它需要把Page A,B,C的數(shù)據讀出并寫入到Block z,然后Block x擦除用于HOST數(shù)據寫入。從Host角度,它只寫了4KB數(shù)據,但從SSD內部來說,它實際寫入了4個Page(Page A, B, C寫入Block z,4KB數(shù)據H寫入到Block x)。