对具有非易失性存储器的系统的较快树扁平化的制作方法

文档序号:6380673阅读:511来源:国知局
专利名称:对具有非易失性存储器的系统的较快树扁平化的制作方法
技术领域
NAND快闪存储器,以及其他类型的非易失性存储器(“NVM”),通常用于大规模存储。例如,诸如便携式媒体播放器的消费电子产品通常包括闪存以存储音乐、视频和其他媒体。
背景技术
具有NVM的系统可以包括数据结构,其将文件系统使用的逻辑地址映射到NVM的物理地址(例如,提供逻辑至物理的映射)。该结构经常可以驻留在易失性存储器中。随着更新现有文件或添加其他文件,存储映射需要的存储量可能相应增加。因此,在某些情况下,为该结构分配的存储量不足以获取所有的逻辑至物理映射。

发明内容
公开了对于具有非易失存储器(“NVM”)的系统的较快树扁平化(flatten)的系统和方法。树可以存储在系统的易失性存储器中,其中树可以包含在NVM的逻辑空间和物理地址之间的逻辑至物理的映射。当所述树可用的存储量低于预定阈值时,系统可能试图减少NVM中的数据碎片数量,并因此可以扁平化树的一部分。所释放的树存储器的量可以添加回树存储器池。NVM接口可基于任何合适方法选择最佳的树的条目集合以结合,例如经过树来移动一个或多个滑动窗口,当条件满足时扩大滑动窗口,扫描树时使用优先级队列,和/或当更新树时维护优先级队列。


当结合附图,参考如下详细描述,本发明的以上和其他的方面和优势将变得更加明显,在图中,同样的附图标记指相同的部件,其中图1和2是根据本发明的各种实施例配置的电子设备的框图;图3是根据本发明的各种实施例的非易失性存储器的功能视图;图4是根据本发明的各种实施例,逻辑块地址到物理页的示例性映射的框图;图5是根据本发明的各种实施例,用于提供逻辑至物理映射的示例性树的一部分的框图;图6是根据本发明的各种实施例,逻辑块地址至物理页的另一示例性映射的框图;图7是根据本发明的各种实施例,用于提供逻辑块地址至物理映射的另一示例性树的一部分的框图;图8是根据本发明的各种实施例,用于较快树扁平化的示例性处理的流程图;图9是根据本发明的各种实施例,用于在非易失性存储器中产生物理连续碎片的示例性处理的流程图;图1OA和IOB是根据本发明的各种实施例,用于较快树扁平化的另一示例性处理的流程图;图11是根据本发明的各种实施例,用于较快树扁平化的再一示例性处理的流程图;图12是根据本发明的各种实施例,优先权队列的框图;图13是根据本发明的各种实施例,用于较快树扁平化的另一示例性处理的流程图;以及图14是根据本发明的各种实施例,另一优先级队列的框图。
图15是根据本发明可替换实施例配置的存储器接口的框图。
图16是根据本发明的另一可替换实施例配置的存储器接口的框图。
具体实施例方式公开了对于具有非易失存储器(“NVM”)的系统的较快树扁平化的系统和方法。树可以存储在系统的易失性存储器中,其中树可以包含NVM的逻辑空间和物理地址之间的逻辑至物理的映射。当所述树可用的存储量低于预定阈值时,系统的NVM接口可能试图减少NVM中的数据碎片,并因此可以扁平化树的一部分。所释放的树存储器的量可以添加回树存储器池。NVM接口例如通过将树的条目的最佳集合结合成单个条目或节点而扁平化树的一部分。最佳条目集合可以在逻辑空间中是连续的而在物理空间中是不连续的。因此,在选择最佳条目集合之后,该NVM接口可以重新编码对应于条目的数据片段,以至于片段可以是物理连续的。具体而言,NVM接口可以通过从NVM读取对应于多个条目的数据而重新编码所述片段,然后在易失性存储器中保存该数据。在保存这些数据之后,NVM接口可将数据连续编入到NVM的新的超级块。NVM接口可以使用任何合适的方法选择最佳条目集合。在某些实施例中,NVM接口可以使用一个或多个滑动窗口以获得最佳条目集合。在某些情况下,可以为一个或多个滑动窗口中的每个保持最小跨度。然后,基于不同的最小跨度之间的比较,NVM接口可以选择最佳条目集合。在其他实施例中,NVM接口可以使用饥渴(greedy)方法以找到最佳的条目集合以扁平化。即,一旦发现最佳条目集合,NVM接口可以继续在树中寻找可以添加到最佳条目集合的额外连续条目。在进一步实施例中,NVM接口可以通过维护易失性存储器中的优先权队列找到最佳的条目集合。例如,NVM接口可以试图在优先级队列中插入与匹配滑动窗口的多个条目相关联的参数。NVM接口可以继续该处理,直到滑动窗口已经经过树的末端。然后NVM接口可以使用优先级队列找到最佳条目集合。在进一步实施例中,NVM接口可以通过当执行树更新时维护候选条目的优先权队列而找到最佳条目集合。如果后来判定树可用的存储器的量低于预定的阈值,NVM接口可以使用优先级队列找到可以组合的条目。图1示出电子设备100的框图。在一些实施例中,电子设备100可以是或可以包括便携式媒体播放器、移动电话、口袋大小的个人电脑、个人数字助理(“PDA”)、桌面电脑、笔记本电脑和任何其他适合的类型的电子设备。
电子设备100可以包括片上系统(“SoC”)110和非易失性存储器(“NVM”)120。非易失性存储器120可以包括基于浮置栅极或电荷捕获技术的NAND闪存,NOR闪存,可擦可编程只读存储器(“EPR0M”),电可擦可编程只读存储器(“EEPROM”),铁电RAM( “FRAM”),磁阻RAM ( “MRAM”)或其在何组合。非易失性存储器120可以组织成“块”,其可以是最小的可擦单位,并进一步组织成“页面”,该“页面”可以是被编程或读取的最小单位。在一些实施例中,NVM120可以包括多个集成电路,其中每个集成电路可具有多个块。来自相应集成电路的存储器位置(例如,块或块的页)可形成“超级块”。可使用物理地址(例如,物理页面地址或物理块地址)来引用NVM 120的每个存储器位置(例如,页面或块)。片上系统110可以包括SoC控制电路112、存储器114和NVM接口 118。SoC控制电路112可以控制SoCllO以及SoCllO或设备100的其他组件的通用操作和功能。例如,响应于用户输入和/或应用或操作系统的指令,SoC控制电路112可以向NVM接口 118发出读或写请求以从NVM120获得数据或将数据存储在NVM120中。为了清晰起见,SoC控制电路112请求存储或检索的数据可以被称作“用户数据”,即使数据不直接关联于用户或用户应用程序。相反,用户数据可以是SoC控制电路112产生或获取的任何合适的数字信息序列(例如,通过应用程序或操作系统)。SoC控制电路112可以包括硬件、软件、固件、以及任何组件,电路,或者驱动电子设备100功能的逻辑操作的任何组合。例如,SoC控制电路112可以包括在NVM120或存储器114中存储的软件/固件控制下操作的一个或多个处理器。存储器114可以包括任何合适类型的易失性存储器、诸如随机存取存储器(“RAM”)(例如,静态RAM( “SRAM”),动态随机存取存储器(“DRAM”),同步动态随机存取存储器(“SDRAM”)、双数据率(DDR)RAM)、缓存存储器、只读存储器(“ROM”)或其任意纽合。存储器114可以包括临时存储用户数据的数据源,用于编程到或从非易失性存储器120读取数据。在某些实施例中,存储器114可以起主存的作用,用于作为SoC控制电路112的一部分实施的任何处理器。在一些实施例中,存储器114可以储存一个或多个数据结构,可由NVM接口 118用于执行其相关的操作。例如,存储器114可以包括树,其提供由文件系统使用的逻辑地址和NVMl20的物理地址之间的逻辑至物理映射。作为另一示例,存储器114可以包括一个或多个优先级队列,它可以包含由NVM接口 118使用的管理所述树的信息。将参考图4-14更详细地描述树和优先级队列。NVM接口 118可包括硬件、软件、和/或经配置起SoC控制电路112和NVM120之间接口或驱动器作用的固件的任何合适组合。对于在NVM接口 118中包括的任何软件模块,相应的程序代码可存储在NVM 120中或存储器114中。NVM接口 118可以执行各种功能,允许SoC控制电路112访问NVM120和管理NVM120的存储器位置(例如,页面、块、超级块、集成电路)以及其中存储的数据(例如,用户数据)。例如,NVM接口 118可以解读来自SoC控制电路112的读或写请求,执行耗损均衡(wear leveling),并生成和NVM 120的总线协议兼容的读和编程指令。虽然NVM接口 118和SoC控制电路112被显示为单独模块,但这仅仅为了简化描述本发明实施例。在可替换实施例中,SoC控制电路112可以集成到NVM接口 118。该集成结构如图15所示,这将在稍后详细讨论。应该理解这些模块可以共享硬件组件,软件组件,或两者兼而有之。例如,SoC控制电路112可以执行NVM接口 118的基于软件的存储驱动器。在一些实施例中,电子设备100可以包括目标设备,诸如闪存驱动或SD卡,其包括NVM 120和NVM接口 118的一些或所有部分。在这些实施例中,SoC 110或SoC控制电路112可以起目标设备的主机控制器的作用。例如,作为主机控制器,SoCIIO可以向目标设备发出读写请求。图2不出电子设备200的框图,其更详细不出根据各个实施例的电子设备100 (图1)的一些固件、软件和/或硬件组件。电子设备200可具有结合图1的任何上述的特性和功能,反之亦然。如图所示,虚线分界各层。需要理解落于分界线内的组件的描述仅仅是示例性的,一个或多个组件可以隶属于不同的层。电子设备200可以包括文件系统210、NVM驱动器212、NVM总线控制器216和NVM220。在一些实施例中,文件系统210和NVM驱动器212可以是软件或固件模块,而NVM总线控制器216和NVM220可以是硬件模块。因此,在这些实施例中,NVM驱动器212可代表NVM接口 218的软件或固件方面,而NVM总线控制器216可代表NVM接口 218的硬件方面。文件系统210可以包括任何合适类型的文件系统,诸如文件分配表(“FAT”)文件系统或分层文件系统插件(“HFS+”),可能是电子设备200的操作系统的一部分(例如,图1的SoC控制电路112的一部分)。在一些实施例中,文件系统210可包含flash文件系统,其提供页面的逻辑到物理映射。在这些实施例中,文件系统210可执行下面讨论的NVM驱动器212的某些或全部功能,因此文件系统210和NVM驱动器212可能是或可能不是单独的模块。文件系统210可以管理应用程序和操作系统的文件和文件夹结构。文件系统210可在电子设备200上运行的应用程序或操作系统的控制下运行,并可当应用或操作系统请求从NVM220读取或在NVM220中存储信息时向NVM驱动器212提供读写请求。随着每个读或写请求,文件系统210可以提供逻辑地址以表明用户数据应该在哪里读取或写入,诸如逻辑页面地址或具有页面偏移的逻辑块地址。文件系统210可以向不和NVM220直接兼容的NVM驱动器212提供读写请求。例如,逻辑地址可使用基于硬盘驱动系统的约定或典型协议。基于硬盘驱动的系统(不像闪存)可以覆盖存储器位置而不首先执行块擦除。此外,硬盘驱动器可不需要耗损均衡以提高设备的使用寿命。因此,NVM接口 218可执行任何功能,存储器专用的、供应商专用的,或者两者兼而有之以处理文件系统请求,并以适于NVM220的方式执行其他管理功能。NVM驱动器212可以包括转换层214。在一些实施例中,转换层214可能是或可包含flash转换层(“FTL”)。对于写请求,转换层214可以将提供的逻辑地址映射到NVM220上的可用已擦除物理位置。对于读取请求,转换层214可以使用提供的逻辑地址以确定其中存储所请求数据的物理地址。因为每个NVM可具有不同的布局,取决于NVM大小或其供应商,这种映射操作可以是存储器和/或供应商特定的。除了逻辑至物理地址映射,转换层214可以执行任何闪存转换层常见的其他适合的功能,诸如垃圾收集(GC)和耗损均衡。
在一些实施例中,NVM驱动器212可以是具有NVM总线控制器216的接口,以完成NVM访问请求(例如,编程、读取和删除请求)。总线控制器216可以作为到NVM220的硬件接口,可以使用总线协议、数据速率和NVM220的其他规范与NVM220通信。NVM接口 218可根据存储器管理数据(这里有时称为“元数据”)管理NVM220。元数据可以由NVM驱动器212产生或可由在NVM驱动器212控制下运行的模块产生。例如,元数据可以包括任何信息,用于管理逻辑和物理地址之间的映射,坏块管理、损耗均衡、用于检测或纠正数据错误的ECC数据,或其任何组合。元数据可包括由文件系统210与用户数据一起提供的数据,诸如逻辑地址。因此,一般而言,“元数据”可能指关于或涉及用户数据的任何信息或一般用于管理非易失性存储器的操作和存储器位置。NVM接口 218可被配置为在NVM220中存储元数据。在一些实施例中,NVM接口 218可存储和用户数据在相同存储位置(例如,页面)相关的元数据,其中用户数据被存储在该存储器位置。例如,NVM接口 218可存储用户数据,相关的逻辑地址,以及在NVM220的一个或多个存储位置用于用户数据的ECC数据。NVM接口 218也可以存储关于在相同存储器位置的用户数据的其他类型元数据。NVM接口 218可以存储逻辑地址,以便在NVM220的通电或NVM220的操作期间,电子设备200可以决定什么数据驻留在这个位置。具体而言,因为文件系统210可根据其逻辑地址、而非物理地址引用用户数据,NVM接口 218可一起存储用户数据和逻辑地址以维护他们的相关。这样,即使维护NVM220中物理到逻辑映射的单独表格变得过时,NVM接口 218仍可例如在电子设备200通电或重启时确定合适的映射。正如上面所讨论的,NVM(例如,图1的NVM120或图2的NVM220)可以被组织成模板(die)、块、页面、超级块等。例如,图3显示NVM300的功能视图。NVM300可以相同于或相似于NVM120 (图1)或NVM220 (图2)。图3只用于说明NVM300的组织布局,并不表示非易失性存储器的实际的物理布局。例如,尽管模板O被示出临近图3的模板1,这仅仅是为了说明这些模板的功能性关系,在NVM300的实际物理布局中,这些模板可能或不可能互相临近。此外,尽管一定数量的模板、块、页面显示在图3中,这仅仅是出于示例性目的,本领域技术人员可以理解NVM300可包括任何合适数量的模块、块和页面。如图3所示,NVM300可以包括一个或多个模块(即,集成电路),诸如模板0,模板1,模板2,模板3。NVM300的每个模板可以组织成一个或更多的“块”。例如,模板0_3被示为每个组成块0-3。模板的每个块可进一步组成一个或多个页面。例如,每个模块0-3的块O被示为组成页0-3。NVM 300的每个页面可以包括任何合适的信息。例如,页面可以包含用户数据、元数据或两者。在一些实施例中,诸如ECC数据的元数据可以包含在页面中以提供用于存储在NVM300中信息的错误检测和/或修正。NVM300还可以包括一个或多个超级块,超级块包括来自具有模板中相同位置或“块号”的每个模板的一个块。例如,NVM300的超级块O可以包括每个模板0-3的块O。同样,NVM300的超级块I可以包括每个模板的0-3的块1,NVM300的超级块2可以包括每个丰旲板0_3的块2,等等。超级块可以通过虚拟链接或“条带化(striping)” 一个或多个块形成。决不需要在每个模板的相同行才能被虚拟链接为超级块。事实上,块可以从两个或两个以上模板中随机抽取,以形成超级块。在一些实施例中,超级块可以只包括一块。超级块提供操作并行性,从而使得能对于位于不同模板中的块并行执行编程、阅读和擦除操作。此外,来自两个或两个以上模板的页面可虚拟链接在一起以形成超级页面或“条带”。例如,条带302可以包括来自每个模板0-3的块O的页O。同样,条带304可以包括每个模板0-3的块O的页3。在NVM接口中实施的转换层(例如,图2的转换层214)可跟踪超级块或条带。NVM300的块可能是包括上页面和下页面的多层单元(“MLC”)。对于MLC块,访问时间(例如,读取和编程时间)可以对于在特定条带(例如,条带302或304)中包括的页面保持相同。即,当整个条带被编程时,条带的较低页面可以首先被编程,其次是上层页面。相比之下,如果被编程的数据并不对齐条带边界,上下页面可以交替顺序编程。换句话说,对于编程顺序具有双形态。因此,因为上层页面编程和下层页面编程相比通常需要更长一段时间,设备沿着一个或多个条带边界编程页面是有优势的。这避免了非条带对齐编程中出现的双形态。现在参见图4,显示了示意逻辑块地址(LBA) 402到物理页面404的映射400的框图。逻辑块地址402可以对应于逻辑空间。文件系统(例如,图2的文件系统210)可以分配任何合适数量的LBA到文件。例如,如图4所示,LBA402可以对应文件A-N,其中每个文件A-N被分配一个或多个LBA。例如,文件A被分配LRA0-38,文件B被分配LBA39,以及文件C被分配LBA40,等等。此外,LBA可由文件系统用于引用NVM(例如,图1的NVM120,图2的NVM220,或图3的NVM300)的一个或多个物理地址中存储的数据。例如,如图4所示,NWM可以包括超级块410-414,其包括页404。每个LBA402可以映射到页面的页404。因此,每个LBA可以映射到相应页面的物理地址。如图4所示,例如,文件A的开始LBA映射到物理地址P3,文件B的开始LBA映射到物理地址PO,等等。图5显示了树500的一部分的框图,用于提供逻辑到物理映射。具体而言,树500可以提供LBA (例如,图4的LBA402)和NVM(例如,图1的NVMl20,图2的VM220,图3的NVM300)的相应物理地址(例如,图4的页面404的物理包址)之间的映射。正如前面所讨论的,树500可以在易失性存储器(例如,图1的存储器114)中存储和维护。树500可以包括多个节点,出于存储器分配目的,每个节点可具有一致大小(例如,每个节点可具有64字节的固定大小)。此外,树500的每个节点可以包括一个或多个条目。例如,如图5所示,节点502可以包含三个条目(例如,条目503-505)。为了简单起见,图5只显示了树500的一部分。因此,虚线框508和509可表示未在图5示出的额外节点和条目。节点的每个条目可对应于跨度(例如,条目的逻辑地址的逻辑大小或数量),并可以包括到另一个节点的指针(“节点指针”)或NVM的物理地址(“NAND指针”)。在某些情况下,跨度可以对应于游程编码压缩(“rle-压缩”)范围。例如,如图5所示,条目503-505如显示分别对应于跨度2、2和38。此外,正如图5所示,每个条目503-505可以具有指向树中额外节点的节点指针。具体而言,条目503所示为指向节点510,其依次包含两个条目(例如,条目512和514)。同样,条目504所示指向节点520,其包括两个条目(例如,条目522和524)。最后,条目505如所示指向节点530,其包括两个条目(例如,条目532和534)。因为跨度存储在树500中而不是LBA中,NVM接口(例如,图1的NVM接口 118或图2的NVM接口 218)可以从顶级节点到底部节点遍历树500,为的是获得特定文件的逻辑到物理映射。例如,基于分配到文件的LBA,NVM接口可以增加地址记录(tally),从树500的顶部节点扩展,直到生成的地址记录和文件的LBA相匹配。本领域技术人员将理解树500可具有任何合适的树结构。在某些情况下,树500可以有一个树结构,改善了特定条目的检索时间,例如,b-树或b * -树。本领域技术人员将理解系统(比如,图1的电子设备100或图2的电子设备200)的任何其他适合组件也可以来维持树500。例如,树500可以由在NVM接口和/或控制电路(例如,图1的控制电路112)顶层上实现的软件层来维持。此外,通过存储跨度,而不是LBA,更多的条目和指针(例如,节点和NAND指针)可以包含在树500的每个节点中。例如,如果树500的每个节点被分配64个字节,然后每个条目分配4到6之间的字节,树500的每个节点能够存储10至16个条目(例如,指针)。条目512、514、522、524和532可以分别包括NAND指针540-544和跨度545-549。此夕卜,条目512、514、522、524和532可以分别包括页面地址551-555。每个页面地址551-555可以提供相应条目的起始页面地址。例如,如图5所示,条目512可以对应文件G (图4),并因此可具有I的跨度545和P8的页面地址551。类似地,每个条目514、522、524和532分别对应文件H-K。当相对大的文件被顺序地编入到NVM (比如,媒体文件,应用程序,或系统文件),对应于特定文件的数据可以存储在相同的超级块或相同的一组超级块(例如,图3的超级决0-3)中。因此,该文件可能是逻辑和物理上连续的(例如,文件可以关联到一组连续的逻辑地址和相应的一组连续物理地址)。因此这个文件可由树上的单个条目(例如,单个NAND指针)表示。在某些情况下,文件系统也可以发布小的随机写操作(例如,关联多个小文件的数据)。这些写操作,可以是逻辑上连续的,可分散在多个超级块中。NVM中多个数据片段的每一个可因此由树中分离的独立条目表示。例如,每个文件H-K由树500中的分离条目表示(例如,条目512、514、522、524和532之一)。由于易失性存储器的空间限制,固定数量的存储器空间(例如,IMB或100MB的树存储器池)可分配给树500。最终,该树存储器池可枯竭到一定程度,其中不再为额外的数据片段保存逻辑到物理映射。因此,为了释放树存储器池的额外存储器,NVM接口可以尝试减少NVM中的数据碎片的数量,从而扁平化部分树。被释放的存储器的量可以添加回树存储器池。例如,从文件系统响应接收写请求,NVM接口可以选择扁平化树的至少一部分。在一个实施例中,NVM接口可以调用树扁平化功能。NVM接口可能通过例如将树的多个条目纽合成单个条目或节点而扁平化一部分树。该多个条目可在逻辑空间连续而在物理空间被非连续地编程。也就是说,它们可能对应于随机分布在NVM的不同的超级块的数据片段。相应地,通过将对应于条目的数据再编程到新的超级块,NVM接口可以确保数据片段在物理和逻辑上连续。一般来说,因为扁平化一部分树需要既非用户请求也非文件系统请求的编程操作,扁平化操作可以提高系统的整体写放大。如本文所用写放大(write amplication)”可以指文件系统请求和NVM物理访问之间的比率。写放大的增加会导致较差的系统性能,导致增加了 NVM的损耗,增加了系统的功率要求。因此,树扁平化操作应该只在必要时调用。例如,只有当树可用的存储器量小于预定阈值时,才调用树扁平化功能。预定阈值可以是任何合适的数值,对应于树存储器池(例如,为树分配的存储器总量)邻近耗尽的点,例如树存储器池的2%。即,如果可用的存储器量是树存储池的I %,则满足条件,其小于树存储器池的预定阈值2%。使用这种方法,NVM接口可以避免设备不必要的负担。具体而言,如果树的存储器的使用并没耗尽树存储器池,扁平化操作是不必要的。此外,通过等待执行扁平化树,可以扁平化的候选树条目的数量增加。该NVM接口因此具有更高概率来定位用于扁平化的最佳条目集合(例如,在写放大和存储使用之间产生最佳折衷的条目)。NVM接口可以使用任何合适的方法来定位树的条目用以结合。例如,NVM接口可以在整个树上移动滑动窗口。在一些实施例中,滑动窗口可以是具有对应树条目的元素的列表。因此,随着NVM接口跨过整个树来移动滑动窗口,新条目可以被添加到列表中。当NVM接口跨过整个树来移动滑动窗口时,NVM接口还可以维持运行计数器,表明由滑动窗口当前包含的条目的跨度。例如,回顾图4,NVM接口可以移动滑动窗口 406经过和LBA402相关的树。最初,运行计数器可具有零值,以及滑动窗406可以包含文件A-E。本领域技术人员将理解滑动窗口 406可以配置为包含任何合适的条目数(例如,32个条目)。然而,仅仅为了简单起见,图4显示滑动窗口 406以包含五个条目(例如,文件)。NVM接口可以添加对应于所包含条目的逻辑空间大小到运行计数器。即NVM接口可以添加对应于文件A-E (例如,整体跨度82)的条目的总跨度到运行计数器。之后NVM接口可以比较运行计数器的当前值和在存储器中存储的最小跨度。例如,最小跨度可以最初被设置为适于32-位计数器的最大值。如果运行汁数器的当前值小于最小跨度,NVM接口可以把运行计数器的当前值替换为最小跨度。此外,NVM接口可以在存储器中存储滑动窗口的起始LBA。对于文件A-E(图4),例如,NVM接口可以存储82作为最小跨度以及O作为起始LBA。相比之下,如果当前值大于最小跨度,NVM接口可以保持存储器中存储的最小跨度和起始LBA的值。NVM接口可以逐个单个条目(例如,文件)移动滑动窗口 406,以至于滑动窗口 406现在包含文件B-F。NVM接口可以向运行计数器添加由滑动窗口 406 (文件F)包含的新条目的大小,然后从运行计数器减去不再由滑动窗口 406(文件A)包含的条目大小。如图4所示,对应文件F的条目跨度是38,而对应文件A的条目跨度是39。因此,运行计数器的结果值是 81 (82+38-39 = 81)。该NVM接口然后可以检测运行计数器的当前值是否小于最小跨度。因为运行计数器的当前值(例如,81)小于在存储器中保存的最小跨度(例如,82),NVM接口可以把运行计数器替换为最小跨度。此外,NVM接口可以使用当前开始LBA (例如,39)更新在存储器中存储的起始LBA (例如,O)。之后NVM接口可继续移动滑动窗口通过连续的条目树,并可相应地继续更新运行计数器(例如,通过添加由滑动窗口 406最新包含的条目跨度,减去不再由滑动窗口 406包含的条目跨度)。然后,基于运行计数器的当前值和最小跨度的比较,NVM接口可以更换或保持在存储器中存储的最小跨度和起始LBA。一旦滑动窗口完成跨过整个树的移动,NVM接口可以结合对应于所述最小跨度的树的最佳条目集合。理想情况下,最佳条目集合可以具有等于集合中条目数量的跨度。换句话说,最佳条目集合将时应于一组具有连续LBA的文件,其中每个条目具有最小的LBA大小(例如,LBA为一)。例如,对于图4的LBA402,对应于文件G-K的条目集合将最优于滑动窗口406 (例如,图5的条目512、514、522、524和5325)。另一个例子是,如果一个滑动窗口包含32个条目,滑动窗口的最佳条目集合可以是32个逻辑上相邻的条目,每个分区有单个(例如,每个一个LBA)。在获得最佳条目集合之后,NVM接口可以选择重新编码对应于条目的数据片段,以至于片段可以物理相邻。例如,NVM接口可以从NVM读取对应于条目集合的数据,然后在易失性存储器中保存数据(例如,在存储器缓冲区中)。在保存数据之后,NVM接口可以将数据顺序编程到NVM的新的超级块,并扁平化树中的条目(例如,将条目集合结合为单个节点或条目)。例如,如果有32个条目,每个大小上是单个LBA,以及每个LBA是4k,NVM接口可需要重新编码NVM中的大小为128k的数据。现在转到图6,显示了逻辑块地址到物理页面的映射600的框图。如图6所示,对应于文件G-K的数据已经被重新顺序编程到超级块414。文件的之前物理地址已经被标记为无效(如图6中划掉的框所示)。此外,可以更新提供逻辑-物理映射的树。例如,参见图7,显示更新的树700的一部分的框图。具体而言,NVM接口可以将一组条目(例如,图5的条目512、514、522、524和532)结合为单独节点702。本领域提术人员可以理解这组条目可以组合成节点或条目。例如,根据条目集合的总跨度的大小和/或分配到节点或条目的大小,该组条目可以被组合成节点或条目。参见图7,用于结合条目集的页面地址704为P10,总跨度706是5。为了访问LBA120-124之一(图6),NVM接口可以使用跨度706计算LBA偏移。例如,通过遍历更新树702,NVM接口可以确定跨度的LBA基数是120。基于LBA基数,NVM接口可以确定相对应于要访问的LBA的LBA偏移(例如,从要访问的LBA减去LBA基数)。NVM接口可以然后向起始页面地址添加LBA偏移,以访问NVM中的对应物理地址。例如,为了访问LBA122,NVM接口可以确定存在2的LBA偏移(如122-120 = 2)。该NVM接口然后向P14的起始页面地址704添加LBA偏移2,以获得相应的物理地址P16。这是LBA122的物理页面地址。在其他实施例中,一旦确定当扫描树时最佳条目集合已经找到,NVM接口可以停止在整个树上移动滑动窗口。例如,回顾图4,一旦移动滑动窗口 406到包含文件G-K,NVM接口可以确定对应于文件G-K的条目最适合滑动窗口 406 (例如,每个条目有为一的LBA)。之后NVM接口可以选择扁平化树的条目,而无需等待滑动窗口完成移动经过整个树。在进一步实施例中,NVM接口可以使用多个滑动窗口以获得理想的条目组。现在转到图8和9,显示了根据本发明各个实施例的示例性处理的流程图。首先参见图8所示,显示了过程800,用于较快的树扁平化。过程800开始于步骤802,而在步骤804,NVM接口可以检测树(例如,图5的树500)当前可用的存储器量低于预定阈值,其中树可以存储NVM(例如,图1的NVM120,图2的NVM220,或者图3的NVM300)的逻辑空间和物理地址之间的逻辑到物理映射。在步骤806,NVM接口可以在整个树上移动至少两个滑动窗口(例如,图4的滑动窗口 406和408)。至少两个滑动窗口可以具有不同大小。S卩,每个滑动窗口可以包含不同数量的树的条目。例如,第一滑动窗口可以被配置成包含32个树的条目,而第二滑动窗口可以被配置成包含128个树的条目。通过使用具有不同大小的滑动窗口,和只使用一个滑动窗口相比,更优的条目纽可以被定位于树中。具体而言,由于文件系统分配策略,类似大小的文件可在逻辑空间相邻。因此,如果有几个具有跨度为一的条目,可能邻近这些条目的新条目也具有为一的跨度。在这种情况下,较大的滑动窗口可捕获相比于较小的滑动窗口而言更优的条目。另一方面,如果滑动窗口太大,更可能出现的是适合在滑动窗口中的一些条目可能不是具有最小跨度的条目。本领域技术人员可以理解可以使用任何合适数量的滑动窗口(例如,2、3、4,等等)。本领域技术人员还可以理解至少两个滑动窗口可能被配置成包含任何合适数量的条目。然而,为了简单起见,图4中显示了分别包含五个和十个条目(例如,文件)的滑动窗口 406 和 408。在一些实施例中,至少两个滑动窗户可以在整个树上连续地移动。在其他的实施例中,为了提高搜索速度,至少两个滑动窗口可以在整个树上并行移动。继续到步骤808,NVM接口可以维持至少两个最小跨度,其当滑动窗口经过树移动时对应于至少两个滑动窗口。例如,对于至少两个滑动窗口的每一个,NVM接口可以向运行计数器添加由滑动窗口新包含条目的跨度。运行计数器可以对应于由滑动窗口包含的树的条目的总跨度。此外,NVM接口可以从运行计数器减去不再被滑动窗口包含的条目跨度。运行计数器的当前值可以和在易失性存储器中保存的最小跨度相比较。基于该比较,NVM接口可以更换或保持存储在存储器中的最小跨度。此外,NVM接口还可以更换或保持存储在存储器中的起始LBA。然后过程800移动到步骤810。在步骤810,NVM接口可以确定至少有两个滑动窗口已经经过整个树完成移动。然后,在步骤812,NVM接口至少部分地基于至少两个最小跨度之间的比较来选择扁平化树的条目集合。例如,NVM接口可以确定至少两个最小跨度的哪一个具有较小值。在比较至少两个最小跨度之后,NVM接口可以选择扁平化对应于具有较小值的滑 动窗口的条目集合。该条目集合可以包含逻辑上连续的条目。例如,回顾图4和5,NVM接口可以选择条目512、514、522、523和532 (图5),其对应于滑动窗口 406 (图4)。之后过程800可能在步骤814结束。现在转到图9,显示了用于编程物理上连续的数据片段的示例性处理的流程图。在一些实施例中,过程900可表示选择过程800 (图8)的扁平化步骤812的更详细视图。过程900可开始于步骤902,在步骤904,NVM接口可以从NVM读取对应于条目集(例如,图5的条目512、514、522、523和532)的数据(例如,用户数据)。例如,回顾图4,NVM接口可以读取在物理页地址P8,P5,P12,P6和Pll上存储的数据。继续到步骤906,NVM接口可以保存易失性存储器(例如,图1的存储器114)中的数据。过程900然后移动到步骤908。在步骤908,NVM接口可以将数据依次编入(例如,在写入流中)到NVM的新的超级决(例如,图4的超级块414)。过程900然后在步骤910结束。在进一步实施例中,NVM接口可以应用饥渴方式找到最佳条目集合来扁平化。SP,一旦找到初始最佳条目集合,NVM接口可以继续寻找额外的连续树条目,其可以添加到初始最佳条目集合中。有时会重新编入这些额外的各目,而不引起额外的编程成本。现在参见图1OA和10B,显示了过程1000,用于饥渴方法来找到最佳条目集合以扁平化。过程1000开始于步骤1002,在步骤1004,NVM接口(例如,图1的NVM接口 118或图2的NVM接口 218)可以检测在易失性存储器(例如,图1的存储器1141)存储的树(例如,图5的树500)当前可用的存储量低于预定阈值。然后在步骤1006,NVM接口可以移动滑动窗口(例如,图4的滑动窗口 406)经过树的多个条目,滑动窗口可以包含预定数量的树条目。例如,滑动窗口可包含32个条目(例如,等于NVM中条带的大小)。继续到步骤1008,NVM接口可以确定滑动窗口包含的条目集合是否具有等于所述条目集合中条目数量的跨度。如果,在步骤1008,NVM接口确定滑动窗口包含的条目集合不具有等于所述条目集合中条目数量的跨度,过程1000可移动到步骤1010。在步骤1010,NVM接口可以确定滑动窗口是否经过树完成了移动。如果在步骤1010,NVM接口确定滑动窗口已经完成了经过树的移动,流程1000可移动到步骤1012。在步骤1012,NVM接口可以选择滑动窗口产生的条目集合用于树扁平化。例如,NVM接口可以选择时应于在存储器中保存的一个或多个值(例如,最小跨度和起始LBA)的一组条目。即,这组条目相比于树中的其他组条目具有最小跨度。过程1000然后在步骤1014处结束。如果,在步骤1010,NVM接口相反地确定滑动窗口没有完成经过树的移动,过程1000可回到步骤1006。在步骤1006,NVM接口可以继续移动滑动窗口经过树的条目。回顾步骤1008,如果NVM接口相反地确定滑动窗口包含的条目集合具有等于在所述条目集合中条目数量的跨度,过程1000可移动到步骤1016。换句话说,该条目集合可能是对于当前滑动窗口的最佳条目集合。在步骤1016,NVM接口可以扩大滑动窗口所包含条目的预定数量以生成扩展滑动窗口(例如,图4的滑动窗口 408)。在某些情况下,如果滑动窗口之前包含32个条目,NVM接口可以扩展滑动窗口以包含64个条目。在一些实施例中,NVM接口可以试图对齐由扩展滑动窗口包含的条目集合的跨度和条带边界。例如,回顾图3,每个条带(例如,条带302或304)可存储32个LBA。如果滑动窗口包含的条目的最佳集合的跨度是32,NVM接口可以以条带大小的倍数来扩大滑动窗口条目的预定数量。因此,由扩展滑动窗口包含的最佳条目集合可具有64个LBA、96个LBA等的跨度。另一个例子是,如果滑动窗口包含的最佳条目集合的跨度小于条带的大小(例如,48个LBA的跨度),可以扩展滑动窗口以与条带边界对齐。即NVM接口可将滑动窗口条目的预定数量扩展到64个条目。正如上面所讨论的,因为对于在条带中包括的页面的访问时间仍然是相等的,用于编入用户数据以填充整个条带的时间与填充不足一个条带的时间相等。作为另一个例子,NVM接口可以根据NVM的块或超级块(例如,图4的超级块414)中的当前位置决定如何扩大滑动窗口。例如,如果超级块的条带目前一半填充了数据,NVM接口可以以条带的一半大小来扩展条目的预定数量(例如,16个条目)。然后在步骤1018,NVM接口把扩展滑动窗口应用到树的多个条目的至少一部分。具体而言,NVM接口可以搜索具有小跨度的(例如,1、2、3或4个LBA)树的额外连续条目,其可以添加到扩展滑动窗口。进程1000可移动到步骤1020。在步骤1020,NVM接口可以确定扩展滑动窗口产生的运行计数器的值是否等于预定值。例如,NVM接口可以确定运行计数器的值(例如,扩展滑动窗口包含的条目集合的整个跨度)等于条带大小的倍数。如果在步骤1020,NVM接口步确定运行计数器的值不等于预定值,流程1000移动到步骤1012。具体而言,NVM接口可确定扩展滑动窗口包含的条目集合的总跨度小于或大于一个或多个条带的大小。根据该确定,和扩展滑动窗口包含的条目集合相比,原始条目集合可以被认为是更优选的。在步骤1012,NVM接口可以选择滑动窗口产生的树条目集合用于树扁平化。返回步骤1020,如果NVM接口相反地确定运行计数器的值等于预定值,过程1000可移动到步骤1022。在步骤1022,NVM接口可以选择由扩展滑动窗口产生的树的条目集合以用于树扁平化。过程1000在步骤1014结束。在进一步的实施例中,并不定位在树中纽合的单个最佳条目集合,NVM接口可以通过树找到单条通路上的多个候选条目集合。具体而言,并非维护单个运行计数器和最小跨度以及起始LBA,NVM接口可以在易失性存储器中维持优先级队列。NVM接口试图在优先级队列中插入与滑动窗口包含的多个条目相关的参数。NVM接口然后在树中将滑动窗口向前移动多个条目,该条目的数量至少部分地基于优先级队列的当前状态。一旦滑动窗口完成了经过树的移动,NVM接口可以使用优先级队列找到最佳条目集合。如本文所用,“优先级队列”可以是包括一个或多个数据项的任何合适的数据结构(例如,一个有序列表),其中每个数据项关联到优先级编号。例如,最小优先级队列是列表其中具有较低优先级编码的元素可以移到列表前面,具有较高优先级编号的元素可以移动到列表末尾。另一个例子是,最大优先级队列是列表其中具有较高优先级编号的元素可前移到列表前面,以及具有较低优先级编号的元素可以移动到列表末尾。现在参考图11,显示了使用优先级队列用于扁平化树的过程1100的流程图。过程1100开始于步骤1102,在步骤1104,NVM接口(例如,图1的NVM接口 118或图2的NVM接口 218)可以检测到在易失性存储器(例如,图1的存储器114)中存储的树(例如,图5的树500)当前可用的存储量低于预定阈值。在步骤1106,NVM接口可以检测匹配滑动窗口(例如,图4的滑动窗口 406)的树的多个条目(例如,对应于图4的文件A-E的条目)。检测多个条目之后,流程1100可移动到步骤1108。在步骤1108,NVM接口可以确定优先级队列是否已满。例如,优先级队列可具有固定大小(例如,20个元素),并能被初始化为一组空值。如果优先级队列未满(例如,有不到20元素在优先级队列),过程1100可移动到步骤1110。在步骤1110,NVM接口在优先级队列中插入和多个条目相关参数。可以添加到优先级队列的参数可以包括与多个条目相关的总跨度和起始LBA。例如,对于文件A_E(图4),NVM接口可以插入相关的参数作为优先级队列中的第一元素。具体而言,NVM接口可以插入为O的起始LBA作为数据项,总跨度82 (82-0 = 82)为相关优先级编号。本领域技术人员将理解其他合适的参数可以相反地或另外地包括在优先级队列中。例如,当经过树移动时,如果滑动窗口包含固定数量的条目,该跨度可以保存在优先级队列中。然而,当经过树移动时,如果滑动窗口包含可变数目的条目,比例(例如,多个条目的总跨变和多个条目中条目数量的比例)可以代替地保存在优先级队列中。然后在步骤1112,NVM接口可以在树中将滑动窗口向前移动单个条目。例如,参见图4,NVM接口可以移动滑动窗口 406以包含对应于文件B-F的条目。继续到步骤1114,NVM接口可以确定滑动窗口是否已经通过了树的末端。如果在步骤1114,NVM接口确定滑动窗口尚未通过树的末端,过程1100可移动到步骤1108,其中,NVM接口可以试图在优先级队列中插入与更新条目(例如,对应于文件B-F的条目)相关联的参数。如果在步骤1114,NVM接口相反地确定滑动窗口通过了树的末端,过程1100可在步骤1116结束。返回参见步骤1108,如果NVM接口相反地确定先先级队列已满(例如,已经有20个元素在优先级队列中),进程1100可移动到步骤1118。例如,参见图12,显示了优先级队列1202的框图1200。优先级队列1202可以包括四个元素1204-1210,每个元素分别对应于文件C-G,D-H, E-1, F-J (图4)。本领域提术人员将理解优先级队列1202可以包括任何合适的元素数量。然而,为了简单起见,显示优先级队列1202包含4个元素。因此,优先级队列1202已满。每个元素1204-1210可以关联到总跨度和起始LBA。总跨度可以起优先级号的作用。如图所示,优先级队列1202可以是最小优先级队列,因此根据总跨度以升序排序存储元素。因此,具有最小优先级号的元素(例如,最低总跨度)可以移动到队列的前端。新元素可以根据相关总跨度插入到优先级队列1202中。回顾图11,在步骤1118,NVM接口可以确定和多个条目相关的参数是否是可插入的。例如,如果滑动窗口 406(图4)目前包括对应于文件G-K的多个条目,NVM接口可以确定和条目512、514、522、524和532相关的参数在优先级队列(图12)中是否是可插入的。具体而言,多个条目的总跨度可以与已经存储在优先级队列中的总跨度比较。如果总跨度小于优先级队列1202中的最高总跨度,参数可以插入队列1202中适当的位置。例如,因为对应于文件G-K的总跨度(例如,5)小于最高优先级队列1202中的总跨度(例如,81),NVM接口可以确定与条目512、514、522、524和532相关的参数是可插入的。可替换地,如果总跨度大于优先级队列1202的最高总跨度,NVM接口可以丢弃该参数。如果NVM接口确定参数定可插入的,过程1100可移动到步骤1120。在步骤1120,NVM接口可以在优先级队列中插入参数。例如,总跨度5和文件G-K(图4)的起始LBA120可以在优先级队列1202(图12)中插入作为元素1212。此外,由于优先级队列1202有固定大小的四个元素,插入元素1212取代了队列1202末端的元素(例如,元素1204)。在插入参数之后,过程1100可移动到步骤1122。在步骤1122,NVM接口可以以等于所述多个条目中条目数量的多个条目在树中向前移动滑动窗口。例如,回顾图4,NVM接口可以向前以5个条目移动滑动窗口 406。即,新移动滑动窗口 406的第一条目可以对应于文件L。过程1100可移动到步骤1114,其中NVM接口可以确定滑动窗口是否已经通过树的末端。返回到步骤1118,如果NVM接口相反地确定参数是不可插入的,过程1100可移动到步骤1112。在步骤1112,NVM接口可以以单个条目在树中向前移动滑动窗口。使用这种方法,NVM接口可以找到在逻辑空间中脱节的多个候选条目集合,其中每个条目集合可以组合为树中的单个条目或节点。结果,NVM接口可以经过许多树扁平化操作的分期操作来扫描树。这特别有用,因为树扫描就处理效率而言是昂贵的(例如,需要大量的存储器操作和高速缓存操作(thrashes))。因此,如果NVM接口可以在单次经过树时产生多个候选,可以提高系统的效率。此外,通过以等于滑动窗口包含的条目数量的条目数在树中移动向前滑动窗口,NVM接口可以避免在优先级队列中插入相关参数之后,必须重新考虑同样的条目。在一些实施例中,NVM接口可以组合多个滑动窗口或饥渴算法到过程1100中(图
11)。例如,使用类似于过程800 (图8)的处理,NVM接口可以检测适用于两个或两个以上的滑动窗口的条目。NVM接口然后试图向两个或多个优先级队列插入和两个或多个滑动窗口的条目相关的参数,其中每个优先级队列可以关联到两个或多个滑动窗口中的一个。另一个例子是,使用类似于过程1000(图1OA和10B)的处理,NVM接口可以基于优先级队列确定是否已探测到最佳条目集合。具体而言,滑动窗口包含的最佳条目集合的总跨度可能具有等于最佳条目集合中条目数量的值。即,对于包括32个条目的滑动窗口来说,最佳条目集合的总跨度也可能是32。响应于确定已探测到最佳条目集合,NVM接口可以扩展由滑动窗口包含的预定数量的条目以生成扩展滑动窗口。NVM接口然后可以向树应用扩展滑动窗口。在进一步实施例中,当当前可用存储量低于预定阈值时,并非只搜索树,NVM接口在执行树更新的同时可以维持候选条目集合的优先级队列。具体而言,当NVM接口正更新树的节点(例如,通过添加一个或多个条目,去除一个或多个条目,和/或改变一个或多个条目的大小),NVM接口可能需要解压并读出确储器(例如,图1的存储器114)中节点内容。在这个过程中,因为节点已经未压缩,NVM接口可以很容易地仅适用一些操作获取与节点相关的参数。这些参数可以保存在优先级队列中。类似于优先级队列1204(图12),树更新期间维护的优先级队列可以包括任何合适数量的元素。每个元素可以关联到一个或多个参数,例如价值(merit)、总跨度和/或节点的起始LBA。现在引用图13,显示使用在树更新期间维护的优先级队列而用于树扁平化的过程1300的流程图。过程1300开始于步骤1302,在步骤1304,NVM接口(例如,图1的NVM接口 118或图2的NVM接口 218)可以执行在易失性存储器(例如,图1的易失性存储器114)上存储的树的节点的更新,其中该节点包含多个条目。然后在步骤1306,NVM接口可以检测是否多个条目的数量高于预定值。因此,为了提高效率,NVM接口可只考虑一个节点是否应该插入到优先级队列,如果该节点是相对完整或具有较高利用率。在某些情况下,例如,NVM接口可以应用进滤器来确定这些节点是否相对完整。可替换地,NVM接口可以确定和节点相关的使用量。如果NVM接口检测到多个条目的数量超过预定值,过程1300可移动到步骤1308。在步骤1308,NVM接口试图在优先级队列中插入与节点相关的参数。例如,NVM接口可以获得节点条目的总跨度和起始LBA。因为节点可以存储可变数目的条目(例如,10到16个条目),NVM接口可能需要计算节点价值,其中价值可以作为在优先级队列中的优先级编号。在一些实施例中,计算的价值可以基于条目总跨度和条目数量之间的比例。例如,计算的价值可以等于条目总跨度和条目数量之间的比例。另一个例子是,产生的比例可乘以权重以便生成价值的整数值。在这两种实施例中,优先级队列可以是最小优先级队列,以至于根据价值以升序存储优先级队列中的元素。作为进一步的例子,价值可以是所计算价值的倒数。因此,优先级队列可以是最大优先级队列,这样根据价值按降序存储元素。在进一步实施例中,并非使用条目数量来计算价值,NVM接口可以使用字节利用情况以计算价值。现在参见图14,显示了优先级队列1402的框图1400。优先级队列1402可以包括四个元素,其中每个元素可能与价值、总跨度和起始LBA有关。如图所示,优先级队列1402可以是最小优先级队列,以至于基于价值以升序存储元素。相应地,具有最低优先级编号的元素(例如,最低价值)可以移到队列的前面。本领域技术人员将理解,优先级队列1402可以包括任何合适的元素数量。然而,为了简单起见,优先级队列1402显示包含4个元素。正如所述,价值可以等于条目总跨度和条目数量之间的比例。因此,假设对应于元素1404的节点具有10个条目,该节点的价值可能具有值42,其等于条目总跨度和节点的条目数量之间的比例(420/10 = 42)。可执行类似的计算,用于元素1406-1410的价值。如果插入节点的价值小于当前存储在优先级队列1402中的最高价值,NVM接口可以在队列1402中适当位置插入相关参数。然而,如果节点价值大于当前存储在优先级队列1402中的最高价值,NVM接口可能丢弃相关的参数。回顾图13的步骤1306,如果NVM接口相反地检测到多个条目的数量低于预定值,过程1300可移动到步骤1310。具体而言,NVM接口可以确定该节点未满。
在步骤1310,NVM接口在试图在优先级队列中插入节点之前可能等待。即NVM接口可以绕过节点,等待直到额外的条目被添加到节点(例如,使用量增加)。本领域技术人员将会理解可以执行这些子流程1340(图13中虚线框所指示)用于树的多个节点。具体而言,NVM接口可以迭代经过正更新的树的每个节点,并尝试向优先级队列添加节点。从步骤1310和1308的每一个,过程1300可移动到步骤1312。具体而言,在步骤1312,NVN接口可检测到树当前可用的存储量低于预定阈值。然后,在步骤1314,NVM接口至少部分地基于优先级队列而至少组合树的一部分。例如,基于优先级队列,NVM接口可以确定具有可以组合的条目的最优节点。因此,对于最小优先级队列,NVM接口可以采取优先级队列的第一元素作为最优节点。如果树的每个节点能够存储10到16个条目,最优节点可包括16个条目,其中每个条目具有一个LBA的跨度。在一些实施例中,一旦NVM接口已确定最优节点,NVM接口可以检测该树需要的额外存储量是否超过可通过组合优化节点条目而释放的存储量。如果NVM接口检测到所需的额外存储量小于或等于可通过组合条目释放的存储量,NVM接口可以组合这些条目,而无需进行额外的树搜索。然而,如果NVM接口检测到所需的额外存储量大于可通过组合条目释放的存储量,NVM接口可以使用其他任何适合的处理来找到另一条目纽合用以扁平化。例如,NVM接口可以在树上移动至少一个滑动窗口,可以使用所述至少一个滑动窗口结合至少一部分树。例如,NVM接口可以使用分别类似于图8、10A、10B和11的过程800、1000和1100中的一个或多个的过程。之后过程1300可在步骤1316结束。和树的穷举搜索相比,上述方法可以在相对较短的时间量内产生良好的扁平化候选。此外,存储器可以在树扁平化之后立即释放(例如,可在父节点处寻址总跨度),而无需昂贵的树重平衡操作。
图15显示了存储器接口访问NVM的替代实施例。这个替代实施例不同于图1的实施例,没有分离的SoC控制电路112。相反,存储器接口本身访问NVMl20并管理存储器位置。
根据图15,电子设备1510包括存储器1514和用于访问非易失性存储器(“NVM”) 1520的存储器接口 1518,所述存储器接口 1518包括第一检测器1522,用于检测在易失存储器中存储的树的当前可用存储量低于预定阈值;第二检测器1524,用于检测匹配滑动窗口的树的第一多个条目;插入器1526,用于在优先级队列中尝试插入和所述第一多个条目相关的参数;以及移动器1528,用于在所述树中将所述滑动窗口向前移动多个条目,其中所述条目数量至少部分地基于所述优先级队列的当前状态。
可替换地,所述存储器接口 1518进一步包括第三检测器1530,用于检测所述滑动窗口已完成经过所述树的移动;以及定位器1532,用于使用优先级队列定位最佳条目集合。
可替换地,所述存储器接口 1518进一步包括确定设备1534,用于确定所述优先级队列是否已满;响应于确定所述优先级队列未满,所述插入器在所述优先级队列中插入和所述第一多个条目相关的参数;所述移动器将树中滑动窗口前移单个条目。
可替换地,响应于确定所述优先级队列已满,所述确定设备进一步确定和所述第一多个条目相关的参数是否可插入;以及响应于确定参数可插入,所述插入器在所述优先级队列中插入所述参数;所述移动器在所述树中将所述滑动窗口向前移动等于第一多个条目中多个条目的条目数量。
可替换地,所述存储器接口 1518进一步包括置换器1536,用于置换在所述优先级队列末端的元素。
可替换地,响应于确定所述参数是不可插入的,所述移动器在所述树中将滑动窗口向前移动单个条目。
可替换地,其中所述优先权队列是有序列表,其中具有较低优先级数量的元素移动到所述列表前端,而具有较高优先级数量的元素移动到所述列表末端。
可替换地,其中所述第二检测器检测匹配额外滑动窗口的树的第二多个条目;以及所述插入器试图向至少两个优先级队列插入和所述第一多个条目相关的参数以及和所述第二多个条目相关的参数,其中所述至少两个优先级队列各自和所述滑动窗口和所述额外滑动窗口中之一相关。
可替换地,所述存储器接口 1518包括所述确定设备,用于基于所述优先级队列确定是否已检测到最佳条目集合;扩展器1538,用于响应于确定已检测最佳条目集合,扩展由所述滑动窗口包含的预定条目数量以产生扩展滑动窗口 ;以及应用器1540,用于向所述树应用所述扩展窗口。
图16显示了根据本发明的电子设备的可替换实施例。
根据图16,一种系统1600,包括非易失存储器(“NVM”) 1620 ;用于存储包括多个条目的树的易失性存储器1614,其中所述树提供所述NVM的逻辑空间和物理地址之间的逻辑至物理映射;以及存储器接口 1618,所述存储器接口 1618包括检测器1622,用于检测树目前可用的存储量低于预定阈值;移动器,用于移动滑动窗口经过树的多个条目,其中所述滑动窗口包括预定数量的树的条目;确定设备,用于确定所述滑动窗口包含的条目集合具有等于所述条目集合中条目数量的跨度;扩展器,用于扩展由所述滑动窗口包含的预定数量的条目,以产生扩展滑动窗口 ;以及应用器,用于向树的多个条目的至少一部分应用所述扩展滑动窗口。
可替换地,所述扩展器用于以NVM条带尺寸的倍数来扩展滑动窗口的条目的预定数量。
可替换地,所述扩展器用于扩展所述滑动窗口以对准条带边界。
可替换地,所述确定设备用于确定由所述扩展滑动窗口产生的运行计数器的值是否等于预定值;以及响应于确定由所述扩展滑动窗口产生的运行计数器等于预定值,选择器1632被用于选择由所述扩展滑动窗口产生的树的条目集合以用于树扁平化。
可替换地,响应于确定由所述扩展窗口产生的运行计数器的值不等于预定值,所述选择器1632被用于选择由所述滑动窗口产生的树的条目集合以用于树扁平化。
可替换地,所述系统包括总线控制器1634,用于和所述NVM通信,所述总线控制器用于从NVM读取对应于所述条目集合的数据;在易失存储器中保存所述数据;以及指引所述总线控制器将所述数据依次编入到NVM的超级决。应该理解图8、9、10A-10B、11 和 13 的处理 800、900、1000、1100 和 1300 可由系统(比如,图1的电子设备100或图2的电子设备200)中的一个或多个组件执行。例如,处理中的至少一些步骤可由NVM接口(例如,图1的NVM接口 118或图2的NVM接口 218)执行。本领域技术人员将理解一个或多个步骤可由控制电路(例如图1的SoC控制电路1121)执行。此外,应该明白,图8、9、10A-10B、11 和 13 的处理 800、900、1000、1100 和 1300 只
是说明性的。任何步骤可以去除、修改或组合,可以添加任何额外的步骤,而不脱离本发明的范围。出于例示的目的而非限制地描述了本发明的所述实施例。
权利要求
1.一种用于较快树扁平化的方法,所述方法包括 检测树目前可用的存储量低于预定阈值,其中所述树存储非易失存储器(“NVM”)的逻辑空间和物理地址之间的逻辑至物理映射; 在所述树上移动至少两个滑动窗口; 当所述至少两个滑动窗口在所述树上移动时,保持对应于所述至少两个滑动窗口的至少两个最小跨度; 确定所述至少两个滑动窗口已在所述树上完成移动;以及 至少部分地基于所述至少两个最小跨度之间的比较,选择扁平化所述树的条目集合。
2.如权利要求1所述的方法,其中所述至少两个滑动窗口各自包含不同数量的树的条目。
3.如权利要求1或2所述的方法,其中所述条目集合包括逻辑上相邻的条目。
4.如权利要求1或2所述的方法,其中维护所述至少两个最小跨度,包括 对于所述至少两个滑动窗口的每一个,向运行计数器添加由所述滑动窗口新包含的条目的跨度;以及 从所述运行计数器减去不再由所述滑动窗口包含的条目的跨度。
5.如权利要求4所述的方法,进一步包括 比较所述运行计散器和在易失性存储器中保存的最小跨度;以及 确定所述运行计数器是否低于所述最小跨度; 响应于确定所述运行计数器低于所述最小跨度,将所述运行计数器替换为所述最小跨度。
6.如权利要求5所述的方法,进一步包括响应于确定所述运行计时器大于所述最小跨度,保持所述最小跨度。
7.如权利要求1或2所述的方法,其中所述选择包括确定所述至少两个最小跨度的哪一个具有较小值。
8.如权利要求1或2所述的方法,其中所述至少两个滑动窗口是在所述树上并行移动以及在所述树上顺序地移动中的至少一个。
9.一种系统,包括 非易失存储器(“NVM”); 用于存储包括多个条目的树的易失性存储器,其中所述树提供所述NVM的逻辑空间和物理地址之间的逻辑至物理映射;以及 包括控制电路的存储器接口,该控制电路经操作以 检测树目前可用的存储量低于预定阈值; 移动滑动窗口经过树的多个条目,其中所述滑动窗口包括预定数量的树的条目; 确定所述滑动窗口包含的条目集合具有等于所述条目集合中条目数量的跨度; 扩展由所述滑动窗口包含的预定数量的条目,以产生扩展滑动窗口 ;以及 向所述多个树条目的至少一部分应用所述扩展滑动窗口。
10.如权利要求9所述的系统,其中所述控制电路可操作以NVM条带大小的倍数来扩展滑动窗口的所述预定数量的条目。
11.如权利要求9或10所述的系统,其中所述控制电路可操作以扩展所述滑动窗口以对准条带边界。
12.如权利要求9或10所述的系统,其中所述控制电路可操作以确定由所述扩展滑动窗口产生的运行计数器的值是否等于预定值;以及响应于确定由所述扩展滑动窗口产生的运行计数器的值等于预定值,选择由所述扩展滑动窗口产生的树的条目集合以用于树扁平化。
13.如权利要求12所述的系统,其中响应于确定由所述扩展滑动窗口产生的运行计数器的值不等于预定值,所述控制电路可操作以选择由所述滑动窗口产生的树的条目集合以用于树扁平化。
14.如权利要求13所述的系统,进一步包括总线控制器,用于和所述NVM通信,以及其中所述控制电路可操作以指引所述总线控制器从NVM读取对应于所述条目集合的数据;在易失存储器中保存所述数据;以及指引所述总线控制器将所述数据依次编入到NVM的超级块。
15.一种用于访问非易失存储器(“NVM”)的存储器接口,所述存储器接口包括第一检测器,用于检测易失存储器中存储的树的当前可用的存储量低于预定阈值;第二检测器,用于检测匹配滑动窗口的树的第一多个条目;插入器,用于在优先级队列中尝试插入和所述第一多个条目相关的参数;以及移动器,用于在所述树中将所述滑动窗口向前移动多个条目,其中所述多个条目的数量至少部分地基于所述优先级队列的当前状态。
16.如权利要求15所述的存储器接口,进一步包括第三检测器,用于检测所述滑动窗口已完成经过所述树的移动;以及定位器,用于使用所述优先级队列来定位最佳条目集合。
17.如权利要求15或16所述的存储器接口,进一步包括确定装置,用于确定所述优先级队列是否已满;其中响应于确定所述优先级队列未满,所述插入器在所述优先级队列中插入和所述第一多个条目相关的参数;以及所述移动器在所述树中将所述滑动窗口前移单个条目。
18.如权利要求17所述的存储器接口,其中响应于确定所述先先级队列已满所述确定装置进一步确定和所述第一多个条目相关的参数是否可插入;以及响应于确定参数可插入,所述插入器在所述优先级队列插入所述参数;以及所述移动器在所述树中将所述滑动窗口向前移动等于在所述第一多个条目中的条目数的多个条目。
19.如权利要求18所述的存储器接口,进一步包括置换器,用于置换在所述优先级队列末端的元素。
20.如权利要求18所述的存储器接口,其中响应于确定所述参数是不可插入的,所述移动器在所述树中将所述滑动窗口移动单个条目。
21.如权利要求15或16所述的存储器接口,其中所述优先级队列是有序列表,其中具有较低优先级数量的元素移动到所述列表前端,以及具有较高优先级数量的元素移动到所述列表末端。
22.如权利要求15或16所述的存储器接口,其中所述第二检测器检测匹配额外滑动窗口的树的第二多个条目;以及所述插入器试图向至少两个优先级队列插入和所述第一多个条目相关的参数以及和所述第二多个条目相关的参数,其中所述至少两个优先级队列各自和所述滑动窗口以及所述额外滑动窗口中之一相关。
23.如权利要求15或16所述的存储器接口,其中所述确定装置用于基于所述优先级队列确定是否已检测到最佳条目集合;扩展器,用于响应于确定已检测到最佳条目集合,扩展由所述滑动窗口包含的预定条目数量以产生扩展滑动窗口 ;以及应用器,用于向所述树应用所述扩展滑动窗口。
24.一种用于较快树扁平化的系统,所述系统包括检测树的目前可用的存储量低于预定阈值的装置,其中所述树存储非易失存储器(“NVM”)的逻辑空间和物理地址之间的逻辑至物理映射;移动至少两个滑动窗口经过所述树的装置;当所述至少两个滑动窗口经过所述树移动时,保持对应于所述至少两个滑动窗口的至少两个最小跨度的装置;确定所述至少两个滑动窗口已完成移动经过所述树的装置;以及至少部分地基于所述至少两个最小跨度之间的比较,选择扁平化所述树的条目集合的>j-U ρ α装直。
25.如权利要求24所述的系统,其中所述至少两个滑动窗口各自包含不同数量的树的条目。
26.如权利要求24或25所述的系统,其中所述条目集合包括逻辑上相邻的条目。
27.如权利要求24或25所述的系统,其中保持所述至少两个最小跨度的装置包括对于所述至少两个滑动窗口中的每一个,向运行计数器添加由所述滑动窗口新包含的条目跨度的装置;以及从所述运行计数器减去不再由所述滑动窗口包含的条目跨度的装置。
28.如权利要求27所述的系统,进一步包括比较所述运行计数器和在易失性存储器中保存的最小跨度的装置;确定所述运行计数器是否低于所述最小跨度的装置;响应于确定所述运行计数器低于所述最小跨度,将所述运行计数器取代为所述最小跨度的装置。
29.如权利要求28所述的系统,进一步包括响应于确定所述运行计时器大于所述最小跨度,保持所述最小跨度的装置。
30.如权利要求24或25所述的系统,其中所述选择装置包括确定所述至少两个最小跨度的哪一个具有较小值的装置。
31.如权利要求24或25所述的系统,其中所述至少两个滑动窗口是在所述树上并行地移动以及在所述树上顺序地移动中的至少一个。
全文摘要
公开了对于具有非易失存储器(“NVM”)的系统的高效缓冲的系统和方法。树可以存储在系统的易失性存储器中,其包含NVM的逻辑空间和物理地址之间的逻辑至物理的映射。当所述树可用的存储量低于预定阈值时,系统试图减少NVM中的数据碎片,并因此扁平化树的一部分。NVM接口可选择最佳的树的条目集合以结合。可以使用任意合适的方法,例如经过树移动一个或多个滑动窗口,当条件满足时扩大滑动窗口,扫描树时使用优先级队列,和/或当更新树时维护优先级队列。
文档编号G06F3/06GK102999429SQ20121043866
公开日2013年3月27日 申请日期2012年9月14日 优先权日2011年9月16日
发明者D·J·波斯特, V·科麦尔尼斯基 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1