專(zhuān)利名稱(chēng):存儲(chǔ)器塊的先占式垃圾回收的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)一般涉及存儲(chǔ)器器件。更具體地,本申請(qǐng)涉及在可重新編程非易失性半導(dǎo)體閃存中的塊的垃圾回收(garbage collection)。
背景技術(shù):
已經(jīng)廣泛采用諸如閃存的非易失性存儲(chǔ)器系統(tǒng)來(lái)用在消費(fèi)產(chǎn)品中??梢园l(fā)現(xiàn)不同形式的閃存,例如可以在主機(jī)設(shè)備之間攜帶的可攜式存儲(chǔ)卡的形式或者作為嵌入在主機(jī)設(shè)備中的固態(tài)盤(pán)(SSD)的形式。當(dāng)向傳統(tǒng)的閃存系統(tǒng)寫(xiě)數(shù)據(jù)時(shí),主機(jī)通常向存儲(chǔ)器系統(tǒng)的邏輯地址空間內(nèi)的地址寫(xiě)數(shù)據(jù)并從其讀取數(shù)據(jù)。然后存儲(chǔ)器系統(tǒng)經(jīng)常在邏輯地址空間和存儲(chǔ)器的物理塊或元塊(metablock)之間映射數(shù)據(jù),其中數(shù)據(jù)被存儲(chǔ)在與邏輯地址空間中的范圍對(duì)應(yīng)的固定邏輯組中。通常,每個(gè)固定的邏輯組被存儲(chǔ)在存儲(chǔ)器系統(tǒng)的單獨(dú)物理塊中。存儲(chǔ)器系統(tǒng)追蹤邏輯地址空間如何被映射到物理存儲(chǔ)器中,但是主機(jī)對(duì)此并不知曉。主機(jī)追蹤在邏輯地址空間內(nèi)的其數(shù)據(jù)文件的地址,但是存儲(chǔ)器系統(tǒng)通常在不了解此映射的情況下進(jìn)行操作。在邏輯地址空間中操作的存儲(chǔ)器系統(tǒng)的缺點(diǎn)是碎片性(fragmentation)。由主機(jī)文件系統(tǒng)寫(xiě)入的數(shù)據(jù)可能通常在邏輯地址空間中被分片,其中許多固定的邏輯組僅部分地用新數(shù)據(jù)更新。由于主機(jī)文件系統(tǒng)的空閑空間的累積的碎片性,且甚至可能由于主機(jī)文件系統(tǒng)的各個(gè)文件的固有碎片性,可能發(fā)生碎片性。由于刪除,先前寫(xiě)入的數(shù)據(jù)可能變?yōu)闂売?,并且?dǎo)致進(jìn)一步的碎片性。分片的邏輯組將需要全部重寫(xiě)在不同的物理塊中。重寫(xiě)分片的邏輯組可能涉及從邏輯組的先前位置復(fù)制不相關(guān)的數(shù)據(jù),即已知為垃圾回收的處理。隨著碎片性增加,存儲(chǔ)器系統(tǒng)的傳送速度可能降低。為了提供存儲(chǔ)器系統(tǒng)度量的量測(cè),可以向存儲(chǔ)器系統(tǒng)應(yīng)用測(cè)試以測(cè)定存儲(chǔ)器系統(tǒng)的寫(xiě)性能。例如,存儲(chǔ)器系統(tǒng)可能具有可以由諸如例如來(lái)自SD協(xié)會(huì)的速度等級(jí)規(guī)范的協(xié)議而設(shè)定的傳送速度規(guī)范。該速度等級(jí)規(guī)范包括速度等級(jí)2、4、6,它們分別表示存儲(chǔ)器系統(tǒng)的保證最小傳送速度2MB/s、4MB/s和6MB/s。運(yùn)行在存儲(chǔ)器系統(tǒng)上的速度等級(jí)測(cè)試測(cè)量諸如如下度量可尋址單元的順序?qū)懶阅?Pw)、對(duì)于文件分配表(FAT)寫(xiě)入的時(shí)間(TfV)和對(duì)于多個(gè)FAT寫(xiě)入的時(shí)間的滾動(dòng)平均(Tfw(avg))。速度等級(jí)測(cè)試運(yùn)行還可以測(cè)量具有碎片的存儲(chǔ)器系統(tǒng)的性能(Pc),這包括相應(yīng)的讀取性能測(cè)量。在速度等級(jí)測(cè)試期間發(fā)生的垃圾回收活動(dòng)可能不利地影響測(cè)試結(jié)果。
發(fā)明內(nèi)容
為了克服上述問(wèn)題,公開(kāi)了用于控制存儲(chǔ)器器件中的垃圾回收的方法和系統(tǒng)、根據(jù)本發(fā)明的第一方面,公開(kāi)了用于優(yōu)化包括控制器的存儲(chǔ)器器件的性能的方法。該方法包括接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù);確定對(duì)于垃圾回收操作要進(jìn)行的垃圾回收量;以及如果確定的垃圾回收量小于預(yù)定閾值,則開(kāi)始垃圾回收操作以實(shí)現(xiàn)該預(yù)定閾值。該方法還包括向與該邏輯可尋址單元對(duì)應(yīng)的至少一個(gè)物理元塊寫(xiě)入到來(lái)數(shù)據(jù)。以此方式,控制器可以以先占式方式進(jìn)行垃圾回收,即使當(dāng)前不需要垃圾回收。還公開(kāi)了包括多個(gè)存儲(chǔ)器塊以及實(shí)現(xiàn)此方法的存儲(chǔ)器控制器的系統(tǒng)。根據(jù)另一方面,公開(kāi)了當(dāng)要在存儲(chǔ)器器件中進(jìn)行垃圾回收操作時(shí)確定操作的模式的方法,存儲(chǔ)器器件包括控制器,該控制器確定用于進(jìn)行垃圾回收操作的操作模式并且以確定的模式進(jìn)行垃圾回收操作。該存儲(chǔ)器器件可以具有不同的操作模式。該存儲(chǔ)器器件在一個(gè)模式中可以比在另一個(gè)模式中更有效地進(jìn)行垃圾回收。該控制器可以通過(guò)分析垃圾回收性能的至少一個(gè)指示符(比如在操作模式中垃圾回收的最大量)來(lái)分析哪個(gè)操作模式更有效地進(jìn)行垃圾回收。依賴(lài)于該分析,該控制器可以在確定的模式中進(jìn)行垃圾回收。例如,該控制器可以在確定的模式中以先占式方式執(zhí)行垃圾回收以便有效地進(jìn)行垃圾回收。還公開(kāi)了包括多個(gè)存儲(chǔ)器塊以及實(shí)現(xiàn)此方法的存儲(chǔ)器控制器的系統(tǒng)。
圖1是與具有非易失性存儲(chǔ)器的存儲(chǔ)器系統(tǒng)連接的主機(jī)的框圖。圖2例示圖1的系統(tǒng)的示例物理存儲(chǔ)器組織。圖3示出圖2的物理存儲(chǔ)器的一部分的展開(kāi)圖。圖4例示邏輯可尋址單元和物理元塊的對(duì)準(zhǔn)。圖5例示在向存儲(chǔ)器系統(tǒng)寫(xiě)數(shù)據(jù)之后物理元塊的可能狀態(tài)。圖6是例示涉及存儲(chǔ)器塊的先占式垃圾回收的優(yōu)化存儲(chǔ)器器件的性能的方法的流程圖。圖7例示經(jīng)歷了根據(jù)圖6的方法的性能優(yōu)化的存儲(chǔ)器塊的第一例子。圖8例示經(jīng)歷了根據(jù)圖6的方法的性能優(yōu)化的存儲(chǔ)器塊的第二例子。圖9例示經(jīng)歷了根據(jù)圖6的方法的性能優(yōu)化的存儲(chǔ)器塊的第三例子。圖10例示經(jīng)歷了根據(jù)圖6的方法的性能優(yōu)化的存儲(chǔ)器塊的第四例子。圖11是例示涉及圖12的狀態(tài)機(jī)的優(yōu)化存儲(chǔ)器器件的性能的替換方法的流程圖。圖12例示與用于優(yōu)化存儲(chǔ)器器件的性能的圖11的替換方法有關(guān)的狀態(tài)機(jī)。圖13是例示涉及將控制信息復(fù)制到隨機(jī)存取存儲(chǔ)器的優(yōu)化存儲(chǔ)器器件的性能的方法的流程圖。圖14是例示涉及監(jiān)視垃圾回收量的優(yōu)化存儲(chǔ)器器件的性能的方法的流程圖。
具體實(shí)施例方式適合于在實(shí)現(xiàn)本發(fā)明的方面時(shí)使用的閃存系統(tǒng)示出在圖1-3中。圖1的主機(jī)系統(tǒng)100將數(shù)據(jù)存儲(chǔ)到閃存102中并從閃存102取得數(shù)據(jù)。閃存可以嵌入在主機(jī)內(nèi),比如以安裝在個(gè)人計(jì)算機(jī)中的固態(tài)盤(pán)(SSD)驅(qū)動(dòng)器的形式?;蛘撸鎯?chǔ)器102可以是通過(guò)如圖1所示的機(jī)械和電連接器的配合部分104和106可移除地連接到主機(jī)的卡的形式。配置為用作內(nèi)部或嵌入的SSD驅(qū)動(dòng)器的閃存可能看起來(lái)類(lèi)似于圖1的示意圖,主要差別是存儲(chǔ)器系統(tǒng)102的位置位于主機(jī)內(nèi)部。SSD驅(qū)動(dòng)器可以是作為對(duì)于旋轉(zhuǎn)的磁盤(pán)驅(qū)動(dòng)器的簡(jiǎn)易(drop-1n)替代的離散模塊的形式。商業(yè)上可獲得的SSD驅(qū)動(dòng)器的一個(gè)例子是由SanDisk公司生產(chǎn)的32吉比特SSD。商業(yè)上可獲得的可移除閃存卡的例子包括緊湊快閃(CF)、多媒體卡(MMC)、安全數(shù)字(SD)、迷你SD、記憶棒、智能媒體、TransFlash和微SD卡。盡管這些卡的每個(gè)具有根據(jù)其標(biāo)準(zhǔn)化規(guī)范的唯一的機(jī)械和/或電接口,但是其每個(gè)中所包括的閃存系統(tǒng)類(lèi)似。這些卡全部可從SanDisk公司、即本申請(qǐng)的受讓人獲得。SanDisk還以其Cruzer商標(biāo)提供一系列快閃驅(qū)動(dòng)器,它們是小包裝形式的手持存儲(chǔ)器系統(tǒng),其具有用于通過(guò)插入到主機(jī)的USB插槽中而與主機(jī)連接的通用串行總線(USB)插頭。這些存儲(chǔ)卡和快閃驅(qū)動(dòng)器的每個(gè)包括與主機(jī)相接口并控制它們之中的閃存的操作的控制器??梢允褂肧SD、存儲(chǔ)卡和快閃驅(qū)動(dòng)器的主機(jī)系統(tǒng)數(shù)量眾多并且多種多樣。它們包括諸如桌上型或者膝上型以及其他可攜式計(jì)算機(jī)的個(gè)人計(jì)算機(jī)、蜂窩電話(huà)、個(gè)人數(shù)字助理(PDA)、數(shù)字相機(jī)、數(shù)字?jǐn)z像機(jī)和可攜式音頻播放器。對(duì)于可攜式存儲(chǔ)卡應(yīng)用,主機(jī)可以包括對(duì)于一種或多種類(lèi)型的存儲(chǔ)卡或快閃驅(qū)動(dòng)器的內(nèi)置插槽,或者主機(jī)可能需要存儲(chǔ)卡被插入到其中的適配器。存儲(chǔ)器系統(tǒng)通常包含其自己的存儲(chǔ)器控制器以及驅(qū)動(dòng)器,但是也可以存在一些唯存儲(chǔ)器系統(tǒng),其替代地由通過(guò)存儲(chǔ)器所連接到的主機(jī)執(zhí)行的軟件來(lái)控制。在包含控制器的一些存儲(chǔ)器系統(tǒng)中,尤其是嵌入在主機(jī)內(nèi)的存儲(chǔ)器系統(tǒng)中,存儲(chǔ)器、控制器和驅(qū)動(dòng)器通常在單個(gè)集成電路芯片上形成。就存儲(chǔ)器102而言,圖1的主機(jī)系統(tǒng)100可視為具有兩個(gè)主要部分,其由電路和軟件的組合構(gòu)成。它們是應(yīng)用部分108以及與存儲(chǔ)器102相接口的驅(qū)動(dòng)器部分110。在PC中,例如,應(yīng)用部分108可以包括處理器(比如微處理器)或者其他類(lèi)型的運(yùn)行字處理、圖形、控制或者其他流行應(yīng)用軟件的控制器。在主要專(zhuān)用于進(jìn)行單組功能的相機(jī)、蜂窩電話(huà)或者其他主機(jī)系統(tǒng)中,應(yīng)用部分108包括處理器或者其他類(lèi)型的運(yùn)行操作相機(jī)以拍攝和存儲(chǔ)照片、操作蜂窩電話(huà)以進(jìn)行呼叫和接收呼叫等等的軟件的控制器。圖1的存儲(chǔ)器系統(tǒng)102包括閃存112和電路114,兩者皆與卡所連接到的主機(jī)相接口,用于來(lái)回傳遞數(shù)據(jù),并控制存儲(chǔ)器112。控制器114通常在數(shù)據(jù)編程和讀取期間在由主機(jī)110使用的數(shù)據(jù)的邏輯地址和存儲(chǔ)器112的物理地址之間轉(zhuǎn)換。控制器114可以包括處理器、微控制器、專(zhuān)用集成電路(ASIC)、場(chǎng)可編程門(mén)陣列、邏輯數(shù)字電路或者其他現(xiàn)在已知的或者以后開(kāi)發(fā)的邏輯處理能力。圖2概念性地例示用作以下進(jìn)一步描述的例子的閃存單元陣列112 (圖1)的組織。閃存單元陣列112可以包括多個(gè)存儲(chǔ)器單元陣列,每個(gè)分別由單個(gè)或者多個(gè)存儲(chǔ)器控制器控制。存儲(chǔ)器單元的四個(gè)平面或者子陣列202、204、206和208可以位于單個(gè)集成存儲(chǔ)器單元芯片上、位于兩個(gè)芯片上(每個(gè)芯片上兩個(gè)平面)或者位于四個(gè)單獨(dú)芯片上。具體布置對(duì)于以下的討論并不重要。當(dāng)然,系統(tǒng)中可以存在其他數(shù)量的平面,比如I個(gè)、2個(gè)、8個(gè)、16個(gè)或者更多。平面各自被劃分為存儲(chǔ)器單元的組,存儲(chǔ)器單元的組形成擦除的最小單位,下文中稱(chēng)為塊。在圖2中,存儲(chǔ)器單元的塊由矩形示出,諸如位于各個(gè)平面202、204、206和208中的塊210、212、214和216。每個(gè)平面中可以存在數(shù)十個(gè)或者數(shù)百個(gè)塊。如上所述,存儲(chǔ)器單元的塊是擦除的單位,即物理上可一起擦除的最少數(shù)量的存儲(chǔ)器單元。但是,為增加并行性,以更大的元塊單位來(lái)操作塊。來(lái)自每個(gè)平面的一個(gè)塊邏輯上鏈接在一起以形成元塊。四個(gè)塊210、212、214和216被示出為形成一個(gè)元塊218。元塊內(nèi)的所有單元通常一起被擦除。用于形成元塊的塊無(wú)需被限制為在其各自平面內(nèi)相同的相對(duì)位置,如由塊222、224、226和228構(gòu)成的第二元塊220中所示。盡管通常優(yōu)選跨過(guò)所有平面延伸元塊,但是為了高系統(tǒng)性能,可以操作存儲(chǔ)器系統(tǒng)由不同平面中的一個(gè)、兩個(gè)或三個(gè)塊中的任一個(gè)或全部動(dòng)態(tài)地形成元塊的能力。這允許元塊的尺寸與在一個(gè)編程操作中可用于存儲(chǔ)的數(shù)據(jù)量更緊密地匹配。為了操作目的,各個(gè)塊又被劃分為存儲(chǔ)器單元的頁(yè),如圖3所示。例如,每個(gè)塊210、212、214和216的存儲(chǔ)器單元每個(gè)被劃分為八頁(yè)P(yáng)0-P7?;蛘撸诿總€(gè)塊內(nèi)可以存在16、32或者更多頁(yè)的存儲(chǔ)器單元。頁(yè)是塊內(nèi)的數(shù)據(jù)編程和讀取的單位,包含一次編程或讀取的最小數(shù)據(jù)量。但是,為了增加存儲(chǔ)器系統(tǒng)操作并行性,可以將在兩個(gè)或多個(gè)塊內(nèi)的如此頁(yè)邏輯地鏈接成元頁(yè)。元頁(yè)302例示在圖3中,由來(lái)自四個(gè)塊210、212、214和216的每個(gè)的一個(gè)物理頁(yè)形成。例如,元頁(yè)302包括在四個(gè)塊的每個(gè)中的頁(yè)P(yáng)2,但是元頁(yè)的頁(yè)不是一定要具有在每個(gè)塊內(nèi)的相同相對(duì)位置。元頁(yè)是編程的最大單位。圖4例示邏輯可尋址單元和每單元三位的存儲(chǔ)器(D3存儲(chǔ)器)中的物理元塊的對(duì)準(zhǔn)。例如,存儲(chǔ)器可以是總?cè)萘?-32GB的SanDisk公司的32nm或43nm D3閃存。圖4意圖例示邏輯可尋址單元和物理元塊之間的未對(duì)準(zhǔn)(misalignment),并且并不一定暗示按照?qǐng)D中所示的順序進(jìn)行可尋址單元寫(xiě)入。在一個(gè)例子中,安全數(shù)字(SD)存儲(chǔ)器的邏輯可尋址單元大小是4MB,如由單元402,404和406所示。但是,D3存儲(chǔ)器中的物理元塊大小是3MB,如由元塊408、410、412和414所示。在圖4中,虛線每個(gè)表示IMB的大小。因此,邏輯可尋址單元的邊界之一或兩者不與物理元塊邊界對(duì)準(zhǔn)。由于此未對(duì)準(zhǔn),如果數(shù)據(jù)被寫(xiě)入到具體的邏輯可尋址單元,則數(shù)據(jù)物理上被寫(xiě)入到兩個(gè)元塊,如圖5中所示,導(dǎo)致元塊之一或兩者中的未用空間(圖5中的交叉陰影的區(qū)域表示被寫(xiě)入了數(shù)據(jù)的元塊中的空間,并且空白區(qū)域表示未用空間)。如果需要多個(gè)垃圾回收操作來(lái)恢復(fù)未用空間,則未用空間會(huì)導(dǎo)致存儲(chǔ)器系統(tǒng)的順序?qū)懭胄阅躊w不是最佳的。4MB的邏輯可尋址單元大小和3MB的物理元塊大小的當(dāng)前例子僅僅用于例示目的。預(yù)料到其他值。具體地,首先,如果數(shù)據(jù)被寫(xiě)入到可尋址單元402,則元塊408的全部以及元塊410的IMB被寫(xiě)入了到來(lái)數(shù)據(jù),并且被稱(chēng)為圖5中的類(lèi)型A可尋址單元502。元塊408已滿(mǎn)并且關(guān)閉,而元塊410具有2MB的未用空間。其次,如果數(shù)據(jù)被寫(xiě)入到可尋址單元404,則元塊410的2MB以及元塊412的2MB被寫(xiě)入有到來(lái)數(shù)據(jù)。可尋址單元404被稱(chēng)為類(lèi)型B可尋址單元504。在此情況下,元塊410和412未滿(mǎn)并且每個(gè)元塊具有IMB的未用空間。最后,如果數(shù)據(jù)被寫(xiě)入到可尋址單元406,則元塊412的IMB以及元塊414的全部被寫(xiě)入有到來(lái)數(shù)據(jù)??蓪ぶ穯卧?06被稱(chēng)為類(lèi)型C可尋址單元506。元塊412具有2MB的未用空間,并且在此情況下元塊414已滿(mǎn)并且被關(guān)閉。具有寫(xiě)入其處的到來(lái)數(shù)據(jù)的元塊也可以稱(chēng)為更新塊。如果當(dāng)?shù)絹?lái)數(shù)據(jù)要被寫(xiě)入時(shí)沒(méi)有未用的更新塊可用,則需要一個(gè)或多個(gè)垃圾回收操作以創(chuàng)建用于存儲(chǔ)到來(lái)數(shù)據(jù)的更新塊。如以下進(jìn)一步詳述的,由于類(lèi)型A或者類(lèi)型C寫(xiě)入所導(dǎo)致的開(kāi)放更新塊將需要2MB的未來(lái)垃圾回收。類(lèi)型B寫(xiě)入將得到兩個(gè)開(kāi)放更新塊,每個(gè)將需要IMB的未來(lái)垃圾回收。在類(lèi)型B寫(xiě)入的情況下,如果要僅創(chuàng)建一個(gè)更新塊,則僅需要IMB的未來(lái)垃圾回收。因此,平均地,任一寫(xiě)入類(lèi)型將導(dǎo)致最多2MB的垃圾回收。
但是,在一些情況下,可能需要大于2MB的垃圾回收操作以在D3存儲(chǔ)器中創(chuàng)建未用更新塊。第一種情況發(fā)生在所有開(kāi)放更新塊每個(gè)具有IMB的數(shù)據(jù)時(shí)。如果發(fā)生類(lèi)型B寫(xiě)入,則需要兩個(gè)未用的更新塊來(lái)寫(xiě)入到來(lái)數(shù)據(jù)。因而,將需要兩個(gè)每個(gè)2MB的垃圾回收,總共4MB的垃圾回收。第二種情況發(fā)生在存在一個(gè)具有2MB的數(shù)據(jù)的開(kāi)放更新塊并且其余的開(kāi)放更新塊每個(gè)具有IMB的數(shù)據(jù)時(shí)。同樣,如果發(fā)生類(lèi)型B寫(xiě)入,則需要兩個(gè)未用的更新塊來(lái)寫(xiě)入到來(lái)數(shù)據(jù)。在此情況下,將需要最小分別是IMB和2MB的兩個(gè)垃圾回收,總共3MB的垃圾回收。在速度等級(jí)操作期間,對(duì)于可尋址單元的每個(gè)寫(xiě)入,到來(lái)數(shù)據(jù)的寫(xiě)入被寫(xiě)入到構(gòu)成可尋址單元的記錄單元。在傳統(tǒng)的存儲(chǔ)器系統(tǒng)中,當(dāng)更新塊已滿(mǎn)時(shí)觸發(fā)垃圾回收操作。但是,如果垃圾回收操作發(fā)生在速度等級(jí)操作的測(cè)量段期間,則Pw度量(可尋址單元的順序?qū)懭胄阅?可能受到負(fù)面影響,并且可能不能達(dá)到由速度等級(jí)規(guī)范指示的期望的最小傳送速度。如上所述,最差情況的情形將需要每個(gè)2MB的兩個(gè)垃圾回收操作,總共4MB。D3存儲(chǔ)器中的4MB垃圾回收操作將負(fù)面影響Pw度量。圖6是例示涉及存儲(chǔ)器塊的先占式(pre-emptive)垃圾回收的優(yōu)化存儲(chǔ)器器件的性能的方法600的流程圖。為了避免上述的最差情況的情形,當(dāng)存在到來(lái)數(shù)據(jù)的寫(xiě)入時(shí)(t匕如每次存在到來(lái)數(shù)據(jù)的寫(xiě)入時(shí))方法600進(jìn)行預(yù)定量的先占式垃圾回收操作。在D3存儲(chǔ)器中,先占式垃圾回收的量可以是例如2MB。方法600允許存儲(chǔ)器器件在速度操作期間滿(mǎn)足進(jìn)行諸如垃圾回收操作的工作的預(yù)算。方法600可以作為忙時(shí)處理(比如在主機(jī)命令期間操作)或者閑時(shí)處理(比如在主機(jī)命令之間操作)來(lái)進(jìn)行。例如,存儲(chǔ)器系統(tǒng)102中的存儲(chǔ)器控制器114可以實(shí)現(xiàn)方法600。對(duì)于方法600的圖6中所述的每個(gè)步驟可以單獨(dú)進(jìn)行或者與其他步驟組合進(jìn)行。在步驟602,要被寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù)被存儲(chǔ)器器件接收??梢詫⑷我忸?lèi)型的數(shù)據(jù)(包括FAT和非FAT數(shù)據(jù))寫(xiě)入到存儲(chǔ)器。方法600可以不一定知道速度等級(jí)操作是否已經(jīng)開(kāi)始,而是可以一直操作。在步驟604,確定由于數(shù)據(jù)寫(xiě)入而需要的垃圾回收量。如上所述,如果在數(shù)據(jù)寫(xiě)入時(shí)沒(méi)有未用的更新塊可用,則一個(gè)或多個(gè)開(kāi)放更新塊經(jīng)歷垃圾回收操作以創(chuàng)建未用更新塊。如果未用更新塊可用,則可能在步驟604不需要任何量的垃圾回收。在步驟606,將在步驟602確定的垃圾回收量與預(yù)定閾值相比較。對(duì)于D3存儲(chǔ)器,例如閾值可以是2MB,或者可以是另一量。可以選擇2MB閾值用于D3存儲(chǔ)器以便在速度等級(jí)操作期間存儲(chǔ)器的順序?qū)懭胄阅躊w不受負(fù)面影響。如果在步驟606垃圾回收量小于或等于閾值,則在步驟608基于算法選擇一個(gè)或多個(gè)塊用于垃圾回收操作?;蛘?,步驟606可以確定垃圾回收量是否小于或等于第一閾值并大于或等于第二閾值。如果是,則在步驟608可以基于算法選擇一個(gè)或多個(gè)塊用于垃圾回收操作。在步驟608可以使用一個(gè)或多個(gè)算法來(lái)選擇塊。一個(gè)示例算法可以包括做最少工作(或者復(fù)制最少量)算法。做最少工作算法可以分析一個(gè)或多個(gè)更新塊中的數(shù)據(jù)以確定要合并(consolidate)的具有最少數(shù)據(jù)量的更新塊。做最少工作算法可以檢查更新塊資源中的寫(xiě)入指針作為填滿(mǎn)更新塊所需的空間量的指示符。另一示例算法可以包括最近最少使用(LRU)算法,用于選擇最近最少使用的更新塊。該LRU算法可以在為了選擇一個(gè)或多個(gè)最近最少使用的更新塊時(shí)追蹤哪些塊曾被使用。另一示例算法可以包括最近最常使用(MRU)算法,用于選擇最近最常使用的更新塊。該MRU算法可以在為了選擇一個(gè)或多個(gè)最近最常使用的更新塊時(shí)最終哪些塊曾被使用。即使在步驟604確定的量小于閾值量,也通過(guò)方法66強(qiáng)制該閾值量的垃圾回收(比如步驟606中的閾值)。其中確定的垃圾回收量小于閾值的情況可能發(fā)生于存儲(chǔ)器器件處于穩(wěn)定狀態(tài)時(shí),例如當(dāng)存儲(chǔ)器器件中的所有更新塊都是數(shù)據(jù)寫(xiě)入的結(jié)果時(shí)。在步驟610,通過(guò)將數(shù)據(jù)從其他塊復(fù)制到在步驟608處所選擇的更新塊來(lái)進(jìn)行所強(qiáng)制的閾值量的垃圾回收操作。作為該垃圾回收操作的結(jié)果,創(chuàng)建了一個(gè)或多個(gè)未用更新塊。最后,在步驟612,將到來(lái)數(shù)據(jù)寫(xiě)入到創(chuàng)建的未用更新塊,并且方法600完成。圖7示出當(dāng)存儲(chǔ)器器件處于穩(wěn)定狀態(tài)時(shí)經(jīng)歷圖6中所示的方法600的更新塊的例子。頂部行的更新塊702-708示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之前的開(kāi)放更新塊,并且底部行的更新塊710-718示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之后的更新塊。在頂部行,更新塊702和704是先前的類(lèi)型B數(shù)據(jù)寫(xiě)入的結(jié)果,更新塊706是先前的類(lèi)型C數(shù)據(jù)寫(xiě)入的結(jié)果,并且更新塊708是先前的類(lèi)型A數(shù)據(jù)寫(xiě)入的結(jié)果。到來(lái)數(shù)據(jù)的類(lèi)型C寫(xiě)入需要兩個(gè)更新塊來(lái)存儲(chǔ)數(shù)據(jù),如上所述。對(duì)于向D3存儲(chǔ)器的類(lèi)型C寫(xiě)入,用3MB的數(shù)據(jù)完全填充一個(gè)更新塊,并且第二更新塊被填充了 IMB的數(shù)據(jù)并且保持開(kāi)放。例如,在圖7的底部行中的更新塊718示出在類(lèi)型C寫(xiě)入之后的開(kāi)放更新塊。如果在數(shù)據(jù)寫(xiě)入時(shí)沒(méi)有未用的更新塊可用,則更新塊702被選擇用于垃圾回收,因?yàn)槠涫亲罱钌偈褂玫拈_(kāi)放更新塊。更新塊702經(jīng)歷IMB的垃圾回收,在寫(xiě)入之后得到完整的更新塊710。但是,因?yàn)楫?dāng)使用方法600時(shí)強(qiáng)制閾值量(2MB)的垃圾回收,所以更新塊704被選擇用于垃圾回收操作。更新塊704經(jīng)歷IMB的先占式垃圾回收并且在寫(xiě)入之后得到完整的更新塊712。更新塊714和716在寫(xiě)入之后仍分別處于具有與更新塊706和708相同的數(shù)據(jù)的相同狀態(tài)。圖8示出當(dāng)存儲(chǔ)器器件處于穩(wěn)定狀態(tài)時(shí)經(jīng)歷圖6所示的方法600的更新塊的另一例子。類(lèi)似于圖7,頂部行的更新塊802-806示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之前的開(kāi)放更新塊,并且底部行的更新塊808-814示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之后的更新塊。在頂部行中,更新塊802是先前的類(lèi)型B數(shù)據(jù)寫(xiě)入的結(jié)果,并且塊804和806是先前的類(lèi)型C數(shù)據(jù)寫(xiě)入的結(jié)果。在圖8所示的例子中,對(duì)于D3存儲(chǔ)器的到來(lái)數(shù)據(jù)的類(lèi)型C寫(xiě)入用3MB的數(shù)據(jù)完全填充一個(gè)更新塊,并且用IMB的數(shù)據(jù)填充第二更新塊。第二更新塊、例如更新塊814在數(shù)據(jù)寫(xiě)入之后保持開(kāi)放。如果在數(shù)據(jù)寫(xiě)入時(shí)未用更新塊可用,則在傳統(tǒng)的存儲(chǔ)器器件中將不需要垃圾回收操作來(lái)創(chuàng)建用于數(shù)據(jù)寫(xiě)入的更新塊。但是,根據(jù)方法600,更新塊802和804被選擇用于先占式垃圾回收,因?yàn)樗鼈兪亲罱钌偈褂玫母聣K。每個(gè)更新塊802和804經(jīng)歷IMB的垃圾回收。因而,更新塊802在數(shù)據(jù)寫(xiě)入之后得到完整的更新塊808。從更新塊804垃圾回收另外的1MB,得到更新塊810。更新塊810保持開(kāi)放,因?yàn)槿源嬖贛B的可用空間。更新塊812在寫(xiě)入之后仍處于具有與更新塊806相同的數(shù)據(jù)的相同狀態(tài)。在此例子中,更新塊802和804兩者都通過(guò)方法600被以先占式方式執(zhí)行垃圾回收,因?yàn)椴皇潜仨毿枰厥樟?。例?對(duì)塊804僅進(jìn)行部分垃圾回收。圖9示出當(dāng)存儲(chǔ)器器件處于穩(wěn)定狀態(tài)時(shí)經(jīng)歷圖6所示的方法600的更新塊的進(jìn)一步的例子。頂部行的更新塊902-906示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之前的開(kāi)放更新塊,并且底部行的更新塊908-914示出在類(lèi)型C數(shù)據(jù)寫(xiě)入之后的更新塊。在頂部行中,更新塊902和906是先前的類(lèi)型C數(shù)據(jù)寫(xiě)入的結(jié)果,并且更新塊904是先前的類(lèi)型A數(shù)據(jù)寫(xiě)入的結(jié)果。對(duì)于D3存儲(chǔ)器的到來(lái)數(shù)據(jù)的類(lèi)型C寫(xiě)入用3MB的數(shù)據(jù)完全填充一個(gè)更新塊并且用IMB的數(shù)據(jù)填充第二更新塊。第二更新塊、例如更新塊914在類(lèi)型C數(shù)據(jù)寫(xiě)入之后保持開(kāi)放。如果未用更新塊可用,則在傳統(tǒng)的存儲(chǔ)器器件中將不需要垃圾回收來(lái)創(chuàng)建用于數(shù)據(jù)寫(xiě)入的未用更新塊。但是,根據(jù)方法600,更新塊902被選擇用于垃圾回收,因?yàn)槠涫亲罱钌偈褂玫母聣K。更新塊902經(jīng)歷2MB的垃圾回收,從在數(shù)據(jù)寫(xiě)入之后得到完整的更新塊908。更新塊910和912在寫(xiě)入之后仍分別處于具有與更新塊906和906相同的數(shù)據(jù)的相同狀態(tài)。在此例子中對(duì)更新塊902以先占式方式執(zhí)行垃圾回收,因?yàn)轭?lèi)型C寫(xiě)入不需要垃圾回收量。回去參考圖6,如果在步驟606中在步驟604確定的垃圾回收量大于閾值,則方法600繼續(xù)到步驟614。在步驟614,一個(gè)或多個(gè)替換的更新塊(不是一定是最近最少使用的更新塊)被選擇用于垃圾回收操作。此情況發(fā)生在存儲(chǔ)器器件處于初始條件狀態(tài)時(shí),例如當(dāng)存儲(chǔ)器器件中的更新塊不都是數(shù)據(jù)寫(xiě)入的結(jié)果時(shí)。最近最少使用的更新塊如果被選擇則可能需要經(jīng)歷多于閾值量的垃圾回收,從而導(dǎo)致對(duì)于速度等級(jí)操作的負(fù)面影響。通過(guò)選擇替換的更新塊,仍可以進(jìn)行所需的垃圾回收而不會(huì)不利地影響速度等級(jí)操作的順序?qū)懭胄阅?。在步驟614選擇替換的更新塊依賴(lài)于在步驟602的數(shù)據(jù)寫(xiě)入的類(lèi)型。如果發(fā)生類(lèi)型A或者類(lèi)型C寫(xiě)入,則在步驟614選擇具有最少量的所需垃圾回收的開(kāi)放更新塊用于垃圾回收操作。如果在步驟616所選的開(kāi)放更新塊不需要多于閾值量的垃圾回收,則通過(guò)將數(shù)據(jù)從其他塊復(fù)制到所選的開(kāi)放更新塊在步驟610進(jìn)行垃圾回收操作。然后在步驟612,將到來(lái)數(shù)據(jù)寫(xiě)入到創(chuàng)建的未用更新塊。但是,如果在步驟616所選的開(kāi)放更新塊需要多于閾值量的垃圾回收,則在步驟618將到來(lái)數(shù)據(jù)寫(xiě)入到非易失性存儲(chǔ)區(qū)域,比如被寫(xiě)入到二進(jìn)制高速緩存(cache)或者隨機(jī)存取存儲(chǔ)器。在步驟620仍進(jìn)行閾值量的垃圾回收操作。例如,數(shù)據(jù)可以被寫(xiě)入到緩沖隨機(jī)存取存儲(chǔ)器(BRAM)。數(shù)據(jù)可以被保持在BRAM中直到垃圾回收完成釋放更新塊的處理。如果在步驟602發(fā)生類(lèi)型B寫(xiě)入,則在步驟614處選擇一個(gè)或多個(gè)替換的開(kāi)放更新塊用于垃圾回收操作。如果不存在未用的更新塊,則在步驟614選擇一個(gè)或多個(gè)開(kāi)放更新塊。例如,在第一 2MB的寫(xiě)入期間可以選擇第一開(kāi)放更新塊,并且當(dāng)寫(xiě)入第二 2MB時(shí)可以選擇第二開(kāi)放更新塊。作為另一例子,可以同時(shí)選擇多個(gè)更新塊。如果在步驟616對(duì)兩個(gè)所選的更新塊進(jìn)行垃圾回收所需的總數(shù)據(jù)量大于閾值量,則在步驟618將到來(lái)數(shù)據(jù)寫(xiě)入到臨時(shí)存儲(chǔ)區(qū)域。在步驟620仍進(jìn)行閾值量的垃圾回收。但是,如果在步驟616對(duì)這兩個(gè)所選的更新塊進(jìn)行垃圾回收所需的總數(shù)據(jù)量小于或等于閾值量,則在步驟610進(jìn)行垃圾回收操作。在此情況下,首先對(duì)具有少于或等于閾值量的一半的所選更新塊進(jìn)行垃圾回收,之后是對(duì)其他所選更新塊的垃圾回收操作。在步驟612將到來(lái)數(shù)據(jù)寫(xiě)入到創(chuàng)建的未用更新塊。圖10示出當(dāng)存儲(chǔ)器器件處于初始條件狀態(tài)時(shí)經(jīng)歷圖6所示的方法600的更新塊的例子。頂部行的更新塊1002-1006示出在類(lèi)型B數(shù)據(jù)寫(xiě)入之前的開(kāi)放更新塊,并且底部行的更新塊1008-1014示出在類(lèi)型B數(shù)據(jù)寫(xiě)入之后的更新塊。在頂部行中,更新塊1002是先前的類(lèi)型C數(shù)據(jù)寫(xiě)入的結(jié)果。更新塊1004被填充了1. 5MB的數(shù)據(jù)并且更新塊1006被填充了 2. 5MB的數(shù)據(jù)。因此,更新塊1004將需要1. 5MB的未來(lái)垃圾回收并且更新塊1006將需要O. 5MB的未來(lái)垃圾回收。
對(duì)于D3存儲(chǔ)器的到來(lái)數(shù)據(jù)的類(lèi)型B寫(xiě)入將用每個(gè)2MB的數(shù)據(jù)填充兩個(gè)更新塊,使得這兩個(gè)更新塊在寫(xiě)入之后開(kāi)放,具有IMB的可用空間。例如,更新塊1014和1016示出在此情況下在類(lèi)型B寫(xiě)入之后的得到的開(kāi)放更新塊。因?yàn)轭?lèi)型B寫(xiě)入得到兩個(gè)開(kāi)放更新塊,兩個(gè)當(dāng)前開(kāi)放更新塊需要被垃圾回收以便創(chuàng)建兩個(gè)未用更新塊。在此例子中,例如,如果兩個(gè)最近最少使用的更新塊被選擇,則多余2MB的閾值量將被垃圾回收。具體地,更新塊1002將經(jīng)歷2MB的垃圾回收并且更新塊1004將經(jīng)歷1. 5MB的垃圾回收,得到總共3. 5MB的垃圾回收。因?yàn)槔厥樟砍^(guò)了閾值,所以選擇替換的更新塊而不是最近最少使用的更新塊用于垃圾回收。在此例子中,更新塊1004和1006被選擇用于垃圾回收,更新塊1006首先被垃圾回收,因?yàn)槠涫蔷哂行∮诨虻扔陂撝档囊话肜鏞. 5M的塊,并且更新塊1006的垃圾回收在數(shù)據(jù)寫(xiě)入之后得到完整的更新塊1012。更新塊1004經(jīng)歷具有1. 5MB的量的垃圾回收,在數(shù)據(jù)寫(xiě)入之后得到完整的更新塊1010。更新塊1008在數(shù)據(jù)寫(xiě)入之后仍與更新塊1002相同。通過(guò)在此情況下選擇替換的更新塊而不是最近最少使用的更新塊,仍以先占式方式進(jìn)行閾值量的垃圾回收。圖11是例示涉及圖12的狀態(tài)機(jī)的優(yōu)化存儲(chǔ)器器件的性能的替換方法1100的流程圖。不是諸如以上關(guān)于圖6的方法600的步驟608所述的選擇最近最少使用的更新塊用于垃圾回收,方法1100描述用于選擇開(kāi)放更新塊用于垃圾回收的替換算法。當(dāng)存儲(chǔ)器器件處于穩(wěn)定狀態(tài)時(shí),例如當(dāng)存儲(chǔ)器器件中的所有更新塊都是數(shù)據(jù)寫(xiě)入的結(jié)果時(shí),可以使用方法1100。方法1100允許存儲(chǔ)器器件在速度等級(jí)操作期間滿(mǎn)足進(jìn)行諸如垃圾回收操作的工作的預(yù)算。方法1100可以作為忙時(shí)處理或者閑時(shí)處理而進(jìn)行。例如,存儲(chǔ)器系統(tǒng)102中的存儲(chǔ)器控制器114可以實(shí)現(xiàn)方法1100。圖11中所述的方法1100的每個(gè)步驟可以單獨(dú)進(jìn)行或者與其他步驟組合進(jìn)行。在方法1100中,總是選擇兩個(gè)更新塊用于垃圾回收操作。這兩個(gè)更新塊處于兩個(gè)狀態(tài)之一,狀態(tài)A或狀態(tài)B,如圖12所示。在狀態(tài)A,更新塊1202未使用,并且更新塊1204由于先前的類(lèi)型A或者類(lèi)型C數(shù)據(jù)寫(xiě)入而是開(kāi)放更新塊。更新塊1202不包含數(shù)據(jù)并且不需要未來(lái)垃圾回收,而更新塊1204具有IMB的數(shù)據(jù)并且將需要2MB的未來(lái)垃圾回收。狀態(tài)B包括更新塊1206和1208,它們由于先前的類(lèi)型B數(shù)據(jù)寫(xiě)入而是開(kāi)放更新塊。每個(gè)更新塊1206和1208包含2MB的數(shù)據(jù),并且將需要IMB的未來(lái)垃圾回收。一旦兩個(gè)更新塊被發(fā)現(xiàn)處于狀態(tài)A或者狀態(tài)B,存儲(chǔ)器器件就可以利用方法1100。當(dāng)存儲(chǔ)器器件處于初始條件狀態(tài)時(shí),可以利用在方法600的步驟614-618中所述的替換的更新塊選擇,以便達(dá)到使用方法1100所需的穩(wěn)定狀態(tài)。在狀態(tài)A和狀態(tài)B之間以及在狀態(tài)A和狀態(tài)B內(nèi)的轉(zhuǎn)變需要D3存儲(chǔ)器中的2MB的垃圾回收。因?yàn)闉榱藸顟B(tài)之間以及狀態(tài)內(nèi)轉(zhuǎn)變而總是進(jìn)行2MB的垃圾回收,所以滿(mǎn)足垃圾回收預(yù)算并且不負(fù)面影響速度等級(jí)操作。在方法1100的步驟1102,存儲(chǔ)器器件接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù)??梢詫⑷我忸?lèi)型的數(shù)據(jù)(包括FAT和非FAT數(shù)據(jù))寫(xiě)入到存儲(chǔ)器。方法1100不知道速度等級(jí)操作是否已經(jīng)開(kāi)始,而是可以一直操作。在步驟1104,確定兩個(gè)所選的更新塊處于狀態(tài)A還是狀態(tài)B,如圖12中所述。如果更新塊處于狀態(tài)A,則方法1100繼續(xù)到步驟1106,在那里確定在步驟1102發(fā)生哪種類(lèi)型的數(shù)據(jù)寫(xiě)入。如果數(shù)據(jù)寫(xiě)入是類(lèi)型A或者類(lèi)型C數(shù)據(jù)寫(xiě)入,則在步驟1110更新塊1202和1204被垃圾回收以便更新塊仍處于狀態(tài)A。具體地,更新塊1202和1204仍處于狀態(tài)A是因?yàn)轭?lèi)型A或者類(lèi)型C數(shù)據(jù)寫(xiě)入得到包含IMB的數(shù)據(jù)和2MB的可用空間的開(kāi)放更新塊。但是,如果在步驟1106數(shù)據(jù)寫(xiě)入的類(lèi)型是類(lèi)型B寫(xiě)入,則在步驟1112更新塊1202和1204經(jīng)歷垃圾回收以便更新塊轉(zhuǎn)變到狀態(tài)B并且更新塊變?yōu)楦聣K1206和1208。在此情況下,更新塊1202和1204轉(zhuǎn)變到狀態(tài)B因?yàn)轭?lèi)型B數(shù)據(jù)寫(xiě)入得到每個(gè)包含2MB的數(shù)據(jù)和IMB的可用空間的兩個(gè)開(kāi)放更新塊。在步驟1110和1112,也將要寫(xiě)入的到來(lái)數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)更新塊中。另一方面,在步驟1104,如果確定兩個(gè)所選的更新塊處于狀態(tài)B,則方法1100繼續(xù)到步驟1108。在步驟1108,確定在步驟1102發(fā)生哪種類(lèi)型的數(shù)據(jù)寫(xiě)入。如果數(shù)據(jù)寫(xiě)入是類(lèi)型A或者類(lèi)型C數(shù)據(jù)寫(xiě)入,則在步驟1114更新塊1206和1208被垃圾回收以便更新塊轉(zhuǎn)變到狀態(tài)A,并且變?yōu)楦聣K1202和1204。具體地,更新塊1206和1208轉(zhuǎn)變到狀態(tài)A是因?yàn)轭?lèi)型A或者類(lèi)型C數(shù)據(jù)寫(xiě)入得到包含IMB數(shù)據(jù)和2MB可用空間的開(kāi)放更新塊。但是,如果在步驟1108的數(shù)據(jù)寫(xiě)入的類(lèi)型是類(lèi)型B寫(xiě)入,則在步驟1116更新塊1206和1208被垃圾回收以便更新塊仍處于狀態(tài)B。在此情況下,更新塊1206和1208仍處于狀態(tài)B因?yàn)轭?lèi)型B數(shù)據(jù)寫(xiě)入得到每個(gè)包含2MB數(shù)據(jù)和IMB可用空間的兩個(gè)開(kāi)放更新塊。如之前那樣,在步驟1114和1116中,要寫(xiě)入的到來(lái)數(shù)據(jù)被存儲(chǔ)在一個(gè)或多個(gè)更新塊中。圖13是例示涉及將與垃圾回收有關(guān)的數(shù)據(jù)的至少一部分復(fù)制到易失性存儲(chǔ)器的優(yōu)化存儲(chǔ)器器件的性能的方法1300的流程圖。在一個(gè)實(shí)施例中,可以將用于更新塊的控制信息的一些或全部復(fù)制到隨機(jī)存取存儲(chǔ)器或者其他類(lèi)型的易失性存儲(chǔ)器。在另一實(shí)施例中,可以將經(jīng)歷垃圾回收的碎片的數(shù)據(jù)的一些或全部復(fù)制到隨機(jī)存取存儲(chǔ)器或者其他類(lèi)型的易失性存儲(chǔ)器。此后,可以將復(fù)制的碎片數(shù)據(jù)復(fù)制到非易失性存儲(chǔ)器中。在另一實(shí)施例中,可以將控制信息的一些或全部以及經(jīng)歷垃圾回收的碎片的數(shù)據(jù)的一些或全部復(fù)制到隨機(jī)存取存儲(chǔ)器或者其他類(lèi)型的易失性存儲(chǔ)器。使用諸如隨機(jī)存取存儲(chǔ)器的易失性存儲(chǔ)器來(lái)臨時(shí)存儲(chǔ)諸如控制信息的信息的一部分可以在速度等級(jí)操作期間改進(jìn)存儲(chǔ)器器件的性能。方法1300可以作為忙時(shí)處理或者閑時(shí)處理來(lái)進(jìn)行。例如存儲(chǔ)器控制器114可以實(shí)現(xiàn)方法1300。圖13中所述的方法1300的每個(gè)步驟可以單獨(dú)進(jìn)行或者組合進(jìn)行。在步驟1302,存儲(chǔ)器器件接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù)。在步驟1304,將已經(jīng)接收的到來(lái)數(shù)據(jù)的數(shù)量與閾值相比較。數(shù)據(jù)的數(shù)量的檢測(cè)可以限制于當(dāng)依記錄單元的長(zhǎng)度接收數(shù)據(jù)的開(kāi)始時(shí)。當(dāng)依記錄單元的長(zhǎng)度接收要寫(xiě)入到邏輯可尋址單元的數(shù)據(jù)時(shí),可能已經(jīng)開(kāi)始了速度等級(jí)操作。如果可尋址單元具有4MB的長(zhǎng)度,則記錄單元具有例如16kB的長(zhǎng)度。如果在步驟1304檢測(cè)到的數(shù)據(jù)的數(shù)量在閾值以下,則方法1300返回到步驟1302以接收更多到來(lái)數(shù)據(jù)。但是,如果在步驟1304處數(shù)據(jù)的數(shù)量處于閾值或者在閾值以上,則方法1300繼續(xù)到步驟1306。閾值可以是邏輯可尋址單元的80%,或者可以是另一數(shù)量或者百分比。在步驟1306,將到來(lái)數(shù)據(jù)寫(xiě)入到存儲(chǔ)器器件的物理塊。在步驟1308,進(jìn)行存儲(chǔ)器器件中的任何開(kāi)放更新塊的垃圾回收。如需要,可以在步驟1308進(jìn)行任意量的垃圾回收而不會(huì)負(fù)面影響速度等級(jí)操作。對(duì)速度等級(jí)操作沒(méi)有負(fù)面影響,這是因?yàn)椴皇褂盟俣鹊燃?jí)操作的第一可尋址單元寫(xiě)入來(lái)測(cè)量順序?qū)懭胄阅躊w。
在一個(gè)實(shí)施例中,在步驟1308進(jìn)行的垃圾回收操作之后,標(biāo)識(shí)要寫(xiě)入的下一數(shù)據(jù)的寫(xiě)入類(lèi)型,如步驟1310所示??梢酝ㄟ^(guò)檢查正被寫(xiě)入的可尋址單元的邏輯開(kāi)始地址來(lái)確定寫(xiě)入類(lèi)型,如之前所述的寫(xiě)入類(lèi)型A、B或C。在一個(gè)實(shí)施例中,可以將與垃圾回收有關(guān)的數(shù)據(jù)的一些或部分自動(dòng)寫(xiě)入到易失性存儲(chǔ)器。在替換實(shí)施例中,可以依賴(lài)于垃圾回收的一個(gè)或多個(gè)特性將與垃圾回收有關(guān)的數(shù)據(jù)的一些或部分寫(xiě)入到易失性存儲(chǔ)器。例如,對(duì)是否寫(xiě)入與垃圾回收有關(guān)的數(shù)據(jù)的一部分的確定可以依賴(lài)于寫(xiě)入類(lèi)型。具體地,可以依賴(lài)于標(biāo)識(shí)的寫(xiě)入類(lèi)型,將關(guān)于更新塊的控制信息存儲(chǔ)在隨機(jī)存取存儲(chǔ)器中或者閃存中。作為另一例子,對(duì)是否寫(xiě)入與垃圾回收有關(guān)的數(shù)據(jù)的一部分的確定可以依賴(lài)于該寫(xiě)入是否填充(fill)更新塊。具體地,確定是否將信息的一部分寫(xiě)入到易失性存儲(chǔ)器。例如,該確定可以基于分析下一到來(lái)數(shù)據(jù)。具體地,在步驟1312,確定所標(biāo)識(shí)的寫(xiě)入類(lèi)型的下一到來(lái)數(shù)據(jù)是否將填充更新塊并且創(chuàng)建完整塊。如果該寫(xiě)入類(lèi)型的下一到來(lái)數(shù)據(jù)將完全填充更新塊,則在步驟1316,將信息的一部分存儲(chǔ)在易失性存儲(chǔ)器中,比如將控制信息存儲(chǔ)在隨機(jī)存取存儲(chǔ)器(RAM)中。該控制信息可以包括邏輯可尋址單元到物理元塊的映射信息或者其他信息??刂菩畔⒌睦影ǖ幌抻谶壿嫿M、元塊號(hào)、寫(xiě)入指針和頁(yè)標(biāo)簽。通過(guò)將控制信息存儲(chǔ)在RAM中而不是閃存中,存儲(chǔ)器器件中的可用的更新塊的最大數(shù)量可以擴(kuò)大,導(dǎo)致由于資源缺乏引起的強(qiáng)制的垃圾回收操作的減少。但是,如果在步驟1312處該寫(xiě)入類(lèi)型的下一到來(lái)數(shù)據(jù)將不完全填充更新塊,則在步驟1314,將該邏輯可尋址單元的控制信息存儲(chǔ)在閃存中。如果將控制信息存儲(chǔ)在RAM中,則可以在閃存中設(shè)置與邏輯可尋址單元對(duì)應(yīng)的電力循環(huán)標(biāo)志或者其他指示符。通過(guò)使用電力循環(huán)標(biāo)志,如果在具有存儲(chǔ)在RAM中的控制信息的更新塊關(guān)閉之前發(fā)生至存儲(chǔ)器器件的掉電,則在存儲(chǔ)器器件的重新初始化時(shí)可以發(fā)生控制信息的恢復(fù)。在重新初始化開(kāi)始之后,如果設(shè)置了電力循環(huán)標(biāo)志,則可以重構(gòu)控制信息(即使先前存儲(chǔ)在RAM中的控制信息丟失)。重構(gòu)控制信息的一種方式是通過(guò)使用空閑(free)更新塊列表,這是空閑的更新塊的列表。具體地,空閑更新塊列表可以用于確定空閑的更新塊,并且可以分析與那些空閑更新塊相關(guān)聯(lián)的數(shù)據(jù)的至少一部分。例如,可以分析頭部信息(比如第一頁(yè)中的頭部信息),以便可以確定更新塊中包含的數(shù)據(jù)。一旦確定更新塊中包含的數(shù)據(jù),就可以構(gòu)建控制信息。在存儲(chǔ)器器件的重新初始化之后,可隨后在另一更新塊的垃圾回收之后將此更新塊的重構(gòu)的控制信息存儲(chǔ)在閃存中。或者,可以將此更新塊的重構(gòu)的控制信息再次存儲(chǔ)在易失性存儲(chǔ)器(比如RAM)中。圖14例示選擇進(jìn)行垃圾回收(比如先占式垃圾回收)的操作模式的流程圖。具體的存儲(chǔ)器器件可以在不同的操作模式中不同地進(jìn)行垃圾回收。一個(gè)操作模式可以比另一操作模式更有效地進(jìn)行垃圾回收。例如,32納米閃存可以操作在第一操作模式(比如在忙碌時(shí)段中的垃圾回收)以及操作在第二操作模式(比如在邏輯可尋址單元的寫(xiě)入期間的垃圾回收)。可以在第一操作模式中進(jìn)行的32納米閃存的垃圾回收量可以不同于可以第二操作模式進(jìn)行的垃圾回收量。作為另一例子,70納米閃存可以在第一操作模式(比如在忙碌時(shí)段中的垃圾回收)中與第二操作模式(比如在邏輯可尋址單元的寫(xiě)入期間的垃圾回收)中不同地進(jìn)行垃圾回收。以前,當(dāng)由于存儲(chǔ)器約束而需要進(jìn)行垃圾回收時(shí),進(jìn)行了垃圾回收。相對(duì)照,當(dāng)閃存進(jìn)行垃圾回收更高效時(shí),可以以所選的操作模式進(jìn)行垃圾回收,比如圖14中所示。如上所述,可以以先占式方式進(jìn)行垃圾回收(比如關(guān)于圖6所述)。在以先占式方式進(jìn)行垃圾回收時(shí),閃存可以確定對(duì)于進(jìn)行垃圾回收更佳(或最佳)的操作模式。例如,閃存可以確定垃圾回收如果在忙碌時(shí)段期間進(jìn)行則更有效。如果這樣,閃存可以在忙碌時(shí)段期間進(jìn)行先占式垃圾回收。作為另一例子,閃存可以確定垃圾回收如果在邏輯可尋址單元的寫(xiě)入期間進(jìn)行則更有效。如果這樣,閃存可以在邏輯可尋址單元的寫(xiě)入期間進(jìn)行先占式垃圾回收。圖14是例示示出了選擇用于進(jìn)行垃圾回收的模式的具體例子、即通過(guò)監(jiān)視垃圾回收量?jī)?yōu)化存儲(chǔ)器器件的性能的方法1400的流程圖。存儲(chǔ)器可以基于一個(gè)或多個(gè)指示符、比如基于不同操作時(shí)段中垃圾回收的最大量的指示符來(lái)確定用以進(jìn)行垃圾回收的模式。具體地,方法1400監(jiān)視存儲(chǔ)器器件的單個(gè)忙碌時(shí)段中的垃圾回收的最大量以及在邏輯可尋址單元的寫(xiě)入期間復(fù)制的垃圾回收的最大量。通過(guò)使用方法1400,可以以先占式方式進(jìn)行忙碌時(shí)段中的垃圾回收的最大量,即使不需要這樣。方法1400可以作為忙時(shí)處理或者閑時(shí)處理而進(jìn)行。例如,存儲(chǔ)器控制器114可以實(shí)現(xiàn)方法1400。圖14中所述的方法1400的每個(gè)步驟可以單獨(dú)進(jìn)行或者組合進(jìn)行。在步驟1402,存儲(chǔ)器器件接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù)。在接收到來(lái)數(shù)據(jù)之后在步驟1404訪問(wèn)兩個(gè)參數(shù)。第一參數(shù)是在存儲(chǔ)器器件的單個(gè)忙碌時(shí)段中可以進(jìn)行的垃圾回收的最大量。忙碌時(shí)段可以包括從存儲(chǔ)器器件讀取數(shù)據(jù)以及向存儲(chǔ)器器件寫(xiě)入數(shù)據(jù)的期間。第二參數(shù)是在邏輯可尋址單元的寫(xiě)入期間可以進(jìn)行的垃圾回收的最大量??赡苓@兩個(gè)參數(shù)可以相等,但更可能第二參數(shù)將高于第一參數(shù)??梢詫⑦@兩個(gè)參數(shù)存儲(chǔ)在RAM中。如圖14所示,將這兩個(gè)參數(shù)彼此相比較以確定哪個(gè)模式存儲(chǔ)器器件在垃圾回收時(shí)更有效。在替換實(shí)施例中,存儲(chǔ)器器件可以包括不同的指示符以指示哪個(gè)模式對(duì)于垃圾回收更有效。例如,存儲(chǔ)器器件可以包括指示哪個(gè)模式在垃圾回收時(shí)更有效的垃圾回收模式標(biāo)志(garbage_collection_mode_flag)。以此方式,存儲(chǔ)器器件不需要確定哪個(gè)模式更有效(t匕如通過(guò)訪問(wèn)最大量),并且可以簡(jiǎn)單地訪問(wèn)該標(biāo)志來(lái)確定更有效的模式。在步驟1406,如果第二參數(shù)高于第一參數(shù),則方法1400繼續(xù)到步驟1408。在步驟1408,開(kāi)始更新塊的垃圾回收達(dá)第二參數(shù)的量。通過(guò)步驟1408和1410進(jìn)行垃圾回收操作直到垃圾回收量達(dá)到第二參數(shù)的量。如果在步驟1406第二參數(shù)不高于第一參數(shù),則在步驟1412開(kāi)始更新塊的垃圾回收達(dá)第一參數(shù)的量。在此情況下,通過(guò)步驟1412和1414進(jìn)行垃圾回收操作直到垃圾回收量達(dá)到第一參數(shù)的量。當(dāng)使用方法1400時(shí),使在向單個(gè)邏輯可尋址單元的寫(xiě)入器件的垃圾回收操作期間復(fù)制的數(shù)據(jù)量最大化。具體地,即使將邏輯可尋址單元完全寫(xiě)入到更新塊,然后垃圾回收仍對(duì)該更新塊繼續(xù),直到達(dá)到根據(jù)第一或第二參數(shù)的最大量。意圖以上詳細(xì)描述被當(dāng)作是例示而不是限制,并且應(yīng)理解意圖以下權(quán)利要求、包括所有等效物來(lái)定義本發(fā)明的精神和范圍。
權(quán)利要求
1.一種存儲(chǔ)器器件中的垃圾回收的方法,該方法包括:利用存儲(chǔ)器器件中的控制器:接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù);確定對(duì)于垃圾回收操作要進(jìn)行的垃圾回收量;如果確定的垃圾回收量小于預(yù)定閾值,則開(kāi)始垃圾回收操作以實(shí)現(xiàn)該預(yù)定閾值;以及向與該邏輯可尋址單元對(duì)應(yīng)的至少一個(gè)物理元塊寫(xiě)入到來(lái)數(shù)據(jù)。
2.如權(quán)利要求1的方法,其中開(kāi)始垃圾回收操作包括:選擇最近最少使用的更新塊用于垃圾回收操作;以及將等于該預(yù)定閾值的數(shù)量的數(shù)據(jù)從完整塊復(fù)制到該最近最少使用的更新塊,其中該預(yù)定閾值包括該確定的垃圾回收量。
3.如權(quán)利要求1的方法,其中:所述邏輯可尋址單元的大小是四兆字節(jié);所述物理元塊的大小是3兆字節(jié);以及所述預(yù)定閾值包括兩兆字節(jié)。
4.如權(quán)利要求1的方法,其中開(kāi)始垃圾回收操作包括:選擇第一最近最少使用的更新塊用于垃圾回收操作; 將第一數(shù)量的數(shù)據(jù)從該第一最近最少使用的更新塊復(fù)制到第一開(kāi)放更新塊,其中數(shù)據(jù)的該第一數(shù)量小于所述預(yù)定閾值;選擇第二最近最少使用的更新塊用于垃圾回收操作;以及將第二數(shù)量的數(shù)據(jù)從另一完整塊復(fù)制到該第二最近最少使用的更新塊,其中數(shù)據(jù)的該第二數(shù)量等于從所述預(yù)定閾值減去數(shù)據(jù)的該第一數(shù)量;其中該預(yù)定閾值包括該確定的垃圾回收量。
5.如權(quán)利要求4的方法,其中:所述邏輯可尋址單元的大小是四兆字節(jié);所述物理元塊的大小是三兆字節(jié);數(shù)據(jù)的該第一數(shù)量包括一兆字節(jié);以及所述預(yù)定閾值包括兩兆字節(jié)。
6.如權(quán)利要求1的方法,還包括:利用存儲(chǔ)器器件中的控制器:選擇最近最少使用的更新塊用于垃圾回收操作;如果對(duì)于該最近最少使用的更新塊的所確定的垃圾回收量大于所述預(yù)定閾值,則:選擇替換的更新塊而不是所選的最近最少使用的更新塊用于垃圾回收操作;(A)如果對(duì)于替換的更新塊的所確定的垃圾回收量大于所述預(yù)定閾值,則:(1)將到來(lái)數(shù)據(jù)寫(xiě)入到臨時(shí)存儲(chǔ)空間;以及(2)將第一數(shù)量的數(shù)據(jù)從完整塊復(fù)制到該替換的更新塊,其中數(shù)據(jù)的該第一數(shù)量等于所述預(yù)定閾值;以及(B)如果對(duì)于所述替換的更新塊的所確定的垃圾回收量小于所述預(yù)定閾值,則將第二數(shù)量的數(shù)據(jù)從所述替換的更新塊復(fù)制到開(kāi)放更新塊,其中數(shù)據(jù)的該第二數(shù)量小于所述預(yù)定閾值。
7.如權(quán)利要求6的方法,其中:所述邏輯可尋址單元的大小是四兆字節(jié);所述物理元塊的大小是三兆字節(jié);以及所述預(yù)定閾值包括兩兆字節(jié)。
8.如權(quán)利要求6的方法,其中所述臨時(shí)存儲(chǔ)空間包括二進(jìn)制高速緩存。
9.如權(quán)利要求6的方法,還包括:利用所述存儲(chǔ)器器件中的控制器:將到來(lái)數(shù)據(jù)從所述臨時(shí)存儲(chǔ)空間復(fù)制到開(kāi)放更新塊。
10.一種優(yōu)化存儲(chǔ)器器件的性能的方法,包括:利用所述存儲(chǔ)器器件中的控制器:接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù);確定第一更新塊和第二更新塊處于第一狀態(tài)還是第二狀態(tài);如果第一更新塊和第二更新塊處于第一狀態(tài),則:將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊,以便第一更新塊和第二更新塊被置于第二狀態(tài);以及如果第一更新塊和第二更新塊處于第二狀態(tài),則: 將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊以便第一更新塊和第二更新塊被置于第一狀態(tài)。
11.如權(quán)利要求10的方法,其中:所述邏輯可尋址單元的大小是四兆字節(jié);物理兀塊的大小是二兆字節(jié);預(yù)定閾值包括兩兆字節(jié);所述第一狀態(tài)包括:第一更新塊不包括數(shù)據(jù);以及第二更新塊包括在第二更新塊的邏輯開(kāi)始處的一兆字節(jié)的數(shù)據(jù);以及所述第二狀態(tài)包括:第一更新塊包括在第一更新塊的邏輯末尾處的兩兆字節(jié)的數(shù)據(jù);以及第二更新塊包括在第二更新塊的邏輯開(kāi)始處的兩兆字節(jié)的數(shù)據(jù)。
12.如權(quán)利要求11的方法,其中將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊以便第一更新塊和第二更新塊被置于第二狀態(tài)包括:開(kāi)始垃圾回收操作以從第二更新塊實(shí)現(xiàn)該預(yù)定閾值;以及將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊。
13.如權(quán)利要求11的方法,將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊以便第一更新塊和第二更新塊被置于第一狀態(tài)包括:開(kāi)始垃圾回收操作以從第一更新塊和第二更新塊實(shí)現(xiàn)該預(yù)定閾值;以及將到來(lái)數(shù)據(jù)寫(xiě)入到第一更新塊和第二更新塊。
14.如權(quán)利要求10的方法,還包括:利用所述存儲(chǔ)器器件中的控制器:(I)選擇最近最少使用的更新塊用于垃圾回收操作;(2)如果對(duì)于該最近最少使用的更新塊的所確定的垃圾回收量大于預(yù)定閾值,則:選擇替換的更新塊而不是所選的最近最少使用的更新塊用于垃圾回收操作;(A)如果對(duì)于替換的更新塊的所確定的垃圾回收量大于所述預(yù)定閾值,則:(i)將到來(lái)數(shù)據(jù)寫(xiě)入到臨時(shí)存儲(chǔ)空間;以及(ii)將第一數(shù)量的數(shù)據(jù)從該替換的更新塊復(fù)制到開(kāi)放更新塊,其中數(shù)據(jù)的該第一數(shù)量等于該預(yù)定閾值;以及(B)如果對(duì)于替換的更新塊的所確定的垃圾回收量小于所述預(yù)定閾值,則將第二數(shù)量的數(shù)據(jù)從該替換的更新塊復(fù)制到開(kāi)放更新塊,其中數(shù)據(jù)的該第二數(shù)量小于該預(yù)定閾值;以及(3)重復(fù)步驟(I)和(2),直到第一更新塊和第二更新塊處于第一狀態(tài)或者第二狀態(tài)。
15.一種存儲(chǔ)器器件,包括:存儲(chǔ)器;以及與所述存儲(chǔ)器通信的控制器,該控制器配置為:接收要寫(xiě)入到邏輯可尋址單元的到來(lái)數(shù)據(jù);確定對(duì)于垃圾回收操作要進(jìn)行的垃圾回收量;如果確定的垃圾回收量小于預(yù)定閾值,則開(kāi)始垃圾回收操作以實(shí)現(xiàn)該預(yù)定閾值;以及向與該邏輯可尋址單元 對(duì)應(yīng)的至少一個(gè)物理元塊寫(xiě)入到來(lái)數(shù)據(jù)。
16.如權(quán)利要求15的存儲(chǔ)器器件,其中所述控制器配置為通過(guò)以下開(kāi)始垃圾回收操作:選擇最近最少使用的更新塊用于垃圾回收操作;以及將等于該預(yù)定閾值的數(shù)量的數(shù)據(jù)從完整塊復(fù)制到該最近最少使用的更新塊,其中該預(yù)定閾值包括該確定的垃圾回收量。
17.如權(quán)利要求15的存儲(chǔ)器器件,其中所述控制器配置為通過(guò)以下開(kāi)始垃圾回收操作:選擇第一最近最少使用的更新塊用于垃圾回收操作;將第一數(shù)量的數(shù)據(jù)從該第一最近最少使用的更新塊復(fù)制到第一開(kāi)放更新塊,其中數(shù)據(jù)的該第一數(shù)量小于所述預(yù)定閾值;選擇第二最近最少使用的更新塊用于垃圾回收操作;以及將第二數(shù)量的數(shù)據(jù)從另一完整塊復(fù)制到該第二最近最少使用的更新塊,其中數(shù)據(jù)的該第二數(shù)量等于從所述預(yù)定閾值減去數(shù)據(jù)的該第一數(shù)量;其中該預(yù)定閾值包括該確定的垃圾回收量。
18.一種判定當(dāng)要在存儲(chǔ)器器件中進(jìn)行垃圾回收操作時(shí)的操作模式的方法,該方法包括:利用所述存儲(chǔ)器器件中的控制器:確定用于進(jìn)行垃圾回收操作的操作模式;響應(yīng)于確定用于進(jìn)行垃圾回收操作的操作模式,以所確定的模式進(jìn)行垃圾回收操作。
19.如權(quán)利要求18的方法,其中確定用于進(jìn)行垃圾回收操作的操作模式包括訪問(wèn)至少一個(gè)指示符。
20.如權(quán)利要求19的方法,其中該至少一個(gè)指示符包括:要在忙碌時(shí)段中進(jìn)行的垃圾回收的第一最大量,其中忙碌時(shí)段包括從該存儲(chǔ)器器件讀取數(shù)據(jù)或者向該存儲(chǔ)器器件寫(xiě)入到來(lái)數(shù)據(jù)的持續(xù)時(shí)間;以及要在邏輯可尋址單元的寫(xiě)入時(shí)段期間對(duì)于垃圾回收操作進(jìn)行的垃圾回收的第二最大量。
21.如權(quán)利要求20的方法,其中確定用于進(jìn)行垃圾回收操作的操作模式包括:將該第一最大量與該第二最大量相比較;如果該第一最大量大于該第二最大量,則確定用于進(jìn)行垃圾回收操作的忙碌時(shí)段;以 及如果該第二最大量大于該第一最大量,則確定用于進(jìn)行垃圾回收操作的寫(xiě)入時(shí)段。
22.如權(quán)利要求18的方法,還包括確定對(duì)于垃圾回收操作要進(jìn)行的垃圾回收量;以及其中進(jìn)行垃圾回收操作包括:響應(yīng)于確定垃圾回收量小于預(yù)定閾值,以所確定的模式開(kāi)始垃圾回收操作。
23.一種存儲(chǔ)器器件,包括:存儲(chǔ)器;以及與該存儲(chǔ)器通信的控制器,該控制器配置為:確定用于進(jìn)行垃圾回收操作的操作模式;響應(yīng)于確定用于進(jìn)行垃圾回收操作的操作模式,以所確定的模式進(jìn)行垃圾回收操作。
24.如權(quán)利要求23的存儲(chǔ)器器件,其中所述存儲(chǔ)器存儲(chǔ)至少一個(gè)指示符;以及其中所述控制器配置為通過(guò)訪問(wèn)所述至少一個(gè)指示符來(lái)確定用于進(jìn)行垃圾回收操作的操作模式。
全文摘要
本發(fā)明公開(kāi)一種對(duì)存儲(chǔ)器器件中的更新塊以先占式方式進(jìn)行強(qiáng)制量的垃圾回收操作的方法和系統(tǒng)。視需要監(jiān)視并調(diào)整某個(gè)數(shù)據(jù)寫(xiě)入所需的垃圾回收量以匹配該強(qiáng)制量??梢曰诟聣K的最近使用或者所需的垃圾回收量來(lái)選擇更新塊。另一方法和系統(tǒng)可以將關(guān)于更新塊的控制信息存儲(chǔ)在臨時(shí)存儲(chǔ)區(qū)域中以便利用較大數(shù)量的更新塊。通過(guò)使用此方法和系統(tǒng),可以?xún)?yōu)化通過(guò)速度等級(jí)測(cè)試所測(cè)量的順序?qū)懭胄阅堋?br>
文檔編號(hào)G06F12/02GK103080911SQ201180041989
公開(kāi)日2013年5月1日 申請(qǐng)日期2011年6月23日 優(yōu)先權(quán)日2010年6月30日
發(fā)明者W.吳, S.特雷斯特, J.黃, N.D.哈欽森, S.斯普勞斯 申請(qǐng)人:桑迪士克科技股份有限公司