Nand Introduction

1. NAND flash characteristic

 

  • Erase before Write
    Block Unit Erase
    Page Unit Write
  • ECC error
    1bit / 512 bytes (SLC)
    4bit or 8bit/ 512 bytes (MLC)
  • Bad block
    Initial Bad block + Runtime Bad block ratio < 2% (SLC) 2.5% (MLC)
    Depends on NAND flash spec.
  • NOP
    3(SLC small block)
    8(SLC large block small density < 2GByte)
    4(SLC large block large density >= 2GByte)
    1(MLC)
  • P/E Cycle
    100K ( SLC )
    10K/5K/3k ( MLC )
    Depends on NAND flash spec.
  • Page Size
    512+16 bytes / 2048+64 byte / 4096+128 byte
  • Block Size
    SLC:32 x 512 (16k) / 64 x 2048 (128k) / 64 x 4096  (256k)
    MLC:128 x 2048  (256k) / 128 x 4096   (512k)
  • Memory Size
    1 Gb, 2 Gb, 4 Gb, 8 Gb, 16 Gb, 32 Gb, 64 Gb…

2. NAND-flash Management Issues

 

Address Translation

NAND Flash Memory的同1個page不能做重覆寫入的行為。再者,在寫入1個sector資料之前,必須要有抹除1個Block的資料才能做寫入的動作,但抹除1個Block的動作需要耗費相當多的時間,此舉造成了NAND Flash效能下降的最大原因。為了改善效能,最有效的方法就是減少Erase的次數,因此有了Mapping Table。

Mapping Table的管理分為Block level、Sector level以及改良的Hybrid level。

Block level的address mapping是指1個Logical Block對應到1個Physical Block,它的mapping table相對於sector-level的mapping table來的小,能夠節省mapping table所占RAM的使用量。但當Logical Block的個數少於Physical Block個數時,會發生Logical Block時常被overwrite的狀況,選定要overwrite的Logical block和它mapping的Physical Block都要將資料更新到新的Physical Block上,且做erase-before-write的動作,而造成效能的下降,此外轉換單位大,每次寫入的單位也大,因此會帶來額外的資料寫入成本。

而Sector-Level的address mapping是1個Logical Sector可以對應到任1個Physical Block裡的Sector,雖然這種mapping的方式彈性佳,可以減少因轉換單位大而帶來額外的資料寫入成本,但是mapping table的Size過大,例如1GB的Flash,1個sector的大小為512byte的話,RAM就要維護二百萬筆的sector資訊。

 

Figure 1. 資料區塊,紀錄區塊,以及備用區塊的使用。

(a)完整的資料區塊(b)資料依序寫入紀錄區塊的可寫頁中(c)區塊鏈的Merge

改良的Hybrid level,擷取Block level和Sector level的優點,採用Block level的方式,再加上有限數量的Block做為Sector level的mapping,除了讓mapping table的size限制住不至於龐大,也減少了erase-before-write的動作。Hybrid level中,將Physical Block取名為資料區塊(Data Block),因為資料不能直接更新於資料區塊裡,我們找了一段可寫的Block來紀錄更新的資料,並將它取名為紀錄區塊(Log Block)。經過一段時間的寫入,一個LBA(Logical Block Address)對應會對應一個資料區塊,而此資料區塊會跟著數個紀錄區塊,整個形成一個區塊鏈(Block Chain),如圖1(b)所示。

 

 

 

Figure 2.Hybrid Level mapping table 

Hybrid Level在做write的時候,在寫第1、2筆資料時(sector 4,5),會由block level的mapping table找出Data Block 10,因為對應sector裡內容是空的,因此就直接寫入Data Block 10裡。而寫第3筆資料時(sector 4),由Block level的mapping table找到Data Block 10,但裡面已有寫入的資料,故改由sector level的mapping table找尋空的Log Block,寫入第3筆資料。在寫第4筆資料時(sector 4),因為sector level的mapping table裡已有mapped的Log Block,故將第4筆資料依序寫入對映的Log Block裡。

而在讀取時,會先由Sector level的mapping table裡,找出最新的資料,而Log Block裡沒有的資料,則由Block Level mapping table裡找到的Data Block裡。

Garbage Collection

主要是用於將不必要存在且浪費空間的Block做回收,來增加可用的Block數。當需要新的Log Block時,會從已經使用的Log Block裡選取符合回收條件的Block來做Garbage Collection,如free sector低於threshold值。

被選定要回收的Log Block,會和它的Data Block做merge的動作,意即選取新的Data Block,將Log Block中sector資料copy到此新的Data Block中,再將原先Data Block中剩餘的sector資料複製到此新的Data Block中。

更新block-level table對應到新的Data Block,並將sector-level table裡將剛才回收的Log Block移除。原先的Log Block和Data Block做抹除的動作,即完成Garbage Collection了。

例如Figure 2中,要將Log block(pbn=20)做回收時,會將此log block中最新的資料(sector 4)複製到新的Data Block中(假設為pbn=12),再將它的Data block(pbn=10)中,其餘的資料(sector 5)複製到新的Data Block(pbn=12)中。並將block level table中對應到pbn=20的資料改為對應到pbn=12,即新的data block,再將sector level table中pbn=20(回收的log block)這筆資料刪除。最後將pbn=20,pbn=10舊的block做抹除的動作即可。

Merge在一種特殊情況下,可以做switch的動作,例如像Figure 2中,Log Block(pbn=30)裡是照sector的順序寫入,因此它的Data Block(pbn=11)裡的資料都是不需要使用的舊資料,要做Garbage Collection,只需要將Log Block和Data Block對調即可,即block-level table裡對應到pbn=11這筆資料改為對應到pbn=30,而sector-level table裡對應到pbn=30這筆刪除,然後將舊的Data Block(pbn=11)抹除就達到Garbage Collection了。

Figure 3.Garbage Collection Operation

當在做Garbage Collection時,會希望用最少的cleaning work來獲得最多的free space,因此會選擇最多garbage的segment來做回收。另外,將資料的型態分為靜態和動態的資料。其中,Read-only data屬於靜態資料,即一旦創造就不會去修改它,而動態資料是會被修改的。動態資料依其資料修改頻率分為cold data(較少修改的資料)和hot data(修改頻繁的資料)。

Wear-Leveling

當在使用Flash時,常會對某個檔案做修改的動作,當此時檔案變動而要用到更多的Page且Flash中仍有空的Block時,會將空的Block配置給此檔案來使用,若Flash中已經沒有空的Block時,則會執行Garbage Collection來清出空的Block以供使用。在挑選空的Block或執行Garbage Collection清出空的Block時,可能會造成部分的Block時常被挑選,這些Block可能因為被過度使用而造成損毀。為了避免這種情況發生,會使用Wear-Leveling,讓大部分Block的存取次數平均,而不會常常挑選到某些固定的Block上,造成Block的過度存取而損毀。

再者,NAND Flash抹除和寫入的reliability有使用的次數(SLC/100K次,MLC/5k次),使用wear-leveling可以紀錄並平均每個block被使用的次數。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值