前言
不知道你有沒有發(fā)現(xiàn),每當買回來一塊U盤,插入電腦發(fā)現(xiàn)永遠比所標的容量小。
到底是誰偷走了我的容量?
真兇就是預(yù)留空間(Over Provisioning),簡稱OP。
預(yù)留空間OP是什么
了解內(nèi)存開發(fā)的都會知道,一塊Flash中能用的空間并不會全部用來做用戶空間。
還有一部分空間會被用來做預(yù)留空間,用以做一些中間搬運的操作。
所謂用戶空間,就是內(nèi)存容量,也就是主機端能看到的存儲容量。 預(yù)留空間,用戶是看不到的,屬于FTL層,用來做一些中間寫操作。
我們假設(shè)一個Flash只有一個通道,那么肯定就只有一個Die,該Die有5個Block塊(Block0~Block4),每個Block中有9個小方塊,代表著9個page(后面說的Flash,也是用的這個假設(shè)容量)。
其中有多少用作預(yù)留空間是固件決定的事情,屬于FTL層。
我們假設(shè)固件設(shè)置這Flash的前4Block為用戶容量,那么另外1個Block就是用戶容量之外的預(yù)留空間。
?預(yù)留空間的種類
-
本征預(yù)留空間OP1
-
標稱預(yù)留空間OP2
本征預(yù)留空間
市場上SSD標稱的容量1K是按照1000來計算的,但是NAND閃存的容量中1K是按照1024計算的。
假設(shè)現(xiàn)在買到手一個1G的U盤,我們簡單列個式子計算一下:
市場SSD標稱: 1GB = 1000MB = 10001000KB = 10001000*1000Byte = 10^9Byte(1,000,000,000Byte)。
NAND閃存: 1GB = 1024MB = 10241024KB = 10241024*1024Byte =2^30Byte(1,073,741,824Byte)。
這兩個計算方式之間正好相差7.37%。所以說該U盤的本征預(yù)留空間就有7.37%。
標稱預(yù)留空間
標稱OP是由于固件需要提升性能要求而故意預(yù)留出來的空間,大小由FTL來決定。
這個部分預(yù)留空間主要用于垃圾回收GC,暫存有效數(shù)據(jù)。
標稱預(yù)留空間OP=(Flash總?cè)萘?用戶空間)/用戶空間。
預(yù)留空間的用途
-
更新數(shù)據(jù)
-
提供額外的空間暫存有效數(shù)據(jù),為垃圾回收做準備
更新數(shù)據(jù)
假設(shè)往不斷地往Flash中寫數(shù)據(jù),忽然某些邏輯地址的數(shù)據(jù)用戶不想要了,想要更新新的數(shù)據(jù)進入。
由于Flash的特性是不能覆蓋寫的,寫之前還必須進行整個Block的擦除。
為了避免擦除掉Block中有用的數(shù)據(jù),用戶更新數(shù)據(jù),固件只能另外找空間寫入新的數(shù)據(jù),那原來的地址中數(shù)據(jù)就沒用了,成立垃圾。
而這個另外找的空間,一般找的就是預(yù)留空間。
同時假設(shè)用戶要在Block0上更新新數(shù)據(jù),地址為Page0,數(shù)據(jù)量為1page時,固件會把新寫入的page數(shù)據(jù)寫到預(yù)留空間中。
這時候,預(yù)留空間Block4的page0就是Block0的page0的有效數(shù)據(jù)了。
而Block0中原來的page0的數(shù)據(jù)也就失效了,過期了,變成垃圾了。
隨著更新的數(shù)據(jù)越來越多,垃圾數(shù)據(jù)也就越來越多了。
提供額外的空間暫存有效數(shù)據(jù),為垃圾回收做準備
隨著數(shù)據(jù)不斷寫入,用戶空間被不斷填充,直到整個盤被寫滿了。
從主機端看也就是整個用戶空間被寫滿了,但是由于預(yù)留空間的存在,其實整個Flash并沒有被寫滿。
但是按著這么寫下去,總有一天用戶空間被寫滿,預(yù)留空間也會被寫滿。
這時候如果還想寫入更多呢?
沒辦法,只能將不想要的垃圾數(shù)據(jù)刪除掉,騰出空間來,也就是做垃圾回收。
實際中不會等到所有的內(nèi)存空間都寫滿了才做垃圾回收,而是在寫滿之前就在做回收了。
為了避免擦除Block的時候?qū)⑵渲械哪承┯行?shù)據(jù)被刪掉了,會先將Block上的有效數(shù)據(jù)讀出來,寫到一個新的Block上。
如下圖,假設(shè)Block 0的有效數(shù)據(jù)為A、B、C,Block 1的有效數(shù)據(jù)為D、E、F;
垃圾回收就是找一個新的Block 4,將Block 0和Block 1的有效數(shù)據(jù)搬移到Block 4上。
這樣Block 0和Block 0上就沒有任何有效數(shù)據(jù)了.
?Blcok 0和Block 1可以隨時擦除,變成兩個可用的Block塊。
?
?當然也有些廠商的FTL方案中,這個新的Block不一定從預(yù)留空間中找,也會在用戶空間中找。
?
?需要注意的是,在做完垃圾回收之后,需要把有效數(shù)據(jù)寫回新擦除的Block中,這些Block剩下的空間,就能繼續(xù)寫入新的數(shù)據(jù)了。
?
預(yù)留空間的好處
犧牲了那么多本該數(shù)據(jù)用戶空間的容量來做預(yù)留空間,自然是有好處的。
-
提高寫入性能
由于有預(yù)留空間的存在,寫入數(shù)據(jù)時并不需要經(jīng)常做垃圾回收,加快了寫入速度。
-
降低寫放大WA
寫放大的計算方法:WA = 寫入閃存的數(shù)據(jù)量/用戶寫入的數(shù)據(jù)量
OP越大,寫入Flash的有效數(shù)據(jù)就越少,WA自然就降低了。
-
增加閃存使用壽命
OP越大,可供的額外空間越多,就不用只盯著那幾個Block去做擦讀寫,減少了某些Block頻繁的擦讀寫次數(shù)和數(shù)據(jù)搬遷,增加使用壽命。
-
數(shù)據(jù)保護主要提供ECC之外的數(shù)據(jù)保護
這個幾乎很少用到,這里就不討論這個了。
寫在最后
我記得曾經(jīng)有人說過,思想和行動的區(qū)別在于:
想談戀愛卻高呼自由可貴,想進大廠卻不想工作,想當大牛卻不想學(xué)習(xí),每個人都知道明天必須披荊斬棘的活下去,卻依舊渾渾噩噩的度過今天。
不用去懷疑自己的能力,你只需要一份靠譜的學(xué)習(xí)資料,一個學(xué)習(xí)的deadline以及一個沒學(xué)完就打爆你狗頭的人,很快你就會被自己的才華和能力所驚艷。
我收集了一些linux的資料,算法小抄和計算機基礎(chǔ)的資料。
以下資料僅供個人學(xué)習(xí)使用,歡迎大家一起學(xué)習(xí)探討。
文章來源:http://www.zghlxwxcb.cn/news/detail-666180.html
希望以上內(nèi)容能幫助到你,祝各位生活愉快。文章來源地址http://www.zghlxwxcb.cn/news/detail-666180.html
?到了這里,關(guān)于誰偷走了我的存儲容量?預(yù)留空間OP參上!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!