相關申請的交叉引用
本申請要求于2016年3月28日提交的申請?zhí)枮?5/082,990的美國專利申請的權益,其全部內容通過引用并入本文。
本公開的示例性實施例涉及一種存儲器系統(tǒng)及其操作方法。
背景技術:
計算機環(huán)境范式已經(jīng)轉變?yōu)槟軌螂S時隨地使用的普適計算系統(tǒng)。由此,諸如移動電話、數(shù)碼相機以及筆記本電腦的便攜式電子裝置的使用一直快速地增加。這些便攜式電子裝置通常使用具有存儲器裝置即數(shù)據(jù)存儲裝置的存儲器系統(tǒng)。數(shù)據(jù)存儲裝置用作便攜式電子裝置的主存儲器裝置或者輔助存儲器裝置。
由于使用存儲器裝置的數(shù)據(jù)存儲裝置不具有活動部件,所以它們提供優(yōu)良的穩(wěn)定性、持久性、高信息存取速度以及低功耗。具有這樣的優(yōu)點的數(shù)據(jù)存儲裝置的示例包括通用串行總線(usb)存儲器裝置、具有各種接口的存儲卡以及固態(tài)驅動器(ssd)。
技術實現(xiàn)要素:
本發(fā)明的方面包括存儲器系統(tǒng)。該系統(tǒng)可以包括:存儲器裝置,其包括多個封閉超級塊和開放超級塊;邏輯塊尋址(lba)表,其包括多個區(qū)段;以及控制器,其適用于:在斷電后,確定lba表的最多最近保存區(qū)段、lba表的最多最近保存區(qū)段之前保存的先前區(qū)段以及l(fā)ba表的最少最近保存區(qū)段,讀取開放超級塊并且更新lba表中從最多最近保存區(qū)段至最少最近保存區(qū)段的條目,讀取多個超級塊中最新的封閉超級塊并且更新lba表中從最多最近保存區(qū)段之前保存的先前區(qū)段至至少最近保存區(qū)段的條目,以及讀取最舊的超級塊并且更新最少最近保存區(qū)段中的lba表中的條目。
本發(fā)明的進一步的方面包括方法。該方法可以包括:在斷電后,確定邏輯塊尋址(lba)表的最多最近保存區(qū)段、lba表的最多最近保存區(qū)段之前保存的先前區(qū)段以及l(fā)ba表的最少最近保存區(qū)段;讀取開放超級塊并且更新lba表中從最多最近保存區(qū)段至最少最近保存區(qū)段的條目;讀取多個封閉超級塊中最新的封閉超級塊,并且更新lba表中從最多最近保存區(qū)段之前保存的先前區(qū)段至最少最近保存區(qū)段的條目;以及讀取最舊的超級塊,并且更新最少最近保存區(qū)段中的lba表中的條目。
附圖說明
圖1是示意地示出根據(jù)本發(fā)明的實施例的存儲器系統(tǒng)的框圖。
圖2是示出根據(jù)本發(fā)明的實施例的存儲器系統(tǒng)的框圖。
圖3是示出根據(jù)本發(fā)明的實施例的存儲器裝置的存儲塊的電路圖。
圖4是示出根據(jù)本發(fā)明的實施例的存儲器控制器的控制單元的簡圖。
圖5是根據(jù)本發(fā)明的方面的存儲器系統(tǒng)的簡圖。
圖6是根據(jù)本發(fā)明的方面的用于重建lba表的方法的步驟的流程圖。
圖7是示出根據(jù)本發(fā)明的方面的lba表和存儲器陣列的簡圖。
圖8是根據(jù)本發(fā)明的方面的使用位圖重建lba表的方法的步驟的流程圖。
圖9是根據(jù)本發(fā)明的方面的位圖的簡圖。
圖10是根據(jù)本發(fā)明的方面的lba表和位圖緩沖區(qū)的簡圖。
具體實施方式
下面將參考附圖更加詳細地描述各種實施例。然而,本發(fā)明可以不同的形式呈現(xiàn)且不應被解釋為限于在本文中提出的實施例。而是,這些實施例被提供使得本公開將是徹底且完整的,并且將向本領域技術人員充分地傳達本發(fā)明的范圍。在整個公開中,相似的參考數(shù)字在本發(fā)明的各種附圖和實施例中是指相似部件。
本發(fā)明能夠以多種方式實現(xiàn),包括作為工藝、設備、系統(tǒng)、物質的組成物、在計算機可讀存儲介質上呈現(xiàn)的計算機程序產品和/或處理器,諸如適用于執(zhí)行存儲在聯(lián)接至處理器的存儲器上和/或由聯(lián)接至處理器的存儲器提供的指令的處理器。在本說明書中,本發(fā)明可以采取的這些實施例或任意其它形式可以稱作技術。一般地,公開的工藝的步驟的順序可以在本發(fā)明的范圍內變動。除非另有說明,否則描述為適用于執(zhí)行任務的諸如處理器或者存儲器的組件可以被實施為暫時地適用于在給定時間執(zhí)行任務的通用組件或被制造成執(zhí)行該任務的特定組件。如在本文中使用的,術語“處理器”是指適用于處理諸如計算機程序指令的數(shù)據(jù)的一個以上裝置、電路和/或處理核心。
下面連同說明本發(fā)明的原理的附圖一起提供本發(fā)明的一個以上實施例的詳細說明。結合這些實施例來描述本發(fā)明,但本發(fā)明不限于任意實施例。本發(fā)明的范圍僅由權利要求限定,并且本發(fā)明包括多個變型例、修改例和等同例。在下列說明中,陳述了許多具體細節(jié),以提供本發(fā)明的透徹理解。以示例的目的提供這些細節(jié),并且可以根據(jù)權利要求而在沒有這些具體細節(jié)中的一部分或全部的情況下實施本發(fā)明。為了清楚的目的,不再詳細描述與本發(fā)明相關的技術領域中已知的技術材料,以使本發(fā)明不會被不必要地模糊。
圖1是示意地示出根據(jù)本發(fā)明的實施例的存儲器系統(tǒng)10的框圖。
參考圖1,存儲器系統(tǒng)10可以包括存儲器控制器100和半導體存儲器裝置200。
存儲器控制器100可以控制半導體存儲器裝置200的全部操作。
半導體存儲器裝置200可以在存儲器控制器100的控制下執(zhí)行一個以上擦除、編程、和讀取操作。半導體存儲器裝置200可以通過輸入/輸出線接收命令cmd、地址addr和數(shù)據(jù)data。半導體存儲器裝置200可以通過電源線接收電力pwr并且通過控制線接收控制信號ctrl??刂菩盘柨梢园ㄖ噶铈i存啟用(cle)信號、地址鎖存啟用(ale)信號、芯片啟用(ce)信號、寫入啟用(we)信號、讀取啟用(re)信號等等。
存儲器控制器100和半導體存儲器裝置200可以集成在單個半導體裝置中。例如,存儲器控制器100和半導體存儲器裝置200可以集成在諸如固態(tài)驅動器(ssd)的單個半導體裝置中。固態(tài)驅動器可以包括其中存儲數(shù)據(jù)的存儲裝置。當半導體存儲器系統(tǒng)10用在ssd中時,聯(lián)接至存儲器系統(tǒng)10的主機(未示出)的操作速度可以顯著地改善。
存儲器控制器100和半導體存儲器裝置200可以集成在諸如存儲卡的單個半導體裝置中。例如,存儲器控制器100和半導體存儲器裝置200可以集成在單個半導體裝置中以配置諸如以下的存儲卡:個人計算機存儲卡國際聯(lián)合會(pcmcia)的pc卡、標準閃存(cf)卡、智能媒體(sm)卡、記憶棒、多媒體卡(mmc)、減小尺寸的多媒體卡(rs-mmc)、mmc的微型版本(微型mmc)、安全數(shù)字(sd)卡、微型安全數(shù)字(迷你sd)卡、微型安全數(shù)字(微型sd)卡、安全數(shù)字高容量(sdhc)和通用閃速存儲器(ufs)。
作為另一個示例,存儲器系統(tǒng)10可以設置為諸如以下的包括電子裝置的各種元件中的一種:計算機、超便攜移動pc(umpc)、工作站、上網(wǎng)本電腦、個人數(shù)字助理(pda)、便攜式計算機、網(wǎng)絡平板pc、無線電話、移動電話、智能電話、電子書閱讀器、便攜式多媒體播放器(pmp)、便攜式游戲設備、導航設備、黑匣子、數(shù)碼相機、數(shù)字多媒體廣播(dmb)播放器、3-維電視、智能電視、數(shù)字音頻記錄器、數(shù)字音頻播放器、數(shù)字圖像記錄器、數(shù)字圖像播放器、數(shù)字視頻記錄器、數(shù)字視頻播放器、數(shù)據(jù)中心的存儲裝置、能夠在無線環(huán)境中接收和傳輸信息的裝置、家庭網(wǎng)絡的電子裝置中的一種、計算機網(wǎng)絡的電子裝置中的一種、遠程信息處理網(wǎng)絡的電子裝置中的一種、射頻識別(rfid)裝置或計算系統(tǒng)的元件裝置。
圖2是示出根據(jù)本發(fā)明的實施例的存儲器系統(tǒng)的詳細框圖。例如,圖2的存儲器系統(tǒng)可以描述圖1中所示的存儲器系統(tǒng)10。
參考圖2,存儲器系統(tǒng)10可以包括存儲器控制器100和半導體存儲器裝置200。存儲器系統(tǒng)10可以響應于來自主機裝置的請求而操作,并且具體地,存儲將被主機裝置訪問的數(shù)據(jù)。
主機裝置可以利用各種電子裝置中的任一種來實現(xiàn)。在一些實施例中,主機裝置可以包括電子裝置,諸如臺式電腦、工作站、三維(3d)電視、智能電視、數(shù)字音頻記錄器、數(shù)字音頻播放器、數(shù)字圖像記錄器、數(shù)字圖像播放器、數(shù)字視頻記錄器和數(shù)字視頻播放器。在一些實施例中,主機裝置可以包括便攜式電子裝置,諸如移動電話、智能電話、電子書、mp3播放器、便攜式多媒體播放器(pmp)和便攜式游戲機。
存儲器裝置200可以存儲將被主機裝置訪問的數(shù)據(jù)。
存儲器裝置200可以由諸如動態(tài)隨機存取存儲器(dram)和靜態(tài)隨機存取存儲器(sram)的易失性存儲器裝置或諸如只讀存儲器(rom)、掩膜rom(mrom)、可編程rom(prom)、可擦除可編程rom(eprom)、電可擦除可編程rom(eeprom)、鐵電隨機存取存儲器(fram)、相變ram(pram)、磁阻ram(mram)和電阻式ram(rram)的非易失性存儲器裝置來實現(xiàn)。
控制器100可以控制數(shù)據(jù)在存儲器裝置200中的存儲。例如,控制器100可以響應于來自主機裝置的請求而控制存儲器裝置200。控制器100可以向主機裝置提供從存儲器裝置200讀取的數(shù)據(jù),并且將主機裝置提供的數(shù)據(jù)存儲至存儲器裝置200中。
控制器100可以包括通過總線160聯(lián)接的存儲單元110、控制單元120、錯誤糾正碼(ecc)單元130、主機接口140和存儲器接口150。
存儲單元110可以用作存儲器系統(tǒng)10和控制器100的工作存儲器,并且存儲用于驅動存儲器系統(tǒng)10和控制器100的數(shù)據(jù)。當控制器100控制存儲器裝置200的操作時,存儲單元110可以存儲控制器100和存儲器裝置200用于諸如讀取、寫入、編程和擦除操作的數(shù)據(jù)。
存儲單元110可以利用易失性存儲器來實現(xiàn)。存儲單元110可以利用靜態(tài)隨機存取存儲器(sram)或動態(tài)隨機存取存儲器(dram)來實現(xiàn)。如上所說,存儲單元110可在存儲器裝置200中存儲被主機裝置用于讀取和寫入操作的數(shù)據(jù)。為了存儲數(shù)據(jù),存儲單元110可包括程序存儲器、數(shù)據(jù)存儲器、寫入緩沖器、讀取緩沖器、映射緩沖器等。
控制單元120可以控制存儲器系統(tǒng)10的一般操作,并且可以響應于來自主機裝置的寫入請求或讀取請求控制存儲器裝置200的寫入操作或讀取操作。控制單元120可以驅動稱作閃存轉換層(ftl)的固件以控制存儲器系統(tǒng)10的一般操作。例如,ftl可以執(zhí)行諸如邏輯到物理(l2p)映射、損耗平衡、碎片收集和壞塊處理的操作。l2p映射被稱為邏輯塊尋址(lba)。
ecc單元130可以檢測和糾正讀取操作期間從存儲器裝置200讀取的數(shù)據(jù)中的錯誤。當錯誤位的數(shù)量大于或等于可糾正錯誤位的閾值數(shù)量時,ecc單元130可以不糾正錯誤位,并且可以輸出表示糾正錯誤位失敗的錯誤糾正失敗信號。
在一些實施例中,ecc單元130可以基于諸如以下的編碼調制執(zhí)行錯誤糾正操作:低密度奇偶檢查(ldpc)碼、博斯-查德胡里-霍昆格姆(bch)碼、turbo碼、turbo乘積碼(tpc)、里德-所羅門(rs)碼、卷積碼、遞歸系統(tǒng)碼(rsc)、網(wǎng)格編碼調制(tcm)、分組編碼調制(bcm)等等。ecc單元130可以包括用于錯誤糾正操作的所有的電路、系統(tǒng)或裝置。
主機接口140可通過諸如以下的各種接口協(xié)議中的一個以上與主機裝置通信:通用串行總線(usb)、多媒體卡(mmc)、外設部件互連高速(pci-e)、小型計算機系統(tǒng)接口(scsi)、串列scsi(sas)、串行高級技術附件(sata)、并行高級技術附件(pata)、增強型小型磁盤接口(esdi)和集成驅動電路(ide)。
存儲器接口150可提供控制器100和存儲器裝置200之間的接口以允許控制器100響應于來自主機裝置的請求控制存儲器裝置200。存儲器接口150可以在cpu120的控制下生成用于存儲器裝置200的控制信號并處理數(shù)據(jù)。當存儲器裝置200為諸如nand閃速存儲器的閃速存儲器時,存儲器接口150可以在cpu120的控制下生成用于存儲器的控制信號并處理數(shù)據(jù)。
存儲器裝置200可以包括存儲單元陣列210、控制電路220、電壓生成電路230、行解碼器240、頁面緩沖器250、列解碼器260和輸入/輸出電路270。存儲單元陣列210可以包括多個存儲塊211,并且可以在其中存儲數(shù)據(jù)。電壓生成電路230、行解碼器240、頁面緩沖器250、列解碼器260和輸入/輸出電路270形成存儲單元陣列210的外圍電路。外圍電路可以執(zhí)行存儲單元陣列210的編程、讀取或者擦除操作??刂齐娐?20可以控制外圍電路。
電壓生成電路230可以生成各種電平的操作電壓。例如,在擦除操作中,電壓生成電路230可以生成諸如擦除電壓和過電壓的具有各種電平的操作電壓。
行解碼器240可以連接到電壓生成電路230和多個存儲塊211。行解碼器240可以響應于控制電路220生成的行地址radd選擇多個存儲塊211中的至少一個存儲塊,并且將電壓生成電路230供應的操作電壓傳輸至多個存儲塊211中選定的存儲塊。
頁面緩沖器250通過位線bl(未示出)連接到存儲單元陣列210。頁面緩沖器250可以響應于控制電路220生成的頁面緩沖器控制信號利用正電壓預先充電位線bl、在編程和讀取操作中向選定的存儲塊傳輸數(shù)據(jù)/從選定的存儲塊接收數(shù)據(jù)或者暫時地存儲傳輸?shù)臄?shù)據(jù)。
列解碼器260可向頁面緩沖器250傳輸數(shù)據(jù)/從頁面緩沖器250接收數(shù)據(jù)或者向輸出電路270傳輸數(shù)據(jù)/從輸入電路270接收數(shù)據(jù)。
輸入/輸出電路270可以通過輸入/輸出電路270向控制電路220傳輸從外部裝置(例如,存儲器控制器100)傳輸?shù)拿詈偷刂?、向列解碼器260傳輸來自外部裝置的數(shù)據(jù)或者向外部裝置輸出來自列解碼器260的數(shù)據(jù)。
控制電路220可以響應于命令和地址控制外圍電路。
圖3是示出根據(jù)本發(fā)明的實施例的半導體存儲器裝置的存儲塊的電路圖。例如,圖3的存儲塊可以是圖2所示的存儲單元陣列200的存儲塊211。
參考圖3,存儲塊211可以包括分別地聯(lián)接至位線bl0-blm-1的多個單元字符串221。每個列的單元字符串可以包括一個以上漏極選擇晶體管dst和一個以上源極選擇晶體管sst。多個存儲單元或者存儲單元晶體管可以串聯(lián)在選擇晶體管dst和sst之間。存儲單元mc0-mcn-1中的每個可以由在每個單元中存儲多位數(shù)據(jù)信息的多層單元(mlc)形成。單元字符串221可以分別地電聯(lián)接至對應的位線bl0-blm-1。
在一些實施例中,存儲塊211可以包括nand型閃速存儲單元。然而,存儲塊211不限于nand閃速存儲器,而是可以包括nor型閃速存儲器、其中兩種以上類型的存儲單元組合的混合閃速存儲器和其中控制器內置在存儲器芯片中的1-nand閃速存儲器。
圖4是示出根據(jù)本發(fā)明的實施例的存儲器控制器的控制單元的簡圖。例如,圖4的控制單元可以描述圖2中的控制器100的控制單元120。
參考圖4,控制器100的控制單元120可以通過接口(例如,圖2的存儲器接口150)聯(lián)接至包括多個超級塊的存儲器裝置200。
控制單元120可以包括邏輯塊尋址(lba)表410、信息存儲單元420、重建單元430和碎片收集(gc)單元440。lba表410可以是從邏輯塊地址(lba)到為閃存轉換層(ftl)的一部分的物理地址的映射表。重建單元430可以被配置為基于spor期間的信息重建lba表410。gc單元440可以在spor期間執(zhí)行任何需要的碎片收集操作。應注意,圖4僅示出控制單元120包括用于spor相關操作的元件。
不同于硬盤,諸如閃速存儲器的存儲器裝置的“寫入前擦除”限制要求系統(tǒng)軟件的稱為閃存轉換層(ftl)的特定層模擬用于反向兼容性的塊裝置接口。文件系統(tǒng)和應用可以像使用硬盤一樣地使用閃速存儲器。稱作邏輯塊尋址(lba)的邏輯到物理(l2p)映射系統(tǒng)是ftl的部分。
由于ftl或者lba的表(以下稱為lba表)可以存儲在為易失性存儲器的動態(tài)隨機存取存儲器(dram)中,當發(fā)生突然斷電時,lba表將丟失,導致數(shù)據(jù)丟失。為防止數(shù)據(jù)丟失,當通電時,固件必須能夠重建最新的表。頻繁地向存儲器裝置(例如,nand閃速存儲器)寫入lba表將導致顯著的寫入性能退化。為了限制性能退化,如何執(zhí)行快速的突然斷電恢復(spor)是重要且困難的任務。
本文公開的實施例和示例改善存儲器系統(tǒng)(例如固態(tài)驅動器(ssd))的性能,并且尤其改善了總的spor時間(例如,減少突然斷電后存儲器系統(tǒng)電力恢復和主機能夠開始向存儲器系統(tǒng)寫入之間的時間量)。
spor過程期間,執(zhí)行邏輯塊地址(lba)表的重建和任何需要的碎片收集(gc)兩者。本文公開的實施例包括減少在通電時需要從存儲器裝置(例如,nand閃速存儲器)讀取的超級塊的數(shù)量并促進碎片收集性能的方法、系統(tǒng)、過程和裝置。
接下來參考圖5,示出系統(tǒng)50的簡圖。系統(tǒng)50包括dram500和存儲器502。裝置500包括lba表510、dram位圖存儲器550和斷電電容器570。在本文描述的示例中,裝置500可以容納在易失性存儲器(例如,dram)上,使得在突然斷電時,lba表510要求重建。dram位圖存儲器550可以構造為用于存儲對應于存儲在存儲器502上的每個超級塊的位圖。斷電電容器570被構造為存儲足夠的電力,使得在斷電時,有充分的時間向存儲器502的存儲器位圖存儲器560轉移dram位圖存儲器的內容(和/或其它的操作)。
在其它組件中,存儲器502包括:當封閉時每個超級塊可以包括元頁面mp的多個超級塊、用于主機寫入的開放塊530、用于碎片收集(gc)的開放塊540等。存儲器502可以是實現(xiàn)為ssd的nand存儲器,或者本領域技術人員從本文的描述中將理解的其它類型的適合的存儲器。存儲器還包括被配置成存儲對應于存儲器502的超級塊的位圖的存儲器位圖存儲器560,并且位圖存儲器560可以被配置成接收存儲在dram位圖存儲器550中的位圖。
在突然斷電時,lba表510上的數(shù)據(jù)將丟失,并且需要重建。以前的重建程序或者spor過程需要耗時的步驟,諸如需要硬件(例如,存儲器502)通過從之前的簽名掃描讀取每個有效塊而訪問以讀取每個超級塊并識別封閉塊和開放塊。可能還需要有效塊的冒泡排序,這也是耗時的。
同樣地,之前的方法涉及以循環(huán)方式周期性地保存lba表的區(qū)段和當前“臟”超級塊的列表。(臟超級塊是包含至少一個lba的超級塊,其中,lba表中l(wèi)ba的對應的條目不是最新的,即臟的)。在突然斷電后重建期間,保存的lba表重載到dram中,并且包括任意開放超級塊的臟超級塊的元頁面如在正常重建中那樣重演。
從重建速度的角度,此方案已經(jīng)非常有效率。將保存的lba表重載到dram中是不能避免的固定成本,因為該步驟甚至在驅動器的正常通電(例如,請求的驅動器電源休眠之后通電)時也是需要的。因此,縮短重建時間的一個方法是減少掃描臟超級塊的元頁面和更新lba表中的對應條目所花費的時間量。事實上,后者是主要的瓶頸,因為lba表中的條目的更新是公知的緩慢的dram中的隨機訪問操作。
為了減少掃描和更新時間,一種簡單的方法是具有較少數(shù)量的臟超級塊。然而,較少的臟超級塊意味著在運行時需要更頻繁地保存lba表的區(qū)段,這會影響驅動性能。此外,可能需要更多的系統(tǒng)塊來存儲保存的lba表,這意味著較少的空用戶數(shù)據(jù)塊可用于預留空間,因此提高了寫入放大率并最終導致驅動器的tbd(總寫入字節(jié))下降。因此,減少需要掃描的臟超級塊的數(shù)量需要付出代價,并且最佳數(shù)量的選擇應當平衡重建時間、驅動性能和驅動耐力。
因此,本文公開的方法、系統(tǒng)、過程和裝置尋求改善突然斷電后的恢復時間。
圖6是重建lba表的步驟的流程圖60。圖7是lba表700和存儲器陣列702的簡圖。在本文(通過圖6至圖13)所示的示例中,出于描述的目的使用了128個區(qū)段的lba表。同樣地,下列參數(shù)也用于示例的目的:
每驅動器的超級塊數(shù)量=4096
每超級塊的模片(die)數(shù)量=32
每超級塊的物理塊數(shù)量=64(雙平面)
每物理塊的頁面的數(shù)量=256
頁面大?。?6kb
邏輯頁面大小=4kb
每頁面的邏輯頁面的數(shù)量=4
這些參數(shù)和大小是示例性的而不是排外性的。本領域技術人員從本文的公開中將想到其它適合實施本發(fā)明的參數(shù)、大小等。
參考圖6和圖7,在塊600中,至少確定最多最近保存區(qū)段、最多最近保存區(qū)段之前保存的先前區(qū)段以及斷電起lba表700的最少最近保存區(qū)段。
在圖7中,lba表700遵循循環(huán)方案,雖然這用于說明而不意在將本發(fā)明限制于此方案。換言之,當最后區(qū)段被保存時,隨后使用第一區(qū)段。在以128個區(qū)段示出的示例中,區(qū)段128是“最后”區(qū)段,并且區(qū)段1是“第一區(qū)段”。示出斷電704發(fā)生在區(qū)段3被保存之后,區(qū)段4被保存之前。因此,在示例中,區(qū)段3將是最多最近保存區(qū)段、區(qū)段2將是最多最近保存區(qū)段之前保存的先前區(qū)段,并且區(qū)段4將是lba表700的最少最近保存區(qū)段。
每個區(qū)段可以對應于超級塊,諸如存儲器陣列702中的超級塊。每當超級塊封閉時,lba表700的一個區(qū)段可以被保存至存儲器502。因此,在示例中,在任意給定的時間,存在128個臟超級塊。n用于表示最新的封閉超級塊。
在步驟602中,讀取開放超級塊,并且從最多最近保存區(qū)段通過最少最近保存區(qū)段更新lba表中的對應于開放超級塊的條目。因此,參考存儲器陣列702,讀取開放超級塊,并且從區(qū)段3(最多最近保存區(qū)段)通過區(qū)段4(最少最近保存區(qū)段)更新lba表中的條目。換言之,更新區(qū)段3,然后更新區(qū)段2,然后更新區(qū)段1,然后更新區(qū)段128,以此類推,直到更新區(qū)段4。
在步驟604中,讀取最新的封閉超級塊,并且從最多最近保存區(qū)段之前保存的先前區(qū)段通過最少最近保存區(qū)段更新lba表中對應于最新的封閉超級塊的條目。因此,參考圖7,將讀取封閉超級塊n,并且更新從lba表700的區(qū)段2(最多最近保存區(qū)段即區(qū)段3之前保存的先前區(qū)段)通過lba表700的區(qū)段4(最少最近保存區(qū)段)的條目。
在步驟606中,讀取最舊的封閉超級塊,并且更新lba表中對應于最少最近保存區(qū)段中的最舊的封閉超級塊的條目。因此,參考圖7,讀取封閉超級塊n-126,并且更新區(qū)段4(lba表700的最少最近保存區(qū)段)。
圖6描述的方法不限于闡明的步驟。例如,可以對每個封閉超級塊進行相似的步驟。這些方法可以包括諸如下列的步驟:
對于超級塊n,需要更新除了lba表700的區(qū)段3中的條目以外的所有對應的條目。
對于超級塊n-1,需要更新除了lba表700的區(qū)段2和區(qū)段3中的條目以外的所有對應的條目。
對于超級塊n-2,需要更新除了lba表700的區(qū)段1、區(qū)段2和區(qū)段3中的條目以外的所有對應的條目。
對于超級塊n-3,需要更新除了lba表700的區(qū)段1、區(qū)段2、區(qū)段3和區(qū)段128中的條目以外的所有對應的條目。
對于超級塊n-4,需要更新除了lba表700的區(qū)段1、區(qū)段2、區(qū)段3、區(qū)段127和區(qū)段128中的條目以外的所有對應的條目。
……
對于超級塊n-124,除了lba表700的區(qū)段4、區(qū)段5和區(qū)段6中的條目以外的所有對應的條目不需要更新。
對于超級塊n-125,除了lba表700的區(qū)段4和區(qū)段5中的條目以外的所有對應的條目不需要更新。
對于超級塊n-126,除了lba表700的區(qū)段4中的條目以外的所有對應的條目不需要更新。
本質上,此方法利用屬于lba表700的在臟超級塊已經(jīng)封閉之后保存的區(qū)段中的任意對應的條目包含該臟超級塊中對應的邏輯頁面的物理地址。因此,不需要更新這樣的條目。(然而,注意,這不意味著該條目是清潔的,因為lba可能在隨后的臟超級塊中再次重寫)。
對于純隨機寫入工作量,每個臟超級塊中的lba可以在整個lba范圍內均勻分布。因此,對于上述斷電情形下的1tb驅動器,需要更新的平均條目數(shù)量=64x256x4x(127+126+…+1)/128=4161536。這等于減少了50%的更新。事實上,這樣的顯著減少適用于任意驅動器容量和任意數(shù)量的臟超級塊。(如果在開放超級塊中存在有效的邏輯頁面,則該減少量將稍小于50%)。
另一方面,如果工作量不是純隨機的,每個突然斷電保存的更新總量將為隨機數(shù)量。然而,多次突然斷電個例平均保存的更新量仍然為50%,因為突然斷電在lba表700的128個區(qū)段中的任一個被保存之后發(fā)生的可能性是相等的。換言之,保存量顯示出平均值50%和非零方差的統(tǒng)計分布。對于純隨機工作量,平均值為50%和零方差。因此,每個突然斷電個例的保存量也是50%。依賴工作量的方差能夠由模擬確定。
為了實施此方法,需要的唯一額外信息是了解突然斷電發(fā)生之前l(fā)ba表700的哪個區(qū)段被最后保存至存儲器。區(qū)段數(shù)量然后能夠在斷電電容器570設置的時間跨度內保存至存儲器中的系統(tǒng)區(qū)域。
接下來參考圖8、圖9和圖10,示出使用位圖重建lba表的方法、系統(tǒng)、過程和裝置。圖8是使用位圖重建lba表的步驟的流程圖80。圖9是示例位圖的簡圖。圖10是lba表1000和位圖緩沖區(qū)1002的簡圖,位圖緩沖區(qū)1002存儲為環(huán)形緩沖區(qū)。
在步驟800中,生成并存儲每個臟超級塊的位圖。位圖可以存儲在例如dram位圖存儲器550、存儲器位圖存儲器560等中。在步驟802中,每當lba表被更新時都更新適當?shù)奈粓D。
每個位圖900可以指示對應的臟超級塊中的邏輯頁面是否有效。因此,每當在正常寫入或者修正操作期間更新lba表1000時,也更新適當?shù)奈粓D。例如,位圖900示出臟超級塊的8kb位圖。每位的值與對應于該位的邏輯頁面是否有效一致。
在步驟804中,當發(fā)生突然斷電時,位圖被保存至非易失性存儲器。例如,位圖可以在dram位圖存儲器550上保存并更新,但是,當突然斷電時,位圖在斷電電容器570允許的時間內從dram位圖存儲器550轉移(例如,保存)至存儲器位圖存儲器560。
因此,在步驟806中,位圖可以載入dram,并且在步驟808中,掃描每個臟超級塊的位圖和元頁面,同時確定對應于有效的邏輯地址的lba,以更新這些lba。
利用增加的位圖,現(xiàn)在可以排除對lba表1000不必要的更新。重建期間,lba表1000和位圖可以首先載入dram中。然后,一起掃描每個臟超級塊的位圖和元頁面,并且僅考慮更新對應于有效的邏輯頁面的lba。這確保了最多更新lba表1000中的對應于未修正lba的條目一次,而那些對應于修正的lba的條目不再被更新。與之相反,在沒有位圖的情況下,未修正lba的條目能夠被更新多次,而關于修正的lba的信息在突然斷電后丟失。本質上,相比于沒有位圖的情形,提供位圖時,在臟超級塊中存在的無效的邏輯頁面越多則更新減少得越多。
對于給定數(shù)量的臟超級塊,臟超級塊中無效的邏輯頁面的數(shù)量是預留空間和工作量類型的函數(shù)。預留空間量越多,存在于臟超級塊中的無效的邏輯頁面越多。類似地,隨著對應于熱數(shù)據(jù)的lba更頻繁地在臟超級塊中覆寫,工作量中存在的熱數(shù)據(jù)越多,則臟超級塊中存在的無效的邏輯頁面越多。例如,如果在128個臟超級塊中存在5%的無效的邏輯頁面,則相比于原始重演機制,更新的整體減少將為52.5%。
位圖的添加提供了另一個非常重要的優(yōu)點:元頁面重演的順序可以改變。由于僅考慮更新對應于有效的邏輯頁面的lba,因此不可能利用舊邏輯頁面的物理地址覆寫lba表的條目,即使元頁面以隨機順序重演。事實證明,最好的重演順序是以邏輯頁面寫入的完全相反的順序重演元頁面,即,首先掃描開放超級塊中的元數(shù)據(jù),隨后掃描最多最近封閉臟超級塊中的元頁面,然后掃描第二近封閉臟超級塊中的元頁面等等。繼續(xù)上面的示例,如果首先完成開放超級塊的更新,將保證lba表1000的區(qū)段3是清潔的,因為根據(jù)在前面部分描述的趨勢該區(qū)段不再需要被更新。相似地,一旦最近(最新)封閉臟超級塊的更新完成,lba表700、1000的區(qū)段2被保證是清潔的,因為該區(qū)段不再需要被更新。對剩余的臟超級塊重復同樣的模式。本質上,在每個臟超級塊的更新完成之后,lba表700、1000的額外區(qū)段變成清潔的。
由于lba表700、1000隨著更新進行而變得部分清潔,現(xiàn)在在更新已經(jīng)完全地完成之前主機讀取和寫入命令能被“即時(on-the-fly)”接受。這對縮短開機等待時間的用戶體驗是重要的。更具體地,在臟超級塊的子集更新完成之后,控制器能夠開始接受主機讀取和寫入命令。如果主機讀取或寫入命令指向lba表700、1000的清潔區(qū)段,則命令將立即執(zhí)行。否則,執(zhí)行將延遲直到lba表的該區(qū)段變?yōu)榍鍧嵉?。因此,要處理的臟超級塊的初始數(shù)量應當基于主機讀取或寫入命令指向lba表的臟區(qū)段時將遇到的最大延遲來選擇。該數(shù)量將是小的,因為當元頁面以相反順序重演時,超級塊需要的平均更新數(shù)量減少。
在一個示例中,每個位圖需要8kb的dram,由于每個超級塊存在64x256x4=65536個邏輯頁面并且每個邏輯頁面使用1位。因此,如果有128個位圖,則需要1mb的dram。1mb的dram能夠被實施為環(huán)形緩沖區(qū)1002,因為存儲器空間在完成1圈保存之后可被重新使用。另外,1mb的數(shù)據(jù)精確占用1條系統(tǒng)區(qū)域超級塊,并且需要1.4ms來編碼。對于f16mlcnand,編程時間不超過3ms。因此,發(fā)生突然斷電之后保存至nand所需的總時間最好在超級電容器570提供的擴展電源的20ms內。當發(fā)生突然斷電時,開放超級塊的元頁面也能夠保存至系統(tǒng)區(qū)域。這避免了重建期間每個邏輯頁面的元數(shù)據(jù)的掃描并且進一步縮短了重建時間。
雖然為了清楚理解的目的而詳細描述了前面的實施例,但本發(fā)明不限于這些提供的細節(jié)。存在很多實施本發(fā)明的替換方式。公開的實施例是說明性的而不是限制性。