改进闪速存储器清除的方法和系统与流程

文档序号:12179790阅读:278来源:国知局
改进闪速存储器清除的方法和系统与流程

本公开涉及改进闪速存储器清除(flushing)的方法和系统。



背景技术:

为了在从固态器件(SSD)向常规存储设备(例如硬盘)写入时获得最佳的可能性能,写入可以根据它们的逻辑块地址(LBA)来顺序地排序。在写入操作期间,地址的连续走向(run)越长,性能就可以越好。然而,从SSD写入到常规储存器的地址走向的长度可能取决于SSD储存器的哪些部分具有尚未被提交给常规储存器的修改(例如脏块)。以有效的方式来跟踪SSD(例如包含闪速存储器)中的这样的脏块以标识需要写入到储存器(例如清除)的块是具有挑战性的。



技术实现要素:

公开了用于改进闪速存储器清除的技术。在一些实施例中,所述技术可以被实现为改进闪速存储器清除的方法,该方法包括:接收向闪速存储器写入的请求;向闪速存储器写入与该请求相关联的数据;标识指向与该请求的写入区域相对应的区域位图的指针;将与该请求相对应的区域位图的位标记为脏;以及使用指针管理组件来更新指向区域位图的指针以包含脏块计数。

根据该实施例的另外的方面,更新指向区域位图的指针以包含脏块计数可以包括:更新指针的一个或多个高阶位以包含脏块计数。

根据该实施例的另外的方面,该指针可以包括具有48个最低有效位(significant lower bit)以及16个高阶位(higher order bit)的指针,并且其中,在16个高阶位中存储脏块计数。

根据该实施例的其他方面,将与该请求相对应的区域位图的位标记为脏可以包括:更新指针的高阶位以包含指针的最后有效位(last significant bit)的值;以及使用更新的指针来标记区域位图。

根据该实施例的另外的方面,该指针可以包括指针阵列中的一个,并且其中,指针阵列按照每个指针中的脏块计数来排序。

根据该实施例的另外的方面,所述技术可以包括:使用经排序的指针阵列来标识闪速存储器的多个区域中的最脏的区域;以及将最脏的区域的一个或多个块写入到常规储存器。

根据该实施例的其他方面,将一个或多个块写入到常规储存器可以通过一个或多个因素的检测来触发。

根据该实施例的另外的方面,所述一个或多个因素可以包括以下中的至少一个:所达到的脏块的指定阈值、CPU利用率的级别、网络利用率的级别、常规储存器输入/输入的级别、来自高速缓存的一个或多个块的超龄以及用户指定偏好。

根据该实施例的另外的方面,将最脏的区域的一个或多个块写入到常规储存器可以包括:使用区域位图的基础地址以及与区域位图的位相关联的偏移来标识与要写入到常规存储器的数据相关联的逻辑块地址。

根据该实施例的另外的方面,所述技术可以包括:在写入与第一区域相关联的一个或多个块之后,标识指针阵列中与第二最脏的区域相关联的第二指针。

根据该实施例的另外的方面,当将与第一指针相关联的一个或多个块写入到常规储存器时,第二指针的偏移变成阵列的开始点。

在其他实施例中,所技术可以实现为一种非临时性计算机程序产品,其包括可在计算机上执行的一系列指令。该非临时性计算机程序产品可以用于改进闪速存储器清除的处理。该计算机程序可以实现以下步骤:接收向闪速存储器写入的请求;向闪速存储器写入与该请求相关联的数据;标识指向与该请求的写入区域相对应的区域位图的指针;将与该请求相对应的区域位图的位标记为脏;以及更新指向区域位图的指针以包含脏块计数。

在另外的实施例中,所述技术可以实现为一种改进闪速存储器清除的系统。该系统可以包括存储介质设备以及与存储介质设备相关联的基于PCIe的设备控制器。基于PCIe的设备控制器可以被配置为:接收向闪速存储器写入的请求;向闪速存储器写入与该请求相关联的数据;标识指向与该请求的写入区域相对应的区域位图的指针;将与该请求相对应的区域位图的位标记为脏;以及更新指向区域位图的指针以包含脏块计数。

根据该实施例的另外的方面,更新指向区域位图的指针以包含脏块计数可以包括:更新指针的一个或多个高阶位以包含脏块计数。

根据该实施例的另外的方面,指针可以包括具有48个最低有效位以及16个高阶位的指针,并且其中,在16个高阶位中存储脏块计数。

根据该实施例的其他方面,将与该请求相对应的区域位图的位标记为脏可以包括:更新指针的高阶位以包含指针的最后有效位的值;以及使用更新的指针来标记区域位图。

根据该实施例的另外的方面,指针可以包括指针阵列中的一个,并且其中,指针阵列按照每个指针中的脏块计数来排序。

根据该实施例的另外的方面,基于PCIe的设备控制器还可以被配置为:使用经排序的指针阵列来标识闪速存储器的多个区域中的最脏的区域;以及将最脏的区域的一个或多个块写入到常规储存器。

根据该实施例的其他方面,将一个或多个块写入到常规储存器可以通过一个或多个因素的检测来触发。

根据该实施例的另外的方面,所述一个或多个因素可以包括以下中的至少一个:所达到的脏块的指定阈值、CPU利用率的级别、网络利用率的级别、常规储存器输入/输入的级别、来自高速缓存的一个或多个块的超龄以及用户指定偏好。

现在将参照在附图中示出的本公开的示例性实施例来更详细地描述本公开。虽然下面参照示例性的实施例对本公开进行描述,但是应当理解到,本公开不限于此。能够接触到本文中的教导的本领域技术人员将意识到另外的实现方式、修改和实施例以及其他领域的使用,其均落入在本文中所描述的本公开的范围内,并且对此本公开可以具有显著的实用性。

附图说明

为了便于更全面的理解本公开,现在参照附图,在附图中,相同的元件用相同的号码来标记。这些附图不应当被解释为限制本公开,而是仅意图是示例性的。

图1是图示根据本公开的实施例的与主机设备通信的多个PCIe设备的框图。

图2A是图示根据本公开的实施例的改进闪速存储器清除的模块的框图。

图2B图示例示根据本公开的实施例的使用位图来存储要写入的块的方法的流程图。

图2C图示例示根据本公开的实施例的首先写回最脏的区域的方法的流程图。

图2D图示根据本公开的实施例的对区域进行排序的方法的流程图。

图3图示例示根据本公开的实施例的改进闪速存储器清除的方法的流程图。

图4图示例示根据本公开的实施例的改进闪速存储器清除的方法的流程图。

具体实施方式

本公开涉及用于改进将修改的数据从SSD(例如包含闪速存储器)清除到常规储存器(例如盘、带等)的技术。根据一些实施例,当存在以随机次序写入的一组数据时,首先将写入存储到随机存取友好的固态储存器中。可以提供数据结构、算法和/或电路(例如(微)处理器、逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器(例如FPGA)以及嵌入式微控制器),其允许将这写入以有序的方式(具有逻辑块地址的连续走向的提高的可能性)写回到常规储存器。

现在回到附图,图1是图示根据本公开的实施例的与主机设备进行通信的PCIe设备的框图。图1包括诸如主机系统102、主机CPU 104、快速PCI根复合体(PCI express root complex)106这样的多个计算技术。交换机108可以通信地将诸如目标110、116和122这样的多个目标(例如诸如基于NVMe的目标这样的PCIe设备)经由快速PCI根复合体106耦接到主机系统102。

目标110可以包含控制器112(例如,NVMe控制器)以及非易失性储存器114。目标116可以包含控制器118(例如,NVMe控制器)以及非易失性储存器120。目标122可以包含控制器124(例如,NVMe控制器)以及非易失性储存器126。

主机系统102可以经由存储器接口(例如双数据速率型三同步动态随机存取存储器(DDR3SDRAM))来访问基于存储器的资源。存储器可以采用任何适合的形式,诸如但不限于固态存储器(例如闪速存储器或者固态器件(SSD))、光存储器以及磁存储器。

根据一些实施例,对于一个或多个部分,可以使用PCIe之外的接口标准,包括但不限于串联高级技术附件(SATA)、高级技术附件(ATA)、小型计算机系统接口(SCSI)、PCI扩展(PCI-X)、光纤信道、串行附接SCSI(SAS)、安全数字(SD)、嵌入式多媒体卡(EMMC)以及通用闪速储存器(UFS)。

主机系统102可以采用任何适合的形式,诸如但不限于企业级服务器、数据库主机、工作站、个人计算机、移动电话、游戏设备、个人数助(PDA)、电子邮件/文本消息收发设备、数字相机、数字媒体(例如MP3)播放器、GPS导航设备以及TV系统。

主机系统102以及目标设备可以包括另外的组件,为了简化附图,其未在图1中示出。另外,在一些实施例中,并非所示出的所有组件均存在。另外,各种控制器、块和接口可以以任何适合的方式来实现。例如,控制器可以采用微处理器或处理器以及存储例如可由(微)处理器、逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器(例如FPGA)以及嵌入式微处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质中的一个或多个的形式。

图2A图示根据本公开的实施例的改进闪速存储器清除的模块。组件可以是硬件(例如专用电路)、固件、软件或前者的组合。

下面的说明描述网络元件、计算机和/或系统的组件以及用于备份和恢复的方法,其可以包括一个或多个组件。如在本文中所使用的那样,术语“组件”可以被理解为指代计算软件、固件、硬件和/或其各种组合。然而,组件不应被解释为不在硬件、固件上实现或者不在处理器可读可记录的存储介质上记录的软件(亦即,组件不是软件本身)。应当注意的是,组件是示例性的。组件可以组合、集成、分开和/或复制以支持各种应用。另外,在本文中被描述为在具体组件处执行的功能,代替在具体组件处执行的功能或者在具体组件处执行的功能的基础上,还可以在一个或多个其他组件处执行和/或由一个或多个其他设备来执行。另外,组件可以跨越多个设备和/或彼此位于本地或远程的其他组件来实现。另外,组件可以从一个设备移走,并且可以添加到另外的设备,和/或可以包括在两个设备中。在一些实施例中,一个或多个组件可以实现为SSD控制器、主机系统和/或SSD优化软件的一部分。如图2A所示,SSD清除改进组件210可以包括写入监视组件212、脏区域标识组件214、阵列件216以及错误登录和报告组件218。

写入监视组件212可以跟踪写入到SSD(例如闪速存储器)的数据,该数据尚未被写入到常规储存器(例如脏存储器)。搜查储存器的的每个块或其他单元以将其与后备储存器(例如盘)比较以便标识改变的块可能是资源密集和/或耗时的。在一些实施例中,当SSD储存器的一部分被修改时,写入监视组件212可以使用一个或多个数据结构和/或电路来跟踪该写入。例如,在一些实施例中,写入监视组件212可以使用位图来存储要针对每个区域写入的块。常规后备存储设备可以被划分成固定大小的区域。例如,每个区域可以包含32768个块,每个块可以是4千字节的大小。

图2B图示例示使用位图来存储要写入的块的示例性方法220的流程图。根据一些实施例,当系统启动时,阵列管理组件216可以分配指针阵列222,针对每个区域一个,并且可以将该阵列初始化为空值224。当区域被首次写入时,可以分配4千字节的存储页面226,并且可以将该区域的指针更新来指向重新分配的存储页面228。

在一个示例中,4千字节存储页面包含存储器的32768个单独的位。可以将该存储器用作位图。在将块最初写入临时随机存取存储器时,可以首先对其逻辑块地址进行掩蔽和移位以确定适当的区域230。然后,在分配之后,可以通过写入监视组件212利用指针来定位区域的位图232。例如,当SSD存储位置被分配时,其可以与指示存储SSD存储器中的哪些位尚未被写入到常规储存器的指示的位图、哈希图或其他数据结构的位置的指针、值或引用相关联。然后可以将写入到临时随机存取存储器的块的逻辑块地址的低阶位(例如,最低有效位)用作位图中的偏移以定位对应的位。在一些实施例中,这可以不需要搜索,而只需要恒定时间的操作(亦即,完成操作所花的时间可以与输入的大小无关)将块标记为“脏”(例如,需要将来写回到常规储存器)。

脏区域识别组件214可以确定何时将SSD的脏部分清除到常规储存器和/或哪些部分应当以何种次序来清除。在一些实施例中,可能期望具有写入常规储存器的长连接走向。为了实现这一点,当SSD的一个或多个区域足够脏时(例如,包含众多数量的连续脏块),可以执行到常规储存器的写入。确定一个或多个区域何时足够脏可以取决于一个或多个因素并且可以是可配置的(例如,区域中的脏块的量的数量、百分比或其它指标)。为了提高区域足够脏以便清除的可能性,脏区域识别组件214可以识别最脏区域来首先写入。

图2C图示例示根据本公开的实施例的首先写回最脏区域的示例性方法234的流程图。当是时候将数据写回到常规储存器时,对该组区域进行排序236,并且由脏区域识别组件214选择出最脏(包含需要写入的数据最多)的区域238。根据一些实施例,阵列管理组件216可以对区域进行排序。

可以跟随该区域的指针以存取对应的位图240。然后可以向前遍历位图242。该区域的基础逻辑块地址可以与图(map)中的每个位的偏移组合以形成需要写回的逻辑块地址244。

传统地,对区域进行排序可能需要对在每个位图内所设置的所有位进行计数以识别最脏的区域。这可能被禁止,因为其可能使用位图的高度CPU密集的扫描来确定所设置的位的数量。在一些实施例中,写入监视组件212可以使用到区域的脏位图的指针内的空间来指示区域内的脏储存器的部分的计数(例如,在4千字节的位图块内设置的位的数量)。例如,在x86_64架构中,64位指针中仅48位可以是有效的(significant)。高阶位可以是从48低价位(例如,最低有效位)扩展的符号。这意味着,对于顶部的16位,所述位可以相同,如果丢失,则可以从第47位获得该值。在一些实施例中,写入监视组件212可以在指针阵列中的指针的高阶16位内存储位图块中所设置的位的计数。阵列管理组件216可以使用阵列的每个指针中的位计数或者指针的其他数据结构(或其他引用结构)对阵列进行排序,使得使第一指针是最脏的。

图2D图示例示根据本公开的实施例的对区域进行排序的示例性方法246的流程图。阵列管理组件216可以将4字节偏移的压缩的经排序阵列维持248到针对每个区域包含一个指针的主指针阵列中。当是时候执行到常规储存器的一些写回时,可以在根据不跟随到位图块的指针的情况下对阵列进行排序250。这可以实质上减少找到要写回的最脏区域的开销。

为了跟随已被修改以存储脏位计数的指针,可以恢复该指针252。在一些实施例中,可以通过将最后有效位扩展成高阶位(例如,将来自第47位的值复制到第48到63位)的符号来恢复指针。当调节位图中所设置的位的计数254时,可以将新的计数存储在高阶位中256。

在一些实施例中,脏区识别组件214可以排列多个区域,并且除了区域中的脏块的量的数量、百分比或其他指标,还可以评估一个或多个附加因素。例如,可以考虑SSD区域中的数据的年龄(age)。其他因素可以包括用于确定哪个区域应当被写入的诸如后进先出(LIFO)、先进先出(FIFO)等的算法或其他技术。例如,如果第一区域比第二区域更脏,但是该第一区域仍然接收重要输入/输出(I/O)通信量(traffic),则在一些实施例中该第二区域可以首先被写入。

阵列管理组件216可以维持包含对表示脏SSD区域的位图的引用的阵列或其他数据结构。当阵列已被实质上分类时,某些分类算法可以表现地更好。上述一个或多个实施例可以对一组区域分类,取出最脏的区域并完全将其清除,并将该阵列的剩余部分保留为分类后的状态。这对将脏区域清除到常规存储可能会很有效,这是因为这可以允许脏区识别组件继续到下一最脏区域(甚至可以同样脏)。然而,在开端具有一个分类错误的块的实质上分类后的阵列可能展示出病态行为,并可能需要很多CPU操作来继续到阵列结尾处的新的适当位置。

针对此,阵列管理组件216可以将分类后的阵列作为开端和结尾可移动的圆形阵列来处理。最初,阵列的分类的开始可以在偏移0,并且结尾可以是包含阵列的存储器的块的最后元素。一旦清除了最高等级区域,其仍可以在偏移0,但是其可能被错误地分类。代替常规地对阵列重新分类并移动数据,阵列管理组件216可以调整分类开始偏移和结尾偏移,使得整个圆形阵列移位1。分类开始偏移可以变为1,并且现在阵列的第0元素可以是阵列的最后元素。以这种方式,已被减少到0个脏块的区域,在留下阵列另行分类的恒定时间操作中,被重新分类到阵列的结尾处的适当位置。

错误登录和报告组件218可以与写入请求的监控、脏区域的识别、和/或追踪脏区域的数据结构(例如,指针阵列)的管理相关联地俘获错误并登录错误。在一些实施例中,错误登录和报告组件218可以提供对错误的通知。

图3描绘了图示根据本公开的实施例的用于改进闪速存储器清除的方法的流程图。然而,处理300仅是示范性的。能够通过例如使阶段增加、改变、移除或重新布置来更改处理300。在阶段302,处理可以开始。

在阶段304,可以接收闪速存储器写入请求。在阶段306,可以将该写入请求写入闪速存储器区域。针对SSD的多个区域可以分配指针阵列,针对每个区域分配一个,并且每个阵列可以初始化为空值。

在阶段308,当首先写入区域时可以分配存储页面,并且针对该区域的指针可被更新为指向新分配的存储页面。

在阶段310,如果以前已分配指针并且已覆写该指针的高阶位以存储脏块的计数,则可以恢复高阶位。例如,在x86_64架构中,64位指针中仅48位可以是有效的。高阶位可以是从48低价位(例如,最低有效位)扩展的符号。这意味着,对于顶部的16位,所述位可以相同,如果丢失,则可以从第47位获得该值。

在阶段312,在分配之后,可以利用指针找出针对区域的位图。然后,可以使用写入临时随机存取存储器的、针对块的逻辑块地址的低阶位,作为位图中的偏移以定位相应的位。在一些实施例中,这可能不需要搜索,只需要恒定时间操作以将块标记为“脏”(例如,需要将来写回常规存储)。

在阶段314,可以使用指向区域的脏位图的指针内的空间来表示在区域内的脏存储的部分的计数(例如,在4千字节位图块内设置的位数)。例如,在x86_64架构中,64位指针中仅48位可以是有效的。高阶位可以是从48低价位(例如,最低有效位)扩展的符号。这意味着,对于顶部的16位,所述位可以相同,如果丢失,则可以从第47位获得该值。在一些实施例中,在位图块中设置的位数可以被存储在指针阵列的指针的高阶16位内。

在阶段316,方法300可以结束。

图4描绘了图示根据本公开的实施例的用于改进闪速存储器清除的方法的流程图。

然而,处理400仅是示范性的。能够通过例如使阶段增加、改变、移除或重新布置来更改处理400。在阶段402,处理可以开始。

在阶段404,可以对指向脏区域位图的指针阵列进行分类。可以使用阵列的每个指针中的位计数或者指针的其他数据结构(或其他参考结构)来对阵列进行分类,使得第一指针是最脏的。

在阶段406,可以确定是否已达到清除阈值。可以评估一个或多个因素来确定脏的SSD存储是否应被清除为常规存储。例如,因素可以以下中的一个或多个:所达到的脏块的指定阈值、CPU利用率的级别、网络利用率的级别、常规储存器输入/输入的级别、来自高速缓存的一个或多个块的超龄以及用户指定偏好。。如果确定应当进行清除,则方法可以在阶段408继续。如果确定不应当进行清除,则方法可以在阶段414结束。

在阶段408,可以识别出最脏的区域。在一些实施例中,指向区域的脏位图的指针内的空间可以表示在区域内的脏存储的部分的计数(例如,在4千字节位图块内设置的位数)。例如,在x86_64架构中,64位指针中仅48位可以是有效的。高阶位可以是从48低价位(例如,最低有效位)扩展的符号。这意味着,对于顶部的16位,所述位可以相同,如果丢失,则可以从第47位获得该值。指向脏区域的指针阵列可以使用阵列的每个指针中的位计数或者指针的其他数据结构(或其他参考结构)来对阵列进行分类,使得第一指针是最脏的。

在阶段410,与最脏的区域相关联的脏块可以被写入常规存储(例如,磁盘、磁带等)。在一些实施例中,可以使用脏区域位图的基础逻辑块地址和与特定脏位相对应的偏置,从脏块位图识别脏块,以针对与脏位相对应的脏块提供逻辑块地址。

在阶段410,可以确定在指向脏区域位图的指针阵列中是否存在另一位图指针。如果不存在其他指针(例如,达到或超过清除阈值的所有脏位图已被清除到磁盘并在阵列中分类),则方法400可以在阶段414结束。如果存在针对脏区域的另一位图指针,则方法400可以在阶段412继续。

在阶段412,与下一最脏的位图相对应的指针可以被标记为阵列的开始。最初,分类的阵列的开始可以在偏置0,并且结尾可以是包含阵列的存储器的块的最后元素。一旦清理了最高等级区域(例如,在阶段408之后),区域指针仍可以在偏置0,但是其可能被错误地分类。代替常规地对阵列重新分类并移动数据,方法400可以调整分类开始偏置和结尾偏置,使得整个圆形阵列移位1。分类开始偏置可以变为1,并且现在阵列的第0元素可以是阵列的最后元素。以这种方式,已被减少到0个脏块的区域,在留下阵列另行分类的恒定时间操作中,被重新分类到阵列的末尾处的适当位置。在已调整了阵列开始元素之后,方法400可以返回阶段406。

在阶段414,方法400可以结束。

其他实施例在本发明的范围和精神中。例如,上述功能可以使用软件、硬件、固件、硬连线或任何这些的组合来实现。根据指令操作的一个或多个计算机处理器可以实现如上所述的与用于提高根据本公开的闪存存储器清除相关联的功能。如果是这种情况,则这样的指令可被存储在一个或多个非易失性处理器可读存储介质(例如,磁盘或其它存储介质)上在本公开的范围内。此外,实现功能的模块也可以物理地位于多个位置,包括分布式地以便在不同的物理位置上实现功能的部分。

本公开不限于在此描述的特定实施例的范围。实际上,除了在此描述的那些,本公开的其它各种实施例和修改对于来自前述描述和附图的本领域的普通技术人员而言将是显而易见的。因此,这样的其它实施例和修改意图落入本公开的范围内。此外,尽管已经在用于特定目的的特定环境中的特定实施方式的背景下在此描述本公开,但是本领域的普通技术人员将理解其有效性并不限于此,并且本公开可以有益地在用于任何数量的目的的任何数量的环境中实施。因此,下面提出的权利要求应当被解释为考虑到在此所描述的本公开的全部范围和精神。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1