本公開涉及存儲設備,例如固態驅動器。
背景技術:
固態驅動器(solid-statedrives,ssd)可以用在期望相對低的延遲和高容量存儲的應用中的計算機中。在一些示例中,存儲設備的控制器可以回收由存儲設備存儲的無效數據。例如,在存儲器的塊集存儲有效數據和無效(例如,過時)數據的情況下,控制器可以通過從塊集讀取有效數據,擦除整個塊集,并在相同或不同的物理位置將有效數據寫回存儲設備來移除無效數據。
技術實現要素:
在一些示例中,一種方法包括由存儲設備的控制器接收對所述存儲設備的第一塊集執行垃圾收集操作的命令,所述第一塊集至少包括與存儲設備的第一物理塊地址相關聯的第一塊。該方法還包括響應于接收到對第一塊集執行垃圾收集操作的命令,由控制器并且基于存儲在非易失性存儲器中的有效性表,確定存儲在第一塊集的第一塊處的數據是否有效。該方法還包括響應于確定存儲在第一塊集的第一塊中的數據有效,由控制器使得來自第一塊的數據被寫入存儲設備的第二塊集的第二塊。該方法還包括由控制器響應于使得來自第一塊的數據被寫入到第二塊而修改有效性表以指示存儲在第一塊中的數據無效,并且指示存儲在第二塊中的數據有效。
在一些示例中,存儲設備包括邏輯上劃分為多個塊集的至少一個存儲設備和控制器。所述控制器被配置以接收用以對所述多個塊集中的第一塊集執行垃圾收集操作的命令,所述第一塊集至少包括與所述存儲設備的第一物理塊地址相關聯的第一塊。響應于接收到對第一塊集執行垃圾收集操作的命令,控制器還被配置為基于存儲在非易失性存儲器中的有效性表來確定存儲在第一塊集的第一塊處的數據是否有效。響應于確定存儲在第一塊集的第一塊中的數據有效,控制器還被配置為使得來自第一塊的數據被寫入到多個塊集中的第二塊集的第二塊。響應于使得來自第一塊的數據被寫入第二塊,控制器還被配置為修改有效性表以指示存儲在第一塊中的數據無效,并且指示存儲在第二塊中的數據有效。
在一些示例中,一種包括指令的計算機可讀存儲媒體,所述指令在被執行時配置存儲設備的一個或一個以上處理器以接收對所述存儲設備的第一塊集執行垃圾收集操作的命令,所述第一塊集至少包括與存儲設備的第一物理塊地址相關聯的第一塊。響應于接收到對第一塊集執行垃圾收集操作的命令,所述指令還配置存儲設備的一個或多個處理器,以基于存儲在非易失性存儲器中的有效性表來確定存儲在確定存儲在第一塊集的第一塊中的數據有效,響應于第一塊集的第一塊有效,使得來自第一塊的數據被寫入存儲設備的第二塊集的第二塊,并且響應于使得來自第一塊的數據被寫入第二塊,修改有效性表以指示存儲在第一塊中的數據無效并且指示存儲在第二塊中的數據有效。
在一些示例中,一種系統包括用于接收對存儲設備的第一塊集執行垃圾收集操作的命令的裝置,所述第一塊集至少包括與存儲設備的第一物理塊地址相關聯的第一塊。該系統還包括用于基于存儲在非易失性存儲器中的有效性表來確定存儲在第一塊集的第一塊處的數據是否有效的裝置。該系統還包括用于響應于確定存儲在第一塊集的第一塊中的數據有效而使來自第一塊的數據被寫入存儲設備的第二塊集的第二塊的裝置。該系統還包括用于響應于使得來自第一塊的數據被寫入第二塊而修改有效性表以指示存儲在第一塊中的數據無效并且指示存儲在第二塊中的數據有效的裝置。
在附圖和下面的描述中闡述了一個或多個示例的細節。從說明書和附圖以及從權利要求書中,其它特征、目的和優點將是清楚的。
附圖說明
圖1是示出包括連接到主機設備的存儲設備的示例系統的概念和示意框圖。
圖2是說明包含多個塊集的示例存儲器器件12aa的概念框圖,其中每一塊集包括多個塊。
圖3是示出示例控制器的概念和示意框圖。
圖4是示出塊的分布和相應的有效性表的示例繪圖。
圖5是示出用于對塊集執行垃圾收集操作的示例技術的流程圖。
圖6是示出用于執行寫入操作的示例技術的流程圖。
具體實施方式
本公開描述了用于在諸如固態驅動器的存儲設備中進行有效性跟蹤的技術。在一些示例中,可以在存儲設備的垃圾收集操作期間利用有效性跟蹤技術。例如,存儲設備(例如,nand固態驅動器)可以包括多個塊集。另外,每個塊集可以包括多個塊,每個塊可以包括多個數據扇區。在一些示例中,存儲設備的控制器可以僅在擦除先前存儲在塊中的數據之后才將數據寫入塊。此外,這樣的存儲設備可以僅允許擦除塊的整個塊集。為了適應這種小的寫入粒度和大的擦除粒度,存儲設備可以使用回收塊集的垃圾收集處理。更具體地,可以在擦除塊集之前將塊集的有效塊遷移到另一塊集,以防止丟失存儲在有效塊處的數據。一旦擦除,控制器可以使用塊集來存儲新數據。
一些垃圾收集處理可以使用間接系統來跟蹤塊集的塊是否包含有效數據。例如,存儲在塊集中的數據可以包括列出用于塊集的邏輯塊地址的物理清單。間接系統可以包括將每個邏輯塊地址映射到塊的物理塊地址的邏輯到物理表。使用物理清單和邏輯到物理表,控制器可以實現垃圾收集技術并且確定塊是否包含有效數據。更具體地,如果物理清單中指示的邏輯塊地址被邏輯到物理表映射到特定物理塊地址,則控制器可以確定在特定物理塊地址處的塊有效。然而,使用物理清單的有效性跟蹤可能需要物理清單和邏輯到物理表以使能正確的垃圾收集。此外,物理清單可以被附加以包括新的邏輯塊地址,而不去除無效的邏輯塊地址。因此,這樣的垃圾收集處理在計算上可能是低效的,因為即使大多數條目可能是無效的,控制器也可能檢查物理清單中的每個條目。由于這樣的復雜性,使用間接系統來跟蹤塊是否包含有效數據的存儲設備可能使用復雜的固件控制算法,其對于存儲設備的通用處理器來說是相當大的負擔。
根據本發明的技術,控制器可實施垃圾收集技術,其使用有效性表來跟蹤塊集的塊是否含有有效數據。例如,有效性表可以指示由存儲設備的每個物理塊存儲的數據的有效性。例如,邏輯“1”可以指示相應塊存儲了有效數據,邏輯“0”可以指示相應塊存儲了無效數據。在一些示例中,存儲設備的控制器可以在寫入操作期間更新有效性表。例如,響應于從主機接收指示存儲器器件將與邏輯塊地址相關聯的數據寫入存儲設備的指令,存儲設備可以將數據存儲到存儲設備的塊,并且將有效性表中的對應于該塊的有效性位置位為指示有效數據(例如,邏輯“1”)。然后,響應于從主機設備接收與邏輯塊地址相關聯的更新數據,存儲設備可以將更新的數據存儲到新塊,置位在有效性表中的與該新塊對應有效性位為指示有效數據(例如,邏輯“1”),并清除有效性表中的與舊塊對應的有效性位以指示無效數據(例如,邏輯“0”)。這樣的處理可以適應不同的間接系統和物理清單,因為數據有效性處理可以與間接系統和物理清單脫離或分離。此外,使用有效性表的垃圾收集處理可以是對存儲設備的通用處理器上的低負擔,因為簡單的比特查找可以用于確定數據是否有效,而不是使用間接表、物理清單或兩者的更復雜的算法。在一些示例中,使用有效性表的垃圾收集處理可以在硬件中實現,以甚至進一步減少存儲設備的通用處理器上的負擔。例如,響應于硬件加速器引擎從控制器接收物理塊地址(例如,塊集)的范圍,硬件加速器引擎可以將物理塊地址范圍內的包含有效數據的物理塊地址輸出到控制器。
圖1是示出包括連接到主機設備15的存儲設備2的示例系統1的概念和示意框圖。主機設備15可以利用包括在存儲設備2中的存儲設備來存儲和檢索數據。如圖1所示,主機設備15可以經由接口10與存儲設備2通信。主機設備15可以包括任何計算設備,包括例如計算機服務器、網絡附接存儲(nas)單元、臺式計算機、筆記本(例如,膝上型計算機)、平板計算機,機頂盒、諸如“智能”電話的移動計算設備、電視、相機、顯示設備、數字媒體播放器、視頻游戲控制臺、視頻流設備等。
如圖1所示,存儲設備2可以包括控制器4\非易失性存儲器陣列6(nvma6),高速緩存8和接口10。在一些示例中,存儲設備2可以包括圖1中未示出的附加組件,為清楚起見。例如,存儲設備2可以包括功率輸送部件,包括例如電容器、超級電容器或電池;存儲設備2的部件被機械附接到其上且包括使得存儲設備2的部件電互連的導電跡線的印刷電路板(pb);或類似物。
在一些示例中,存儲設備2的物理尺寸和連接器配置可以符合一個或多個標準形式因素。一些示例標準形式因素包括但不限于3.5”硬盤驅動器(hdd)、2.5”hdd、1.8”hdd、外圍組件互連(pci)、pci擴展(pci-x)、pciexpress(pcie)(例如,pciex1、x4、x8、x16、pcie迷你卡、minipci等)。在一些示例中,存儲設備2可以直接耦合(例如,直接焊接)到主機設備15的母板。
接口10可以將存儲設備2與主機設備15電連接。例如,接口10可以包括用于與主機設備15交換數據的數據總線和用于與主機設備15交換命令的控制總線中的一個或兩個。接口10可以根據任何合適的協議來操作。例如,接口10可以根據以下協議中的一個或多個來操作:高級技術附件(ata)(例如,串行ata(sata)和并行ata(pata))、光纖通道、小型計算機系統接口(scsi)、串行連接的scsi(sas)、外圍組件互連(pci)、pci-express和非易失性存儲器快速(nvme)。接口10(例如,數據總線、控制總線或兩者)的電連接可以電連接到控制器4,提供主機設備15和控制器4之間的電連接,允許數據在主機設備15和控制器4之間交換。在一些示例中,接口10的電連接還可以允許存儲設備2從主機設備15接收電力。
存儲設備2包括控制器4,其可以管理存儲設備2的一個或多個操作。例如,控制器4可以管理從存儲器器件12aa-12nn(統稱為“存儲器器件12”)讀取數據和/或將數據寫入存儲器器件12aa-12nn。在一些示例中,盡管在圖1中未示出,存儲設備2還可以包括讀通道、寫通道或兩者,其還可以管理存儲設備2的一個或多個操作。例如,作為一個示例,讀通道管理從存儲器器件12,并且作為一個示例,寫通道可以管理對存儲器器件12的寫入。在一些示例中,讀通道可以執行本公開的技術,諸如確定由存儲器器件12的存儲器單元存儲的相應位的值。
nvma6可以包括每個可以被配置為存儲和/或檢索數據的存儲器器件12aa-12nn(統稱為“存儲器器件12”)。例如,存儲器器件12的存儲器器件可以從控制器4接收指示存儲器器件存儲數據的數據和消息。類似地,存儲器器件12的存儲器器件可以從控制器4接收指示存儲器器件檢索數據的消息。在一些示例中,存儲器器件12中的每一者可被稱為裸芯。在一些示例中,單個物理芯片可以包括多個裸芯(即,多個存儲器器件12)。在一些示例中,每個存儲器器件12可以被配置為存儲相對大量的數據(例如,256mb、512mb、1gb、2gb、4gb、8gb、16gb、32gb、64gb、128gb、256gb、512gb、1tb等)。
在一些示例中,存儲器器件12可以包括任何類型的非易失性存儲設備。存儲器器件12的一些示例包括但不限于閃存器件、相變存儲器(pcm)裝置、電阻式隨機存取存儲器(reram)裝置、磁阻隨機存取存儲器(mram)裝置、鐵電隨機存取存儲器存取存儲器(f-ram)、全息存儲器器件和任何其它類型的非易失性存儲器器件。
閃存器件可以包括基于nand或nor的閃存器件,并且可以基于包含在每個閃存單元的晶體管的浮置柵極中的電荷來存儲數據。在nand閃存器件中,閃存器件可劃分為多個塊集,每一塊集可被劃分為多個塊(例如,頁)。圖2是說明示例存儲器器件12aa的概念框圖,所述示例存儲器器件12aa包括塊集16a-16n(統稱為“塊集16”),其中每一者被劃分為塊18aa-18nm(統稱為“塊18”)。特定存儲器器件(例如,存儲器器件12aa)內的塊18的每一塊可包含多個閃存單元。在nand閃存器件中,可使用字線電連接若干行閃存單元以界定塊18的塊。塊18中的每一者中的各單元可電連接到相應位線。控制器4可以在塊級別向nand閃存器件寫入數據和從nand閃存器件讀取數據,并在塊集級別從nand閃存器件擦除數據。
在一些示例中,控制器4單獨連接到存儲器器件12的每個存儲器器件可能是不實際的。這樣,存儲器器件12和控制器4之間的連接可以被多路復用。作為示例,存儲器器件12可以被分組成通道。分組到每個通道中的存儲器器件12可以共享與控制器4的一個或多個連接。例如,分組到第一通道中的存儲器器件12可以附接到公共i/o總線和公共控制總線。存儲設備2可以包括用于通道的每個相應通道的公共i/o總線和公共控制總線。
存儲設備2還包括高速緩存8,其可以存儲由控制器4使用的用于控制存儲設備2的操作的數據。高速緩存8可以存儲由控制器4用于間接系統以管理存儲在nvma6中的數據的信息。例如,控制器4可以將存儲在高速緩存8中的邏輯到物理表中的一組邏輯塊地址的每個邏輯塊地址與nvma6的塊的對應物理塊地址進行映射。高速緩存8可以存儲用于間接系統的任何合適的信息,例如,高速緩存8可以存儲標識nvma6的命名空間的信息。在一些示例中,用于間接系統的信息可以存儲在易失性存儲器中。例如,邏輯到物理表可以存儲在高速緩存8的易失性存儲器中。在一些示例中,用于間接系統的信息可以存儲在非易失性存儲器中。例如,邏輯到物理表可以存儲在高速緩存8的非易失性存儲器中。高速緩存8可以包括例如隨機存取存儲器(ram)、動態隨機存取存儲器(dram)、靜態ram(sram)和同步動態ram(sdram(例如,ddr1、ddr2、ddr3、ddr3l、lpddr3、ddr4))等。
控制器4可以管理存儲設備2的一個或多個操作。控制器4可以經由接口10與主機設備15通信并且管理存儲在存儲器器件12中的數據。例如,響應于控制器4從主機設備15接收數據和邏輯塊地址,控制器4可以使nvma6將數據寫入存儲器器件12aa的物理塊地址,并在存儲在高速緩存8中的邏輯到物理表中將該物理塊地址映射到該邏輯塊地址。控制器4可以包括微處理器、數字信號處理器(dsp)、專用集成電路(asic)、現場可編程門陣列(fpga)或其它數字邏輯電路。
根據本公開的技術,控制器4可以在高速緩存8中存儲有效性表(例如,物理有效性表)。當對nvma6執行垃圾收集操作時,控制器4可以利用有效性表。例如,響應于控制器4從主機裝置15接收到對塊集(例如,nvma6的存儲器器件12aa的塊16a)執行垃圾收集操作的命令,控制器4可以基于有效性表而不是使用間接系統確定每一塊(例如,塊18aa-18am)是否有效(即,存儲有效數據)。更具體地,如果存儲在高速緩存8中的有效性表包括其中置位了位的第一塊的條目,則控制器4可以確定塊集的第一塊有效。然后,控制器4可以使得來自第一塊的數據被寫入nvma6的另一個塊集的第二塊。例如,控制器4可以指示nvma6將數據從第一塊遷移到第二塊,并且控制器4可以更新存儲在高速緩存8中的邏輯到物理表,使得由邏輯到物理表先前映射到第一塊的邏輯塊地址被映射到第二塊。接下來,控制器4可以更新高速緩存8的有效性表,以指示存儲在第一塊中的數據無效并且指示存儲在第二塊中的數據有效。例如,控制器4可以置位有效性表中與第二塊相對應的位,并清除有效性表中的與第一塊相對應的位。一旦所有有效數據從特定塊集的相應有效塊被遷移,并且有效性表中與特定塊集相對應的每個位被清除,則控制器4可以指示nvma6擦除該塊集。以這種方式,控制器4可以回收塊集而不需要在間接系統中的前向搜索以確定由塊集中的塊存儲的數據是否有效。
在一些示例中,高速緩存8可以包括非易失性存儲器,使得保持有效性表而不向高速緩存8提供電力,允許在存儲設備2的重置之后確定存儲設備2的每個塊的有效性。這種非易失性存儲器可以是具有隨機字節粒度讀取和寫入容量的任何合適的介質。非易失性存儲器的示例可以包括例如相變存儲器(pcm)、靜態ram(sram)、磁阻隨機存取存儲器(mram)等。在一些示例中,有效性表可以相對較小(例如,32mb),使得可以使用快速和/或昂貴的存儲器來存儲有效性表。例如,使用單個位來指示1tb存儲設備的每個4kb間接單元(例如,塊)的有效性可以僅使用32mb的高速緩存8。在一些示例中,高速緩存8可以包括易失性存儲器,且來自高速緩存8的數據可以在功率丟失事件期間遷移到永久存儲器。例如,在功率丟失事件期間,控制器4可以將有效性表從高速緩存8的易失性存儲器(例如,dram)移動到非易失性存儲器(例如,nvma6,高速緩存8的非易失性存儲器等)。
根據本公開的技術,控制器4可實施垃圾收集技術,其使用存儲在高速緩存8中的有效性表來跟蹤nvma6的塊集的塊是否含有有效數據,而無需使用間接表、物理清單或兩者的復雜算法。例如,控制器4可以通過存儲在高速緩存8中的有效性表的簡單位查找來確定由nvma6的每個物理塊存儲的數據的有效性。另外,控制器4可以適應不同的間接系統和物理清單,因為數據有效性處理可以與間接系統和物理清單脫離或分離。
圖3是示出示例控制器4的概念和示意框圖。如所示,控制器4可以包括寫入模塊22、維護模塊24、讀取模塊26、地址轉換模塊28和有效性模塊30。在一些示例中,控制器4可以可選地包括垃圾收集硬件加速器32。
地址轉換模塊28可以將主機設備15使用的邏輯塊地址與nvma6的物理塊地址相關聯。例如,響應于地址轉換模塊28從主機設備15接收邏輯塊地址作為讀取或寫入命令的一部分,地址轉換模塊28可使用間接系統(例如,存儲在高速緩存8中的虛擬或邏輯到物理表)來確定與該邏輯塊地址相對應的nvma6的物理塊地址。
讀取模塊26可以從主機設備15接收命令以從nvma6檢索數據。例如,響應于讀取模塊26從主機設備15接收到在邏輯塊地址處讀取數據的命令,讀取模塊26可以從nvma6檢索數據。
寫入模塊22可以從主機設備15接收命令以將數據寫入nvma6。例如,響應于寫入模塊22從主機設備15接收到將數據寫入邏輯塊地址的命令,寫入模塊22可以將數據寫入與物理塊地址相關聯的nvma6的可用塊。在一些示例中,寫入模塊22可以例如但不限于從主機設備15、從控制器4的另一模塊(例如地址轉換模塊28)或類似物接收與nvma6的可用塊相關聯的物理塊地址。在一些示例中,寫入模塊22可以確定與nvma6的可用塊相關聯的物理塊地址。
有效性模塊30可以使用存儲在高速緩存8中的有效性表來確定存儲在nvma6中的數據是有效還是無效。例如,有效性模塊30可以在高速緩存8中存儲的有效性表中置位對應于包含更新數據的塊,以及在高速緩存8中存儲的有效性表中清除與包含舊數據的塊相對應的有效性值。然后,有效性模塊30可以通過有效性值的簡單位查找來確定塊是否包含有效數據。在一些示例中,有效性模塊30可以使用存儲在高速緩存8中的有效性表來確定塊集的每個塊是否包含有效數據。在一些示例中,有效性模塊30可以當塊的至少一個數據扇區包含有效數據時確定該塊含有有效數據。以這種方式,有效性模塊30可以減少控制器4的處理器上的計算負擔。
維護模塊24可以重新定位有效數據(例如,不過時的)以回收塊集16。例如,響應于有效性模塊30使用存儲在高速緩存8中的有效性表來確定只有塊集16a的數據集18aa和18am包含有效數據,維護模塊24可使讀取模塊26和寫入模塊22重新定位存儲在塊18aa和18am中的數據,以允許回收塊集16a。
在控制器4包括垃圾收集硬件加速器32的情況下,垃圾收集硬件加速器32可以執行一個或多個垃圾收集處理,而不是控制器4的通用處理器,以減少控制器4的計算負擔。例如,垃圾收集硬件加速器32可使用存儲在高速緩存8中的有效性表來確定存儲在塊中的數據是否有效。垃圾收集硬件加速器32可包括微處理器、數字信號處理器(dsp)、專用集成電路(asic)、現場可編程門陣列(fpga)或其它數字邏輯電路。
在一些情況下,控制器4可以接收對塊集執行垃圾收集操作的命令。例如,主機設備15可以向存儲設備2發送命令,指令存儲設備2對存儲設備2的塊集16a執行垃圾收集操作。作為另一個示例,控制器4可以執行確定何時對塊集執行垃圾收集操作的固件。
響應于控制器4接收到執行垃圾收集操作的命令,有效性模塊30可以確定存儲在第一塊集的第一塊處的數據是否有效。在一些示例中,有效性模塊30可以基于指示有效值的有效性值來確定存儲在第一塊處的數據是否有效。例如,響應于有效性模塊30確定由高速緩存8的有效性表映射到與塊集16a的塊18aa相關聯的物理位置的有效性值指示有效值(例如,被置位),有效性模塊30可以確定存儲在塊18aa處的數據有效。
響應于有效性模塊30確定存儲在第一塊集的第一塊處的數據有效,維護模塊24可使得來自第一塊集的第一塊的數據被寫入到第二塊塊集中的第二塊。例如,響應于有效性模塊30確定塊18aa包含有效數據,維護模塊24可以將存儲在塊集16a的塊18aa處的數據重新定位到塊集16b的塊18ba。更具體地,維護模塊24可以使得讀取模塊26讀取存儲在塊集16a的塊18aa處的數據,并使寫入模塊22將由讀取模塊26讀取的數據寫入塊集16b的塊18ba。
響應于維護模塊24使得來自第一塊集的第一塊的數據被寫入第二塊集的第二塊,有效性模塊30可以修改存儲在高速緩存8中的有效性表,以指示存儲在第一塊中的數據無效并且指示存儲在第二塊中的數據有效。例如,有效性模塊30可以修改存儲在高速緩存8中的有效性表,以指示存儲在塊18aa中的數據無效,并且指示存儲在塊18ba中的數據有效。更具體地,有效性模塊30可以清除由高速緩存8中存儲的有效性表映射到與塊18aa相關聯的物理塊地址的有效性值,并置位由高速緩存8中存儲的有效性表映射到與塊18ab相關聯的物理塊地址的有效性值。
在一些示例中,維護模塊24還可以更新邏輯到物理表以將邏輯塊地址與nvma6的塊相關聯。例如,響應于維護模塊24使得來自第一塊集的第一塊的數據被寫入第二塊集的第二塊,則維護模塊24可更新高速緩存8的邏輯到物理表以將先前與第一塊(例如,塊18aa)相關聯的邏輯塊地址與第二塊(例如,塊18ba)相關聯。更具體地,維護模塊24可更新高速緩存8的邏輯到物理表以將邏輯塊地址映射到與第二塊(例如,塊18ba)相關聯的物理塊地址。盡管上述示例示出了塊集中的單個有效塊,但是應當理解,在一些示例中,可以對于塊集的每個塊類似地重復上述技術。以這種方式,控制器4可以處理塊集,使得保留所有有效數據。
在一些示例中,一種方法包括由存儲設備2的控制器4接收對存儲設備2的塊集16a執行垃圾收集操作的命令,其中塊集16a至少包括與第一物理塊地址相關聯的塊18aa。該方法進一步包括,響應于接收到對第一塊集執行垃圾收集操作的命令,通過控制器4并基于存儲在高速緩存8中的有效性表,確定存儲在塊集16a的塊18aa處的數據是否有效。該方法還包括響應于確定存儲在塊集16a的塊18aa中的數據有效,通過控制器4使得來自塊18aa的數據被寫入存儲設備2的塊集16b的塊18ba。該方法還包括響應于使得來自塊18aa的數據被寫入塊18ba,由控制器4修改有效性表以指示存儲在塊18aa中的數據無效,并且指示存儲在塊18ba中的數據有效。
在控制器4包括垃圾收集硬件加速器32的情況下,垃圾收集硬件加速器32可以執行一個或多個垃圾收集處理,而不是控制器4的處理器執行模塊,以減少控制器的通用處理器上的計算負擔。例如,垃圾收集硬件加速器32可以確定存儲在第一塊中的數據是否有效。例如,垃圾收集硬件加速器32可以查找由高速緩存8的有效性表映射到與塊集16a的塊18aa相關聯的物理位置的有效性值。然后,響應于垃圾收集硬件加速器32確定由高速緩存8的有效性表映射到與塊集16a的塊18aa相關聯的物理位置的有效性值指示有效值(例如,被置位),垃圾收集硬件加速器32可以確定在塊18aa處存儲的數據有效。盡管上述示例示出了確定存儲在第一塊中的數據是否有效,但是應當理解,在一些示例中,可以對塊集的每個塊類似地重復上述技術。
垃圾收集硬件加速器32可以向控制器4輸出用于垃圾收集的物理塊地址的列表。例如,響應于垃圾收集硬件加速器32從控制器4接收物理塊地址的一個范圍,垃圾收集硬件加速器32可以向控制器4輸出物理塊地址的該范圍內的有效的塊。更具體地,如果該塊與存儲在高速緩存8中的物理有效性表中的邏輯“1”相關聯,則垃圾收集硬件加速器32可以確定具有在從控制器4提供的物理塊地址的該范圍內的物理塊地址的塊有效。然后,垃圾收集硬件加速器32可以向控制器4輸出物理塊地址的該范圍中的與物理有效性表中的邏輯“1”相關聯的所有物理塊地址的列表。以這種方式,垃圾收集硬件加速器32可以減少控制器4的通用處理器上的負擔。
在一些示例中,垃圾收集硬件加速器32可以向控制器4提供準備寫入數據和對應的邏輯塊地址的列表。例如,垃圾收集硬件加速器32可以使nvma6讀取塊集的物理清單,并且垃圾收集硬件加速器32可以使用物理清單來確定與塊集的塊相關聯的邏輯塊地址。然后,垃圾收集硬件加速器32可以向控制器4(例如,維護模塊24)提供將塊移動到另一物理塊地址、并且用從物理清單確定的邏輯塊地址更新高速緩存8的邏輯到物理表的請求。以這種方式,重新定位數據以回收塊集可以由垃圾收集硬件加速器32基本上自動化,從而進一步減少控制器4的通用處理器上的計算負擔。
圖4是示出塊40的分布和對應的有效性表42的示例圖。在一些示例中,有效性表42可以包括作為單個比特的有效性值44。如圖所示,有效性表42將清除位(例如,邏輯'0')與塊50、塊51、塊55和塊57相關聯。也就是說,塊50、塊51、塊55和塊57可以包含無效數據(例如,過時(stale)數據)。過時數據的示例可以包括其中數據的更新版本存儲在其他物理塊中的實例。如圖所示,有效性表42將置位的位(例如,邏輯'1')與塊52、塊53、塊54和塊56相關聯。也就是說,塊52、塊53、塊54和塊56可以包含有效數據。以這種方式,有效性模塊30和/或垃圾收集硬件加速器32可以使用有效性表42的簡單位查找來確定存儲在nvma6中的數據的有效性。如上所述,在一些示例中,單個位可以為每個塊(例如,塊40)指示有效性值(例如,邏輯“1”用于有效,邏輯“0”用于無效),其可允許有效性表42利用相對較少的存儲器空間來允許使用快速存儲器(例如,sram)。另外,控制器(例如,圖3的控制器4)可以適應不同的間接系統和物理清單,因為數據有效性處理可以使用有效性表42,而不是與間接系統和物理清單相關聯的信息(例如,邏輯到物理表)。此外,使用有效性表42的垃圾收集處理可以是存儲設備(例如,圖1的存儲設備2)的通用處理器上的低負擔,因為簡單的比特查找可以用于確定數據是否有效,而不是使用間接表、物理清單或兩者的更復雜的算法。此外,使用有效性表42的垃圾收集處理可在硬件(例如,垃圾收集硬件加速器32)中實施以甚至進一步減少存儲設備(例如,圖1的存儲設備2)的通用處理器上的負擔。
圖5是示出用于對塊集執行垃圾收集操作的示例技術的流程圖。將同時參考圖1的示例系統1和圖3的控制器4來描述圖5的技術,以便于描述。
存儲設備2可以接收用于對第一塊集執行垃圾收集操作的命令(102)。例如,維護模塊24可以從主機設備15接收對第一塊集執行垃圾收集操作的命令。作為另一示例,維護模塊24可以確定對第一塊集執行垃圾收集操作。然后,有效性模塊30可以讀取由有效性表映射到第一塊集的第一塊的有效性值(104)。例如,有效性模塊30可以查找由高速緩存8的有效性表與第一塊集的第一塊相對應的物理塊地址相關聯的位。或者,垃圾收集硬件加速器32可讀取由有效性表映射到第一塊集的第一塊的有效性值。
在有效性模塊30確定有效性值指示存儲在該塊處的數據無效(106的“否”分支)的情況下,處理針對下一位(116)重新開始。例如,可以對第一塊集的每個塊重復該處理。
另一方面,在有效性模塊30確定有效性值指示存儲在第一塊處的數據有效(106的“是”分支)的情況下,有效性模塊30將有效塊的指示傳送到寫入模塊22,并且寫入模塊22將數據從第一塊寫入第二塊集的第二塊(108)。例如,寫入模塊22可以從維護模塊24或地址轉換模塊28接收與可用(當前不存儲數據)的第二塊相關聯的物理塊地址。然后,讀取模塊26檢索存儲在第一塊處的數據,寫入模塊22將數據寫入第二塊。
一旦寫入模塊22將數據寫入第二塊,有效性模塊30將第一塊的有效性值清除為邏輯'0'(110)。例如,有效性模塊30可以清除由高速緩存8中存儲的有效性表映射到由存儲在高速緩存8中的間接表與第一塊相關聯的第一物理塊地址的位。另外,有效性模塊30將第二塊的有效性值置位為邏輯“1”(112)。例如,有效性模塊30可以置位由存儲在高速緩存8中的有效性表映射到由存儲在高速緩存8中的間接表與第二塊相關聯的第二物理塊地址的位。在一些示例中,有效性模塊30可清除映射到第一物理塊地址的位,且同時(例如,以原子方式)置位映射到第二物理塊地址的位。
響應于寫入模塊22將數據寫入第二物理塊地址,維護模塊24還可更新間接表以指示存儲在與邏輯塊地址相關聯的第二塊處的數據(114)。例如,維護模塊24可以通過存儲在高速緩存8中的間接表來更新映射,以將邏輯塊地址與第二物理塊地址而不是第一物理塊地址相關聯,該第二物理塊地址與第二塊相關聯。在一些示例中,維護模塊24可以同時(例如,以原子方式)更新間接表,且有效性模塊30清除映射到第一物理塊地址的位和/或置位映射到第二物理塊地址的位。一旦維護模塊24更新邏輯到物理表,該處理針對下一位重新開始(116),直到塊集的每個有效塊被重新定位以允許塊集被回收。
圖6是示出用于執行寫入操作的示例技術的流程圖的技術。將同時參考圖1的示例系統1和圖3的控制器4來描述圖6,以便于描述。
存儲設備2可以接收將數據寫入邏輯塊地址的指令(202)。例如,寫入模塊22可以從主機設備15接收將數據寫入邏輯塊地址的指令。然后,地址轉換模塊28使用邏輯到物理表來確定與邏輯塊地址相對應的第一物理塊地址(204)。例如,地址轉換(translation)模塊28可以通過高速緩存8的邏輯到物理表中的邏輯塊地址的查找來確定第一物理塊地址。然后,寫入模塊22接收第二物理塊地址(206)。例如,主機設備15可以向寫入模塊22輸出可用物理塊地址的列表。響應于寫入模塊22接收到第二物理塊地址,寫入模塊22可以將數據從第一塊寫入第二物理塊地址(208)。
響應于寫入模塊22將數據寫入第二物理塊地址,有效性模塊30可將第一物理塊地址的有效性值清除為邏輯'0'(210)。例如,有效性模塊30可以清除與第一物理塊地址相對應的位。另外,有效性模塊30可將第二物理塊地址的有效性值置位為邏輯'1'(212)。例如,有效性模塊30可以置位與第二物理塊地址相對應的位。在一些示例中,有效性模塊30可以將第一物理塊地址的有效性值清除為邏輯'0',并且同時(例如以原子方式)將第二物理塊地址的有效性值置位為邏輯'1'。
響應于寫入模塊22將數據寫入第二物理塊地址,維護模塊24可更新邏輯到物理表以將邏輯塊地址與第二物理塊地址相關聯(214)。例如,維護模塊24可以將邏輯塊地址與第二物理塊地址映射。在一些示例中,維護模塊24可更新邏輯到物理表以將邏輯塊地址與第二物理塊地址相關聯,同時(例如,以原子方式)有效性模塊30將第一物理塊地址的有效性值清除為邏輯“0”和/或將第二物理塊地址的有效性值置位為邏輯“1”。
本公開中描述的技術可以至少部分地在硬件、軟件、固件或其任何組合中實現。例如,所描述的技術的各個方面可以在一個或多個處理器內實現,該一個或多個處理器包括一個或多個微處理器、數字信號處理器(dsp)、專用集成電路(asic)、現場可編程門陣列(fpga)或任何其它等效集成或離散邏輯電路、以及這些組件的任何組合。術語“處理器”或“處理電路”通常可以指代任何前述邏輯電路,單獨地或與其他邏輯電路組合或任何其它等效電路。包括硬件的控制單元還可以執行本公開的一個或多個技術。
這樣的硬件、軟件和固件可以在相同的設備內或在單獨的設備內實現,以支持本公開中描述的各種技術。另外,所描述的單元、模塊或組件中的任何一個可以一起或單獨實現為離散但可互操作的邏輯設備。將不同特征描述為模塊或單元旨在突出不同的功能方面,并且不一定意味著這樣的模塊或單元必須由單獨的硬件、固件或軟件組件實現。相反,與一個或多個模塊或單元相關聯的功能可以由單獨的硬件、固件或軟件組件來執行,或者集成在公共或單獨的硬件、固件或軟件組件內。
本發明中所描述的技術還可在包括編碼有指令的計算機可讀存儲媒體的制品中實施或編碼。嵌入或編碼在包括編碼的計算機可讀存儲介質的制品中的指令可以使得一個或多個可編程處理器或其他處理器實現本文描述的技術中的一個或多個,諸如當包括或編碼在計算機可讀存儲介質中的指令由所述一個或多個處理器執行時。計算機可讀存儲介質可以包括隨機存取存儲器(ram)、只讀存儲器(rom)、可編程只讀存儲器(prom)、可擦除可編程只讀存儲器(eprom)、電可擦除可編程只讀存儲器(eeprom)硬盤、光盤rom(cd-rom)、軟盤、盒式磁帶、磁性介質、光學介質或其他計算機可讀介質。在一些示例中,制品可以包括一個或多個計算機可讀存儲介質。
在一些示例中,計算機可讀存儲介質可以包括非暫時性介質。術語“非暫時性”可以指示存儲介質未被包含在載波或傳播信號中。在某些示例中,非暫時性存儲介質可以存儲隨時間可以改變(例如,在ram或高速緩存中)的數據。
已經描述了各種示例。這些和其它示例在所附權利要求的范圍內。