ITGeeker技術奇客發佈的開源Word文字替換小工具更新到v1.0.1.0版本啦,現已支持Office Word文檔頁眉和頁腳的替換。 同時ITGeeker技術奇客修複了v1.0.0.0版本因替換數字引起的in ‘ requires string as left operand, not int ...
大家好,我是五月。
前言
不知道你有沒有發現,每當買回來一塊U盤,插入電腦發現永遠比所標的容量小。
到底是誰偷走了我的容量?
真凶就是預留空間(Over Provisioning),簡稱OP。
預留空間OP是什麼
瞭解記憶體開發的都會知道,一塊Flash中能用的空間並不會全部用來做用戶空間。
還有一部分空間會被用來做預留空間,用以做一些中間搬運的操作。
所謂用戶空間,就是記憶體容量,也就是主機端能看到的存儲容量。 預留空間,用戶是看不到的,屬於FTL層,用來做一些中間寫操作。
我們假設一個Flash只有一個通道,那麼肯定就只有一個Die,該Die有5個Block塊(Block0~Block4),每個Block中有9個小方塊,代表著9個page(後面說的Flash,也是用的這個假設容量)。
其中有多少用作預留空間是固件決定的事情,屬於FTL層。
我們假設固件設置這Flash的前4Block為用戶容量,那麼另外1個Block就是用戶容量之外的預留空間。
預留空間的種類
-
本徵預留空間OP1
-
標稱預留空間OP2
本徵預留空間
市場上SSD標稱的容量1K是按照1000來計算的,但是NAND快閃記憶體的容量中1K是按照1024計算的。
假設現在買到手一個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盤的本徵預留空間就有7.37%。
標稱預留空間
標稱OP是由於固件需要提升性能要求而故意預留出來的空間,大小由FTL來決定。
這個部分預留空間主要用於垃圾回收GC,暫存有效數據。
標稱預留空間OP=(Flash總容量-用戶空間)/用戶空間。
預留空間的用途
-
更新數據
-
提供額外的空間暫存有效數據,為垃圾回收做準備
更新數據
假設往不斷地往Flash中寫數據,忽然某些邏輯地址的數據用戶不想要了,想要更新新的數據進入。
由於Flash的特性是不能覆蓋寫的,寫之前還必須進行整個Block的擦除。
為了避免擦除掉Block中有用的數據,用戶更新數據,固件只能另外找空間寫入新的數據,那原來的地址中數據就沒用了,成立垃圾。
而這個另外找的空間,一般找的就是預留空間。
同時假設用戶要在Block0上更新新數據,地址為Page0,數據量為1page時,固件會把新寫入的page數據寫到預留空間中。
這時候,預留空間Block4的page0就是Block0的page0的有效數據了。
而Block0中原來的page0的數據也就失效了,過期了,變成垃圾了。
隨著更新的數據越來越多,垃圾數據也就越來越多了。
提供額外的空間暫存有效數據,為垃圾回收做準備
隨著數據不斷寫入,用戶空間被不斷填充,直到整個盤被寫滿了。
從主機端看也就是整個用戶空間被寫滿了,但是由於預留空間的存在,其實整個Flash並沒有被寫滿。
但是按著這麼寫下去,總有一天用戶空間被寫滿,預留空間也會被寫滿。
這時候如果還想寫入更多呢?
沒辦法,只能將不想要的垃圾數據刪除掉,騰出空間來,也就是做垃圾回收。
實際中不會等到所有的記憶體空間都寫滿了才做垃圾回收,而是在寫滿之前就在做回收了。
為了避免擦除Block的時候將其中的某些有效數據被刪掉了,會先將Block上的有效數據讀出來,寫到一個新的Block上。
如下圖,假設Block 0的有效數據為A、B、C,Block 1的有效數據為D、E、F;
垃圾回收就是找一個新的Block 4,將Block 0和Block 1的有效數據搬移到Block 4上。
這樣Block 0和Block 0上就沒有任何有效數據了.
Blcok 0和Block 1可以隨時擦除,變成兩個可用的Block塊。
當然也有些廠商的FTL方案中,這個新的Block不一定從預留空間中找,也會在用戶空間中找。
需要註意的是,在做完垃圾回收之後,需要把有效數據寫回新擦除的Block中,這些Block剩下的空間,就能繼續寫入新的數據了。
預留空間的好處
犧牲了那麼多本該數據用戶空間的容量來做預留空間,自然是有好處的。
-
提高寫入性能
由於有預留空間的存在,寫入數據時並不需要經常做垃圾回收,加快了寫入速度。
-
降低寫放大WA
寫放大的計算方法:WA = 寫入快閃記憶體的數據量/用戶寫入的數據量
OP越大,寫入Flash的有效數據就越少,WA自然就降低了。
-
增加快閃記憶體使用壽命
OP越大,可供的額外空間越多,就不用只盯著那幾個Block去做擦讀寫,減少了某些Block頻繁的擦讀寫次數和數據搬遷,增加使用壽命。
-
數據保護主要提供ECC之外的數據保護
這個幾乎很少用到,這裡就不討論這個了。
寫在最後
我記得曾經有人說過,思想和行動的區別在於:
想談戀愛卻高呼自由可貴,想進大廠卻不想工作,想當大牛卻不想學習,每個人都知道明天必須披荊斬棘的活下去,卻依舊渾渾噩噩的度過今天。
不用去懷疑自己的能力,你只需要一份靠譜的學習資料,一個學習的deadline以及一個沒學完就打爆你狗頭的人,很快你就會被自己的才華和能力所驚艷。
我收集了一些linux的資料,演算法小抄和電腦基礎的資料。
以下資料僅供個人學習使用,歡迎大家一起學習探討。
希望以上內容能幫助到你,祝各位生活愉快。