用于混合存储器中的写入和刷新支持的系统和方法与流程

文档序号:16068151发布日期:2018-11-24 12:52阅读:145来源:国知局

本发明的实施例的各方面涉及用于混合计算机存储器的存储器控制器及其操作方法,其中,混合计算机存储器包括易失性和非易失性组件。

背景技术

具有持久存储器的非易失性双列直插式存储器模块(nvdimm-p)是一种用于计算机系统的随机存取存储器,其中,该存储器可包括在断电时丢失其内容的易失性部分和即使在断电时(例如,意外断电、系统崩溃或标准关机)也保留其内容的非易失性部分。在一些示例中,nvdimm-p可包括作为非易失性存储器的存储器映射闪存存储器(例如,nand闪存或znand闪存)和作为易失性存储器的动态随机存取存储器(dram)。在一些示例中,静态随机存取存储器(sram)可用作易失性部分,并且/或者相变存储器(pcm)可用作非易失性部分。nvdimm-p模块中存储的数据可作为“持久dram”(例如,字节可寻址)被访问,或可通过面向块访问被访问,其中,面向块访问与计算机系统访问旋转介质(诸如,硬盘驱动器和光学驱动器)上的数据以及持久存储装置(诸如固态驱动器(ssd))上的数据的方式类似。

针对nvdimm-p装置的标准由jedec固态技术协会(或jedec)定义。这些标准包括用于访问nvdimm-p兼容装置的一些命令。



技术实现要素:

本发明的实施例的各方面涉及针对具有持久存储器的非易失性双列直插式存储器模块(nvdimm-p)的存储器控制器,其中,nvdimm-p包括易失性部分和非易失性部分。具体地,本发明的实施例的各方面涉及用于管理响应于从主机处理器接收到的命令而被写入到nvdimm-p的易失性部分和非易失性部分的数据的系统和方法。

根据本发明的一个实施例,一种存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为:通过主机层接收持久写入命令,其中,所述持久写入命令包括高速缓存行地址和写入组标识符;通过主机层接收与所述持久写入命令相关联的数据;响应于所述持久写入命令进行以下操作:将所述数据写入到易失性存储器的所述高速缓存行地址;在第二写入组表中的多个缓冲器中的被选择的缓冲器中存储所述高速缓存行地址,其中,所述被选择的缓冲器与所述写入组标识符相应;更新第一写入组表的多个行中的行以标识所述被选择的缓冲器的包括有效条目的位置,其中,所述行与所述写入组标识符相应。

逻辑核还可存储包括多个行的第0写入组表,其中,第0写入组表的行中的每一行可与相应的写入组相关联,其中,第0写入组表的行中的每一行包可括行位图,其中,所述行位图标识第一写入组表和第二写入组表的与所述相应的写入组相关联的行。

逻辑核还可被配置为:在第0写入组表中查找与所述写入组标识符相应的相应行位图,其中,所述相应行位图标识第二写入组表的与所述写入组标识符相关联的缓冲器;基于所述相应行位图确定与所述写入组标识符相关联的缓冲器中的缓冲器是否具有可用空间;响应于确定与所述写入组标识符相关联的缓冲器中的缓冲器具有可用空间,将具有可用空间的缓冲器选为所述被选择的缓冲器;响应于确定与所述写入组标识符相关联的缓冲器中没有缓冲器具有可用空间,确定在第二写入组表中是否存在可用的缓冲器;响应于确定在第二写入组表中存在可用的缓冲器,进行以下操作:更新所述相应行位图,以将所述可用的缓冲器与所述写入组标识符相关联;将所述可用的缓冲器选为所述被选择的缓冲器。

所述持久写入命令还可包括持久标志,并且逻辑核还可被配置为确定所述持久标志是否被设置,并且响应于确定所述持久标志被设置,进行以下操作:在第二写入组表中查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,将易失性存储器的所述每个高速缓存行地址处的数据写入到非易失性存储器。

存储器模块还可包括:高速缓存元数据存储器,其中,逻辑核可被配置为在高速缓存元数据存储器中存储针对第二写入组表中存储的每个高速缓存行地址的持久状态。

所述持久写入命令还可包括持久标志,其中,逻辑核还可被配置为确定所述持久标志是否被设置,并且响应于确定所述持久标志被设置,进行以下操作:查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,进行以下操作:确定与高速缓存行地址相应的持久状态是否被设置;响应于确定与高速缓存行地址相应的持久状态被设置,将易失性存储器的被设置了持久状态的所述高速缓存行地址处的数据写入到非易失性存储器;响应于确定与高速缓存行地址相应的持久状态未被设置,避免将易失性存储器的未被设置持久状态的高速缓存行地址处的数据写入到非易失性存储器。

存储器模块可以是非易失性双列直插式存储器模块。

根据本发明的一个实施例,一种存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为:通过主机层接收包括写入组标识符的刷新命令;查找第一写入组表的与所述写入组标识符相应的一个或更多个行,其中,所述一个或更多个行中的每一行包括标识第二写入组表的相应缓冲器中的有效条目的头部指针和尾部指针;在第二写入组表中查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器在由第一写入组表的相应行的头部指针和尾部指针标识的有效条目处存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,将易失性存储器的所述每个高速缓存行地址处的数据写入到非易失性存储器。

逻辑核还可被配置为将第一写入组表的与所述写入组标识符相应的行的头部指针和尾部指针更新为相同的值以将所述相应缓冲器清空。

根据本发明的一个实施例,一种存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和非易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为:通过主机层接收刷新命令;针对第一写入组表的每一行进行以下操作:在第二写入组表中查找相应缓冲器,其中,第一写入组表中的每一行包括标识第二写入组表的所述相应缓冲器中的有效条目的头部指针和尾部指针;针对所述相应缓冲器的有效条目中的每个有效条目,取回相应的高速缓存行地址并将易失性存储器的所述高速缓存行地址处的数据写入到非易失性存储器;将第一写入组表的所述每一行的头部指针和尾部指针更新为相同的值以将所述相应缓冲器清空。

根据本发明的一个实施例,一种用于操作存储器模块的方法,其中,存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为控制易失性存储器和非易失性存储器,所述方法包括:通过存储器控制器接收包括高速缓存行地址和写入组标识符的持久写入命令;通过存储器控制器接收与所述持久写入命令相关联的数据;响应于所述持久写入命令进行以下操作:将所述数据写入到易失性存储器的所述高速缓存行地址;通过存储器控制器在第二写入组表中的多个缓冲器中的被选择的缓冲器中存储所述高速缓存行地址,其中,所述被选择的缓冲器与所述写入组标识符相应;通过存储器控制器更新第一写入组表的多个行中的行以标识所述被选择的缓冲器的包括有效条目的位置,其中,所述行与所述写入组标识符相应。

逻辑核还可存储包括多个行的第0写入组表,其中,第0写入组表的行中的每一行与相应的写入组相关联,其中,第0写入组表的行中的每一行包括行位图,其中,所述行位图标识第一写入组表和第二写入组表的与所述相应的写入组相关联的行。

所述方法还可包括:在第0写入组表中查找与所述写入组标识符相应的相应行位图,其中,所述相应行位图标识第二写入组表的与所述写入组标识符相关联的缓冲器;基于所述相应行位图确定与所述写入组标识符相关联的缓冲器中的缓冲器是否具有可用空间;响应于确定与所述写入组标识符相关联的缓冲器中的缓冲器具有可用空间,将具有可用空间的缓冲器选为所述被选择的缓冲器;响应于确定与所述写入组标识符相关联的缓冲器中没有缓冲器具有可用空间,进行以下操作:确定第二写入组表中是否存在可用的缓冲器;响应于确定第二写入组表中存在可用的缓冲器,将所述可用的缓冲器选为所述被选择的缓冲器。

所述持久写入命令还可包括持久标志,其中,所述方法还可包括:确定所述持久标志是否被设置,并且响应于确定所述持久标志被设置,进行以下操作:在第二写入组表中查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,将易失性存储器的所述每个高速缓存行地址处的数据写入到非易失性存储器。

存储器模块还可包括:高速缓存元数据存储器,其中,所述方法还可包括:在高速缓存元数据存储器中存储针对第二写入组表中存储的每个高速缓存行地址的持久状态。

所述持久写入命令还可包括持久标志,其中,所述方法还可包括:确定所述持久标志是否被设置,并且响应于确定所述持久标志被设置,进行以下操作:查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,进行以下操作:确定与高速缓存行地址相应的持久状态是否被设置;响应于确定与高速缓存行地址相应的持久状态被设置,将易失性存储器的被设置了持久状态的高速缓存行地址处的数据写入到非易失性存储器;响应于确定与所述高速缓存行地址相应的持久状态未被设置,避免将易失性存储器的未被设置持久状态的高速缓存行地址处的数据写入到非易失性存储器。

存储器模块可以是非易失性双列直插存储器模块。

根据本发明的一个实施例,一种用于操作存储器模块的方法,其中,存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为控制易失性存储器和非易失性存储器,所述方法包括:通过存储器控制器接收刷新命令,其中,所述刷新命令包括写入组标识符;查找第一写入组表的与所述写入组标识符相应的一个或更多个行,其中,所述一个或更多个行中的每一行包括标识第二写入组表的相应缓冲器中的有效条目的头部指针和尾部指针;在第二写入组表中查找与所述写入组标识符相关联的一个或更多个缓冲器,其中,所述一个或更多个缓冲器中的每个缓冲器在由第一写入组表的相应行的头部指针和尾部指针指示的有效条目处存储一个或更多个高速缓存行地址;针对与所述写入组标识符相关联的所述一个或更多个缓冲器的所述一个或更多个高速缓存行地址中的每个高速缓存行地址,将易失性存储器的所述每个高速缓存行地址处的数据写入到非易失性存储器。

所述方法还可包括:将第一写入组表的与所述写入组标识符相应的行的头部指针和尾部指针更新为相同的值以将所述相应缓冲器清空。

根据本发明的一个实施例,一种用于操作存储器模块的方法,其中,存储器模块包括:易失性存储器;非易失性存储器;以及存储器控制器,其中,存储器控制器包括:主机层;介质层,被连接到非易失性存储器;以及逻辑核,被连接到主机层、介质层和易失性存储器,其中,逻辑核存储包括多个行的第一写入组表,并且逻辑核被配置为控制易失性存储器和非易失性存储器,所述方法包括:通过存储器控制器接收刷新命令;针对第一写入组表的每一行进行以下操作:在第二写入组表中查找相应缓冲器,其中,第一写入组表的每一行包括标识第二写入组表的所述相应缓冲器中的有效条目的头部指针和尾部指针;针对所述相应缓冲器的有效条目中的每个有效条目,取回相应的高速缓存行地址并将易失性存储器的所述高速缓存行地址处的数据写入到非易失性存储器;将第一写入组表的所述每一行的头部指针和尾部指针更新为相同的值以将所述相应缓冲器清空。

附图说明

附图与说明书一起示出本发明的示例性实施例,并与说明书一起用于解释本发明的各方面和原理。

图1是根据本发明的一个实施例的通过接口与主机系统连接的非易失性双列直插式存储器模块的示意图。

图2a是根据本发明的一个实施例的通过接口与主机系统连接的非易失性双列直插式存储器模块的框图。

图2b是根据本发明的一个实施例的包括逻辑核和易失性存储器的nvdimm-p的一部分的框图。

图3a和图3b是根据本发明的一个实施例的第一写入组表和第二写入组表的示意图。

图4是根据本发明的一个实施例的针对第一写入组表和第二写入组表的“记录”操作的效果的示意图。

图5是根据本发明的一个实施例的“记录(record)”操作的流程图。

图6a是根据本发明的一个实施例的“刷新(flush)”操作的流程图。

图6b是根据本发明的一个实施例的“写回(writeback)”操作的流程图。

图7是根据本发明的一个实施例的实施持久写入(pwrite)命令的流程图。

图8是根据本发明的一个实施例的实施flush命令的流程图。

图9是根据本发明的一个实施例的第0写入组表、第一写入组表和第二写入组表的示意图。

图10是根据本发明的一个实施例的在包括第0写入组表、第一写入组表和第二写入组表的系统中实施“记录”操作的流程图。

图11是根据本发明的一个实施例的在包括第0写入组表、第一写入组表和第二写入组表的系统中实施“刷新”操作的流程图。

具体实施方式

在下文中,将参照附图更详细地描述示例实施例,在附图中,相同的标号始终指示相同的元件。然而,本发明可以以各种不同的形式被实施,并不应被解释为仅限于这里示出的实施例。此外,提供这些实施例作为示例使得本公开将是全面的和完整的,并将向本领域的技术人员充分传达本发明的各方面和特征。因此,为了彻底理解本发明的各方面和特征,可不描述对于本领域的普通技术人员来说不必要的处理、元件和技术。除非另有注释,否则贯穿附图和书面的说明书,相同的标号指示相同的元件,因此,将不再重复对相同的元件的描述。

将理解的是,尽管可在这里使用术语“第0”、“第一”“第二”、“第三”等以描述各种元件、组件和/或部分,但这些元件、组件和/或部分不应被这些术语限制。这些术语被用于将一个元件、组件或部分与另一个元件、组件或部分进行区分。因此,在不脱离本发明的精神和范围的情况下,下面描述的第一元件、组件或部分可被称为第二元件、组件或部分。

这里使用的术语仅是为了描述特定实施例的目的,并不意图限制本发明。如这里使用的,除非上下文另有明确指示,否则单数形式也意图包括复数形式。还将理解的是,当在说明书中使用术语“包括”、“包括…的”、“包含”以及“包含…的”时,其指定存在陈述的特征、整数、步骤、操作、元件和/或组件,但不排除存在或添加一个或更多个其他特征、整数、步骤、操作、元件、组件和/或它们的组合。如这里使用的,术语“和/或”包括列出的相关联的项中的一个或更多个的任意组合以及所有组合。当诸如“…中的至少一个”的表述在一列元素之后时,所述表述修饰整列元件,而不是修饰该列中的单个元素。

如这里使用的,术语“大体上”、“大约”和类似的术语被用作近似的术语而不是用作程度的术语,并旨在解释在由本领域的普通技术人员将公认的测量值或计算值中的固有偏差。此外,当描述本发明的实施例时使用的“可”是指“本发明的一个或更多个实施例”。如这里使用的,术语“使用”、“正在使用”和“使用过”可被认为是分别与术语“利用”、“正在利用”和“利用过”同义。此外,术语“示例性”意图指示例或说明。

这里描述的根据本发明的实施例的电子装置或电气装置和/或任何其他相关装置或组件可利用任何合适的硬件、固件(例如,专用集成电路)、软件或软件、固件和硬件的组合来实现。例如,这些装置的各种组件可被形成在一个集成电路(ic)芯片或单独的ic芯片上。此外,这些装置的各种组件可在柔性印刷电路薄膜、带载封装(tcp)、印刷电路板(pcb)上实现,或可被形成在一个基板上。

图1是根据本发明的一个实施例的通过接口与主机系统连接的具有持久存储器的非易失性双列直插式存储模块(nvdimm-p)的示意图。图2a是根据本发明的一个实施例的通过接口与主机系统连接的具有持久存储器的非易失性双列直插式存储器模块的框图。

如图1和图2a中所示,nvdimm-p100包括易失性存储器110、非易失性存储器(或持久存储器)120和存储器控制器130,其中,存储器控制器130被配置为向易失性存储器110和非易失性存储器120两者写入数据和从易失性存储器110和非易失性存储器120两者读取数据。存储器控制器130可包括主机层132(例如,行地址选通-列地址选通或ras-cas、接口),逻辑核134和介质层136,其中,主机层132被配置为通过接口与主机处理器200连接,逻辑核134被配置为控制nvdimm-p模块,介质层136被配置为通过接口与非易失性存储器120连接。在一些实施例中,可使用例如现场可编程门阵列(fpga)、专用集成电路(asic)或微控制器实现存储器控制器130。

在下面的讨论中,易失性存储器110可被称为“高速缓存(cache)”,逻辑核134还可被称为“高速缓存层”。例如,静态随机存取存储器(sram)易失性存储器110可用作针对相变存储器(pcm)非易失性存储器120的写入缓冲器。作为另一示例,动态随机存取存储器(dram)高速缓存可与闪存存储器(例如,z-nand)连接以在频繁读取或写入使用的数据或者读取或写入最近使用的数据时改善性能。

图2b是根据本发明的一个实施例的包括逻辑核134和易失性存储器110的nvdimm-p的一部分的框图。如图2b中所示,逻辑核134包括:到主机层132的接口134h、到介质层136的接口134m、高速缓存控制器134c、预取器134p、元数据高速缓存(可被实现为或被存储在逻辑核134内的静态随机存取存储器或sram134s)、l1预取缓冲器(可被实现为存储在逻辑核134内的sram134s中)和易失性存储器控制器134d,其中,易失性存储器控制器134d被配置为通过接口与易失性存储器110(例如,逻辑核134外部的动态随机存取存储器或dram)连接。

图2b还示出可被存储在本发明的一个实施例中的易失性存储器110中的各种类型的数据。这些数据包括高速缓存数据112、高速缓存元数据114、l2读取/写入高速缓存116和l3写入缓冲器118。

nvdimm-p100(具体地,存储器控制器130)可被配置为通过与存储器控制器130的主机层132连接的总线250(见图1和图2a)来与主机处理器200进行通信。存储器控制器130可通过主机层132从主机处理器200接收命令和数据以将数据写入nvdimm-p和从nvdimm-p读取数据。存储器控制器130可通过例如通过总线250将数据写入易失性存储器110和/或非易失性存储器120、或从易失性存储器110和/或非易失性存储器120读取数据并向主机处理器200提供数据来响应命令。数据可通过高速缓存行接口(例如,存储器映射闪存和dram)以高速缓存行为单位被写入到nvdimm-p100,并从nvdimm-p100读取,其中,高速缓存行接口可作为“持久dram”被访问或可通过面向块的驱动访问接口被访问。

针对nvdimm-p标准定义的与数据持久性相关的命令包括持久写入命令(例如,根据nvdimm-p标准的pwrite命令)和刷新命令(例如,根据ndvimm-p标准的flush命令)。pwrite命令的参数包括数据将被写入的高速缓存行地址(或存储器地址)、写入组标识符(wgid)和“持久”标志。响应于具有被设置为“关”(例如,零或0)的“持久”标志的pwrite命令,存储器控制器130在nvdimm-p100的易失性存储器110中存储相关联的数据,并且不保证由该命令写入的数据的持久性。

响应于具有被设置为“开”(例如,一或1)的“持久”标志的pwrite的命令,随后存储器控制器130在nvdimm-p100的非易失性存储器120中存储(“刷新”)相关联的数据,并还将具有在pwrite命令中提供的写入组标识符wgid的所有其他数据从易失性存储器110存储(例如,写入或刷新)到非易失性存储器120中(例如,先前使用pwrite命令被写入nvdimm-p并具有相同的wgid的数据)。当具有被设置为“开”的持久标志的pwrite命令被完成时,nvdimm-p100可用确认来响应主机处理器200。

flush命令的参数可包括指示以下项的设置:是否将所有的写入(例如,所有被写入到易失性存储器110的数据)刷新到非易失性存储器120;是否刷新所有的持久写入(例如,使用具有被设置为0的持久位的pwrite命令做出的所有写入);或是否刷新与给定的wgid(例如,与pwrite命令类似,但不具有附加数据)相关联的所有的持久写入。当flush操作完成时,nvdimm-p100可向主机处理器200提供确认。

当刷新数据响应于具有被设置为“开”的“持久”的pwrite命令,或响应于基于wgid的flush命令时,存储器控制器130识别易失性存储器110中的将要被刷新的数据,换句话说,识别与给定的wgid相关联的所有数据。

如果易失性存储器110小,则可通过在整个易失性存储器110扫描具有匹配wgid的所有数据来完成对易失性数据的搜索。例如,sram写入缓冲器(例如,l3写入缓冲器118)可具有大约256个高速缓冲条目,其基于当前的存储器技术足够小以在合理的时间量内扫描(例如,无需引入显著的延迟或无需显著的性能开销)。

然而,如果易失性存储器110大,则扫描所有的易失性数据变得不切实际。例如,80亿字节(gb)的dram高速缓存可能具有大约4百万高速缓存行条目,扫描所有的4百万高速缓存行条目需要的时间可能过长并且可能在nvdimm-p100中造成显著的延迟(例如,存储器控制器130可能阻止活动或可能等待,直到扫描完成为止,从而增加了用于执行可被接收的后续命令以及可能在存储器控制器130的命令队列上等待的后续命令的延迟)。

因此,本发明的实施例的各方面是针对响应于例如具有被设置为1的持久位的pwrite命令或针对特定wgid的flush命令来减少识别易失性存储器110的将被刷新到非易失性存储器120的条目的开销的系统和方法。这通过减少将写入组刷新到非易失性存储器120需要的时间而显著地提高了nvdimm-p100的响应时间,这可通过诸如加速数据的刷新来提高吞吐量,也减少了命令队列上的后续命令的阻塞。

本发明的实施例的一些方面涉及使用专门的数据结构以跟踪被写入到易失性存储器110的数据的状态。本发明的实施例的另一方面涉及利用数据结构中存储的数据来以显著减少的计算开销支持pwrite和flush命令,从而允许有效地实施nvdimm-p命令(诸如pwrite和flush)的系统和方法。

在本发明的一个实施例中,数据结构包括第一写入组表(l1wgt)和第二写入组表(l2wgt)。图3a和图3b是根据本发明的一个实施例的第一写入组表l1wgt304和第二写入组表l2wgt306的示意图。如图3a和图3b中所示,数据结构被用于跟踪属于每个wgid的高速缓存行,从而简化了对哪些高速缓存行与任何给定的wgid相关联的识别。

第一写入组表(l1wgt)可被存储在存储器控制器130内的静态随机存取存储器(sram)134s中,并从wgid(例如,64位值)映射到页面条目(例如,第二写入组表l2wgt中的条目的位图)。尽管本发明的实施例不限于此,但第一写入组表l1wgt可基于sram以用于更快的访问。第二写入组表(l2wgt)可被存储在nvdimm-p的易失性存储器110(或存储器控制器130的单独的动态存储器(dram))中(诸如存储在l2读取/写入高速缓存116中),并可从页面条目映射到nvdimm-p100的易失性存储器110内的高速缓存行地址(或数据地址)。在一些实施例中,基于成本考虑、性能要求和容量要求(例如,sram比dram更快并更贵,以及例如fpga或asic内的可用的存储器的数量受限),第二写入组表l2wgt被存储在静态存储器sram中。在本发明的一些实施例中,存在附加的间接级别,其中,第二写入组表l2wgt映射到易失性存储器110的高速缓存元数据区域114内的存储器地址或位置,并且高速缓存元数据区域114存储高速缓存行地址。

图3b是根据本发明的一个实施例的第一写入组表l1wgt和第二写入组表l2wgt的更详细的示意图。在图3b中示出的示例中,第一写入组表l1wgt包括64个条目,针对每个写入组标识符从0到63(wgid[0]、wgid[1]、…、wgid[63])进行一个编号。图3b的第一写入组表l1wgt中的每个条目与第二写入组表l2wgt的行中的一行相应,并包括第二写入组表l2wgt的相应行内的到头部条目的指针(头部指针)和针对尾部条目的指针(尾部指针)(例如,第一写入组表l1wgt的每个条目可包括与第二写入组表l2wgt的相应行的entry[0]的存储器位置相应的隐式偏移,并且头部和尾部的具体位置可使用指针算法被计算)。

如上所述,基于性能要求(诸如速度和容量),第二写入组表l2wgt可被存储在sram或dram中。在一些实施例中,第二写入组表l2wgt包括多个环形缓冲器,其中,一个环形缓冲器与相应的写入组相关联。在图3b中示出的示例中,存在64个环形缓冲器,每个环形缓冲器与被标示为wgid[0]到wgid[63]的64个写入组中的不同的一个相应。每个环形缓冲器包括多个条目(在图3b示出的实施例中,每个环形缓冲器包括65个条目:entry[0]到entry[64]),其中,每个条目存储高速缓存行地址(例如,28位地址)。在示出的实施例中,有效条目以头部和尾部为界(例如,在从头部到尾部-1的范围外的条目被认为是无效的)。

例如,针对在图3b中示出的第0写入组wgid[0],第一写入组表l1wgt存储头部指针1和尾部指针3,指示在环形缓冲器中条目在entry[1]开始并在entry[3]结束。针对第二写入组表l2wgt的相应行,entry[1]处的头部条目存储高速缓存行地址0x0000000,随后在entry[2]处的条目存储高速缓存行地址0x0000001,并且随后在entry[3]处的条目是环形缓冲器的尾部。

在本发明的另一实施例中,第二写入组表l2wgt可使用阵列来实现,其中,头部条目一直是第0元素(例如,entry[0]),并且第一写入组表l1wgt仅存储尾部的位置。

虽然针对包括64个写入组(例如,64个wgid)的实施例描述了本发明的各方面,但本发明的实施例不限于此,并可通过少于64个写入组或多于64个写入组来实现。例如,本发明的一些实施例可包括255个写入组或256个写入组。

存储关于条目的状态的信息

如果主机处理器200向nvdimm-p100发送用于将高速缓存行从易失性存储器110刷新到非易失性存储器120的命令,但nvdimm-p100已经将该高速缓存行写入到非易失性存储器120,而没有通知主机处理器200(例如,由于高速缓存已满时高速缓存回收(cacheeviction)),则刷新该高速缓存行可能是多余的。虽然这可能不会导致不正确的结果,但无关的操作可损害性能,并且无关的写入可能降低非易失性存储器120的寿命(例如,不必要地消耗闪存存储器的有限数量的写入周期)。如此,在本发明的一些实施例中,存储器控制器130存储用于确定是否需要附加的写入的附加元数据,并且该元数据允许存储器控制器130识别已经被写入到非易失性存储器120的数据,从而允许存储器控制器130避免向非易失性存储器120执行不必要的写入,并由此提高非易失性存储器120的寿命。

在本发明的一些实施例中,存储器控制器130针对易失性存储器110的高速缓存元数据114中的每个条目存储“持久状态”。持久状态指示相应的高速缓存行已经被标记为持久(例如,通过pwrite命令),但还没有被持久化(例如,通过将其刷新到非易失性存储器120)。例如,这与通过持久被设置为0的pwrite命令写入的数据相应。

表1示出易失性存储器110中存储的数据的各种可能的状态,以及存储器控制器130是否响应于高速缓存回收(不由pwrite或flush命令触发)和响应于pwrtie或flush命令将数据从易失性存储器110写入到非易失性存储器120中(执行写回)。

表1

如表1中所示,当高速缓存行的状态是“无效”时,由于不需要存储器控制器130将无效的数据写入到非易失性存储器120,所以不存在响应于回收或pwrite或flush对非易失性存储器120的写回。

当状态是“干净”时,易失性存储器110中的数据与非易失性存储器120中的相应数据一致(例如,相同)。因此,仍不需要存储器控制器130将数据从易失性存储器110写回到非易失性存储器120。

当状态是“脏”时,易失性存储器110中的数据已经改变,并与非易失性存储器120不一致。因此,当从高速缓存(易失性存储器110)回收该数据时,存储器控制器130将该数据写入到非易失性存储器120以避免数据丢失。然而,由于该数据未被标记为持久,所以不存在响应于pwrite或flush命令对数据的写回。

当状态是“持久”时,在高速缓存回收的情况下已将数据写入非易失性存储器120(这是因为不这样的话持久的数据将会丢失),并且在pwrite或flush命令的情况下已将数据写入非易失性存储器120。在已经被标记为持久的数据已经被写入到非易失性存储器120后,可在元数据中将该数据设置为“干净”状态,使得后续的pwrite或flush命令不会导致该数据被再次写回。

由于存在上面的表1中示出的四种不同的状态,所以在一些实施例中,存储器控制器130可使用例如三位来跟踪所述四个状态(无效、干净、脏、持久)中的哪一个。根据本发明的一个实施例,表2示出对不同的状态进行的编码,这些状态可被存储在用于l2读取/写入高速缓存116和l3写入缓冲器118的高速缓存元数据114内:

表2

如上面的表2中所示,可使用一个或更多个“有效”位、“脏”位和“持久”位的组合来表示所述四个状态。例如,在读取/写入高速缓存(rwc)的情况下,单个有效位、单个脏位[有效,脏]和单个持久位可表示所述四个状态:[0,x,x]指示“无效”状态(其中,“x”指示值可被忽略,例如,0或1,换句话说,有效位为0足够建立状态为“无效”),[1,0,0]指示“干净”状态,[1,1,0]指示“脏”但不“持久”状态,[0,1,1]指示“持久”或“脏且持久”状态。

类似地,在写入缓冲器(wb)的情况下,可从多个有效位(例如,32位)、脏位和持久位推断出状态。当全部有效位为0时,数据处于“无效”状态。当全部有效位为1,脏位为0,并且持久位为1时,数据处于“干净”状态。当全部有效位不都为0,脏位为1,并且持久位为0时,数据处于“脏”状态,并且当全部有效位不都为0,脏位为1,并且持久位为1时,数据处于“持久”状态。

如上所述,在从高速缓存回收数据后,例如,通过适当的修改元数据的值,数据的状态可被转变为干净。例如,在读取/写入高速缓存116的情况下,在从“持久”状态执行数据的回收后,元数据的值可从[0,1,1](“持久”状态)改变为[1,0,0](“干净”状态)。

使用四个功能实现pwrite和flush

本发明的各方面是针对结合写入组表和高速缓存行元数据可被使用的四个功能,以支持pwrite和flush命令的实现。这些功能包括:

record(wgid,address)-用于在写入组表中记录高速缓存行地址。

flush(wgid)-用于刷新与特定wgid相关联的高速缓存行。

flushpersist()-用于刷新所有持久高速缓存行(例如,具有设置的“持久状态”的高速缓存行)。

flushall()-用于刷新所有高速缓存行(例如,无论是否持久)。

图4是根据本发明的一个实施例的针对第一写入组表和第二写入组表的“记录”操作的效果的示意图。具体地,图4描绘调用具有参数wgid为wgid[1]且地址为0x0000004(高速缓存行地址)的功能record(wgid,address)的效果。写入组表的与图3b中示出的状态相比已经被改变的部分使用深色或黑色背景被描绘。

图5是根据本发明的一个实施例的“记录”操作500的流程图。图5还包括指示可如何执行各种操作的类似c的伪代码行。

参照图4和图5,使用写入组idwgid和高速缓存行地址调用记录操作。在操作502,存储器控制器从第一写入组表l1wgt中查找与给定的wgid相应的头部值和尾部值。在图4中示出的示例中,wgid[1]的头部被存储在l1wgt的位置402中,并且尾部被存储在l1wgt的位置404中。返回参照图3b,针对wgid[1],头部是0,并且尾部最初是1。

在操作504,存储器控制器130确定与给定的写入组id相关联的缓冲器是否已满。例如,如果尾部的位置处于头部的位置之前的一个位置(可通过(tail+1)%ring_buf_size==head计算),则可确定环形缓冲器已满。

如果缓冲器已满,则在操作506,存储器控制器130可返回false,指示记录操作失败并且记录操作结束。

如果缓冲器未满,则在操作508,存储器控制器130在第二写入组表l2wgt的与给定的写入组相应的行的尾部位置存储给定的地址。在伪代码中,这可以是l2wgt[wgid][tail]=address,并且在图4中示出的示例中,这与将地址0x0000004写入到位置406相应,其中,位置406与第二写入组表l2wgt的与wgid[1]相应的行中的尾部(entry[1])相应。

在操作510,存储器控制器130使第一写入组表l1wgt中的尾部的位置增加。如此,在图4中的位置404所示的尾部从1增加到2,并且相应地,如图4中的位置408所示,尾部现在位于entry[2]处。

在操作512,存储器控制器130返回true,指示记录操作成功,并且记录操作结束。

图6a是根据本发明的一个实施例的“刷新”操作600的流程图。如图6a中所示,“刷新”功能可将写入组idwgid作为输入,并使用写回操作对与wgid相关联的所有高速缓存行进行刷新,随后清空缓冲器。更具体地,在一个实施例中,在操作610,存储器控制器130针对给定的wgid在第一写入组表l1wgt中查找头部值和尾部值。在操作620,存储器控制器130开始循环以遍历从头部到尾部的值,其中,循环中的当前位置由“pos”指示。如上所述,在一些实施例中,缓冲器可被实现为环形缓冲器,其中,尾部位置可由比头部小的值指示。在这种情况下中,操作620中的遍历可将其考虑在内以便遍历缓冲器内的所有的有效值。

在操作630,存储器控制器130确定是否在针对缓冲器的当前位置pos处的地址的元数据中设置了持久状态。如果确定设置了持久状态,则在操作640,存储器控制器130将在该地址处的数据写入到非易失性存储器120(执行写回)。如果未设置持久状态(例如,false),则存储器控制器130避免将该地址处的数据写入到非易失性存储器120(例如,这是因为数据已经被存储在非易失性存储器120中)。无论哪种情况,在操作660,存储器控制器确定是否存在更多要评估的缓冲器的位置(例如,pos是否小于尾部)。如果确定存在,则存储器控制器继续操作620以从头部到尾部识别下一个位置。如果所有的位置都已经被评估,则在操作670,存储器控制器通过将头部和尾部设置为相同的值来清空缓冲器(例如,将第一写入组表l1wgt的与给定的写入组idwgid相应的行中的头部和尾部的值设置为0)。

由于写入组表存储与每个写入组id相关联的所有数据的存储器位置,所以存储器控制器130不需要扫描整个易失性存储器110以识别哪个数据属于给定的写入组。相反,识别与给定的写入组相关联的所有数据的操作仅涉及查找存储在与写入组相关联的写入组表中的地址的集合。

图6b是根据本发明的一个实施例的“写回”操作640的流程图。给定高速缓存行地址,存储器控制器130通过识别数据、将识别出的数据写入到非易失性存储器120并根据修改后的数据状态对元数据进行更新来执行与高速缓存行地址相关联的数据的写回。尽管在图6b中未示出,但在本发明的一些示例实施例中,高速缓存行地址被转换为元数据地址,其中,位于元数据地址处的元数据可标识与高速缓存行相关联的元数据状态(或“位”)(例如,一个或更多个有效状态、脏状态和持久状态),如果可以的话,还可识别易失性存储器110中的数据的相应位置和非易失性存储器120中的相应位置。

在操作642,存储器控制器130检查元数据以确定在该地址处是否存在任何无效数据(例如,一个或更多个有效位中的任何一个是否被设置为false)。如果确定存在无效数据,则在操作644,可使用来自非易失性存储器120的数据对易失性存储器110中的数据进行更新。无论哪种情况,在操作646,存储器控制器130将该地址处的数据从易失性存储器110移动到非易失性存储器120,并且在操作648,存储器控制器130更新元数据以将有效状态设置为true(例如,全1),将脏状态设置为false(例如,0),并且如果可以的话,将持久状态设置为false(例如,0)。

如在下面被更详细地描述的,本发明的一些实施例针对基于以上关于功能record(wgid,address)和flush(wgid)描述的技术和操作来实现pwrite和flush命令。

图7是根据本发明的一个实施例的实施pwrite命令的流程图。当存储器控制器130接收pwrite命令时,除了存储器控制器130还在元数据中将给定的地址设置为“持久”状态并且记录功能被用于将pwrite记录到写入组表中的情况之外,所有的操作与正常写入(xwrite)基本相同。在一个实施例中,pwrite命令包括地址、写入组id(wgid)、持久标志和一些相关联的数据。在操作702,存储器控制器130将数据写入到该地址(和正常的xwrite命令一样)。在操作704,存储器控制器130将与该地址相应的元数据设置为持久状态(例如,通过将持久状态设置为true(例如,1),或如以上的表2所示,在读取/写入高速缓存的情况下通过将有效状态和脏状态分别设置为0和1)。在操作706,存储器控制器使用上面针对图5描述的记录操作500将pwrite记录到写入组表(例如,l1wgt和l2wgt)中。在操作708,存储器控制器130确定在pwrite命令中是否设置了持久标志。如果设置了持久标志,则在操作710,存储器控制器130使用上面针对图6a描述的刷新命令600将与给定的wgid相关联的所有数据刷新到非易失性存储器120。无论哪种情况,命令被完成(例如,如果在pwrite中未设置持久标志,则不需要执行刷新操作)。

图8是根据本发明的一个实施例的实施flush命令的流程图。如图8中所示,根据被提供给flush命令的参数,flush命令可刷新与特定写入组id(wgid)相关联的所有数据,刷新具有设置的持久状态(例如,设置为true)的所有数据或刷新易失性存储器110中的所有数据。在操作802,存储器控制器130从它的参数确定flush命令是否将刷新特定写入组、是否将刷新被标记持久的所有数据或是否将刷新易失性存储器110中的所有数据。

如果存储器控制器130确定flush命令将刷新特定写入组,则在操作804,存储器控制器使用上面针对图6a描述的刷新功能来刷新特定的写入组,随后执行flush命令的操作完成。

如果存储器控制器130确定flush命令将刷新被标记持久的数据,则在操作806,存储器控制器开始循环以遍历写入组表中(例如,l1wgt中)的所有的写入组id(wgid_i)。在操作808,存储器控制器130使用上面针对图6a描述的刷新功能来刷新当前的写入组(例如,当前的wgid_i)。在操作810,存储器控制器130确定是否存在更多写入组要处理,如果存在,则存储器控制器130对操作806进行循环以选择下一个写入组。如果不存在更多个写入组要处理,则执行flush命令的操作完成。

如果存储器控制器130确定flush命令将刷新易失性存储器110中存储的所有数据,则在操作812,存储器控制器130开始循环以通过遍历元数据中的条目来遍历易失性存储器110中的所有数据。针对元数据中的每个条目,在操作814,存储器控制器130确定相应的数据是否为脏。如果是,则在操作816,存储器控制器130对第i个数据执行如上面图6b中描述的写回操作640。在操作818,存储器控制器130确定元数据中是否存在更多条目要处理。如果存在,则存储器控制器130循环回操作812以选择下一个条目。如果不存在更多条目要处理(例如,在处理了元数据的所有条目之后),则在操作820,存储器控制器130开始写入组表的条目上的循环以清除所有这些条目(这是因为所有的数据已经被刷新到非易失性存储器120)。具体地,在操作822,存储器控制器130通过例如将l1wgt中的头部和尾部设置为相同的值(例如,都设置为0)来清空针对当前写入组的缓冲器。在操作824,存储器控制器130确定是否存在更多写入组要清空。如果存在,则存储器控制器循环回操作820以选择下一个写入组。如果不存在更多条目(例如,在清空所有的写入组的缓冲器之后),则执行flush命令的操作完成。

因此,本发明的实施例的各方面能够通过使用存储关于易失性存储器110中存储的数据的持久状态的信息的元数据以及存储关于与每个写入组相关联的高速缓存行地址的信息的写入组表来有效地实施jedecnvdimm-p规范的pwrite命令和flush命令,从而加速并减少执行涉及识别与写入组相关联的数据的命令的开销。

本发明的实施例的一些方面涉及防止可导致写入组表变得不一致的竞态情况(racecondition)。在一些实施例中,存储器控制器130能够同时处理多个命令。然而,如果同时执行两个写入,则根据执行写入操作的各部分时的具体顺序,写入组表可能处于与实际数据不一致的状态。可通过在存储器控制器130执行写回操作640时由存储器控制器130锁定易失性存储器110(例如,使写入命令排队)来防止一些这样的竞态情况。因此,在本发明的一些实施例中,在存储器控制器130正在执行写回操作640(例如,如图6b中所示)以将该数据从易失性存储器110移动到非易失性存储器120并更新元数据以指示数据已经被移动到非易失性存储器120时,存储器控制器推迟所有其他写入命令(例如,xwrite命令和pwrite命令),直到写回操作640完成为止。

在本发明的一个实施例中,存储器控制器130可在执行写回操作640的同时继续响应其他命令(例如,读取命令或其他非写入命令)。从主机处理器200接收的所有命令可被存储在存储器控制器130的命令队列上,直到它们被执行为止。在典型情况下,存储器控制器130可以以先进先出(fifo)方式执行命令缓冲器中的命令,其中,在fifo方式中,首先执行最早的命令。然而,为了实现在写回操作期间对易失性存储器的锁定,存储器控制器130可在写回操作期间仅执行来自命令缓冲器的非写入命令(例如,读取命令)。在写回操作完成后,存储器控制器130可执行命令缓冲器中的可能已经在写回操作期间被越过的任何写入命令。

本发明的实施例的另一方面涉及在针对特定写入组的缓冲器已满时(例如,当第二写入组表的行已满时)或由于碎片填充写入组表(例如,在第二写入组表l2wgt中许多写入组正在使用中,但一些写入组具有许多打开的槽),将与该特定写入组相关联的高速缓存行预刷新(或垃圾收集)到非易失性存储器120。例如,这可通过在与wgid相关联的缓冲器已满时执行flush(wgid)来触发。更详细地,在本发明的一些实施例中,存储器控制器130被配置为在缓冲器满之后立即刷新缓冲器。例如,在向缓冲器添加条目并更新第一写入组表l1wgt以标识尾部的新位置后,如果尾部现在标识紧接在头部之前的位置(例如,(tail+1)%ring_buf_size==head),则缓冲器已满。在这种情况下,flush(wgid)操作600可被立即触发以将已满的缓冲器刷新到非易失性存储器120。在本发明的一些实施例中,存储器控制器130通过遍历第一写入组表l1wgt中的条目并在发现已满的缓冲器时刷新相关联的缓冲器来周期性地确定是否有任何缓冲器已满(例如,(tail+1)%ring_buf_size==head)。在本发明的这样的实施例中,pwrite命令可导致存储器控制器130试图将新的条目记录到已满的缓冲器。如果这样,则存储器控制器130可在记录新的写入之前首先刷新缓冲器(以清空缓冲器)。

使用l0wgt扩展写入组表

在上述实施例中,针对每个写入组的缓冲器具有相同的大小。根据本发明的另一实施例,为了增加缓冲器大小的灵活性,第二写入组表l2wgt的0行或更多的行可被分配给任何给定的写入组。如此,与任何特定的写入组相关联的条目的数量可比第二写入组表l2wgt的任何给定的行中的条目的数量(例如,如图3b中所示,65个条目)更大。

本发明的一个实施例包括第0写入组表l0wgt。在本发明的一个实施例中,第0写入组表l0wgt被存储在静态随机存取存储器(sram)中以提供更快的访问。第0写入组表l0wgt通过写入组id(wgid)被编索引。每个写入组id与一个位图相关联,其中,位图指示第一写入组表l1wgt和/或第二写入组表l2wgt的哪些行被映射到该wgid。

图9是根据本发明的一个实施例的第0写入组表902、第一写入组表904和第二写入组表906的示意图。例如,位图中的每个位置与第一写入组表l1wgt和第二写入组表l2wgt中的不同行相应。在图9中示出的示例中,wgid[0]与位图64b1100_..._000(“_..._”指示被设置为零的中间位)相关联,其中,在该位图中,处于第0位置和第一位置的两个1指示行0和行1被映射到wgid[0]。作为另一示例,wgid[1]与位图64b0010_..._0000相关联,指示行2被映射到wgid[1]。作为第三示例,wgid[2]与位图64b0000_..._0001相关联,指示最后的行(行63)被映射到wgid[2]。作为第四示例,wgid[63]与位图64b0000_..._0000相关联,指示没有行被映射到wgid[63]。

在本发明的一个实施例中,第一写入组表和第二写入组表中的每行都被映射到最多一个写入组(例如,每行都被精确地映射到零写入组或被精确地映射到一个写入组,并且没有行被映射到多于一个写入组)。为了跟踪第一写入组表l1wgt和第二写入组表l2wgt的哪些行在使用,在一个实施例中,通过将全局位图908的相应位置设置为1来使用全局位图908跟踪第一写入组表904和第二写入组表906的哪些行被分配给写入组。未被分配给写入组的行与全局位图的被设置为0的位置相应。在图9中示出的示例中,由于第0行和第一行被分配给wgid[0]、第二行被分配给wgid[1]、且第六十三行被分配给wgid[2],所以全局位图具有64b1110_..._0001的形式,这也是所有单个位图的按位的xor或总和。

本发明的实施例的一些方面涉及记录和刷新操作的修改版本,其适用于使用如图9中所示的第0写入组l0wgt。

更详细地,当包括第0写入组表902时,记录功能首先访问第0写入组表l0wgt以寻找被映射到该wgid的环形缓冲器。可检查每个这样的环形缓冲器的头部和尾部以发现具有可用空间的缓冲器。如果分配的所有缓冲器都已满,则附加缓冲器可被分配给该wgid(例如,通过查询全局位图中未分配的行),并通过更新第0写入组表(包括与wgid相关联的位图和全局位图)来指示将该行分配给wgid。

图10是根据本发明的一个实施例的在包括第0写入组表、第一写入组表和第二写入组表的系统中实现“记录”操作的流程图。如图10中所示,记录操作仍可将写入组idwgid和地址作为参数。在操作1002,存储器控制器130在第0写入组表l0wgt中查找与给定的wgid相应的行位图。在操作1004,存储器控制器130开始循环以遍历第一写入组表和第二写入组表的如位图的非零位置所标识的被分配给写入组的行。在操作1006,存储器控制器130使用与上面针对图5描述的记录功能500大体相同的记录功能尝试将给定的地址记录在分配行中的当前行中,但适用于采用行号而不是写入组。如图5中所示,记录操作500返回布尔值(例如,true或false),其中,true指示记录操作成功,false指示记录操作失败。如果记录操作成功(例如,地址被记录在当前行中),则不需要进一步的动作,并且存储器控制器130在操作1008返回true,指示记录操作成功。

然而,如果记录操作失败(例如,由于行已满),则在操作1010,存储器控制器130确定是否存在更多的分配行要考虑。如果存在,则存储器控制器130循环回操作1004以选择下一行并试图再次记录。如此,记录操作500针对给定地址确定第二写入组表l2wgt的与特定写入组标识符wgid相关联的缓冲器中的一个缓冲器是否具有可用空间,响应于确定与特定写入组标识符wgid相关联的缓冲器中的一个缓冲器具有可用空间,将所述给定地址记录(存储)在标识的缓冲器中。

然而,如果没有更多的分配行要尝试(例如,如果所有的分配行已满或如果没有分配行),则存储器控制器确定分配行都没有可用空间。如此,在操作1012,存储器控制器130通过检查全局位图来确定是否存在任何未分配行。如果不存在,则记录操作失败,并且在操作1014,存储器控制器130返回false。然而,如果存在至少一个可用行(例如,如在全局位图中由0标识的还未被分配给任何写入组的行或缓冲器),则在操作1016,存储器控制器130将这些可用行中的一个(例如,编号最低的行或缓冲器)选为“new_row”。在操作1018,存储器控制器130通过将与选择的行相应的位设置为1来更新针对当前写入组的行位图,从而将选择的行(new_row)分配给该写入组。在操作1020,存储器控制器130通过将全局位图的与选择的行相应的位置更新为1来将选择的行标记为正在使用。在操作1022,存储器控制器130随后使用大体相同的记录功能500来记录选择的行中的地址,并返回结果。

类似地,当使用第0写入组表l0wgt实施flush(wgid)功能时,存储器控制器130可首先访问l0wgt以发现被分配给该wgid的缓冲器,并遍历这些缓冲器中的每一个缓冲器中存储的值以针对每个值执行写回操作。此外,存储器控制器130可在缓冲器被解除分配时(例如,当缓冲器通过刷新操作被清空时)更新第0写入组表l0wgt以使写入组表的空行从写入组解除分配(例如,通过在针对刷新后的wgid的位图和全局位图之间执行按位的xor,并通过随后将针对刷新后的wgid的位图的所有位设置为0)。

图11是根据本发明的一个实施例的在包括第0写入组表、第一写入组表和第二写入组表的系统中实施“刷新”操作的流程图。在操作1102,存储器控制器130在第0写入组表l0wgt中查找与给定的wgid相应的行位图。在操作1104,存储器控制器130开始循环以遍历第一写入组表和第二写入组表的如位图的非零位置所标识的被分配给写入组的行。在操作1106,存储器控制器130对分配给写入组的当前行执行刷新操作,其中,刷新操作是图6a中示出的刷新操作600的轻微修改的版本,其中,刷新采用行号而不是写入组id作为参数。在操作1108,存储器控制器130确定是否存在将要被处理的任何附加行。如果存在,则存储器控制器130循环回操作1104以选择被分配给写入组的下一行。如果不存在,则在操作1110,存储器控制器更新全局位图以将先前被分配给当前写入组的行标记为现在可用。在操作1112,存储器控制器130还将第0写入组表l0wgt中的当前写入组的行位图的所有位设置为零以指示没有行被分配给当前写入组,这之后写入组的刷新完成。

如此,本发明的实施例的各方面是针对用于将写入到nvdimm-p模块的数据与特定的写入组相关联,并通过避免需要在所有的易失性存储器中扫描与给定的特定写入组匹配的数据,并在数据已经被写入到非易失性存储器的情况下避免将数据冗余刷新到非易失性存储器,来提高将数据从易失性存储器刷新到非易失性存储器的性能的系统和方法。

除非另有定义,否则这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属的技术领域的普通技术人员通常理解的含义相同的含义。还将理解的是,除非在此明确地如此定义,否则诸如在通用字典中定义的术语应被解释为具有与它们在相关领域和/或本说明书的上下文中的含义一致的含义,并不应被解释为理想化或过于正式的含义。

虽然已经示出并描述了本发明的特定实施例,但本领域的普通技术人员应该理解,在不脱离由权利要求及其等同物限定的本发明的精神和范围的情况下,可对描述的实施例做出某些修改和改变。

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