當我們在使用固態硬盤時,會發現你使用的容量并不是SSD標稱的容量,這個時候我們一定有所懷疑,經過不懈努力,警察蜀黍已經找到“真兇”,就是OP,全稱Over-Provisioning,中文名字叫做“預留空間”。
(1)由于標稱容量與NAND閃存計算差異造成的本征預留空間OP1。
市場上SSD標稱的容量是按照千進制(1000)來計算的,但是NAND閃存的容量是按照1024計算的。我們簡單列個式子計算一下:
市場SSD標稱 1GB(GigaByte)= 1000MB= 1000*1000KB= 1000*1000*1000Byte= 10^9Byte (1,000,000,000Byte).NAND閃存 1GB(GibiByte)= 1024MB= 1024*1024KB =1024*1024*1024Byte =2^30Byte (1,073,741,824Byte).
這兩個計算方式之間正好相差7.37%。所以說SSD本征的預留空間就有7.37%。
(2)SSD由于性能要求而預留空間OP2,這部分也是標稱OP。
這個部分預留空間主要用于垃圾回收GC,存儲SSD主控的固件(Firmware),備用數據塊(Spare Blocks)等。
標稱預留空間OP=(SSD物理總容量-用戶數據空間)/用戶數據空間
從上面這個表格中我們看到標稱預留空間(Marketed OP)為0%的時候,其實這時的內部仍然有7%的本征預留空間。預留空間犧牲了用戶數據空間,那TA要是再沒有什么好處,用戶就真的要崩潰咯。其實預留空間OP的好處有很多:
(1)提高寫入性能由于有預留空間的存在,寫入數據時并不需要經常做垃圾回收,加快了寫入速度。(2)降低寫放大(WA, Write Amplification)。寫放大WA這個名詞最早是Intel和SiliconSystems在2008年提出。寫放大的計算方法:WA=最終寫入閃存的數據量/Host寫入的數據量舉個簡單的例子:當Host要寫入4KB數據時,最壞的狀況就是一個數據塊中沒有可用空間,但是呢,這個數據塊中有一些無效數據內容能夠被擦除,這時主控的做法就是,把這個數據塊中全部的數據搬到緩存,然后擦除這個塊,在緩存里update整個數據塊的內容,更新完成后,把最新的數據搬回數據塊,整個操作造成的寫放大: Host只需寫4K數據,卻帶來了整個數據塊(假設1024KB)的寫操作,寫放大就等于1024/4=256倍。
(3)增加閃存使用壽命減少數據的搬遷,就是減少NAND閃存的讀寫次數,增加使用壽命。
(4)數據保護主要提供ECC之外的數據保護,比如R.A.I.S.E.(Redundant Array of Independent Silicon Elements)。