一种混合内存结构的数据读取方法和系统与流程

文档序号:13982770阅读:239来源:国知局
一种混合内存结构的数据读取方法和系统与流程

本发明涉及存储器技术领域,更具体地说,涉及一种混合内存结构的数据读取方法和系统。



背景技术:

随着云计算、大数据的发展,数据密集型应用希望通过增大系统内存容量来减少对磁盘的访问。虽然采用更大容量的dram(dynamicrandomaccessmemory,动态随机存取存储器)作为内存可以增大系统的内存容量,但是,在当前工艺特征尺寸的限制下,dram的存储密度和容量已经很难再有所提升。

而随着新型非易失性存储介质nvm的出现,闪存尤其是基于闪存的固态硬盘为增大系统的内存容量带来了希望。虽然闪存具有低功耗、低价格和大容量等优势,但是,其也具有高延迟和寿命有限等缺陷,因此,闪存不能直接替代dram作为内存。基于此,人们提出了一种包括dram和nvm的混合内存结构,但是,在这种混合内存结构中,如何存储和读取数据才能充分发挥dram和nvm各自的优势、避免各自的劣势仍是目前人们研究的重点之一。



技术实现要素:

有鉴于此,本发明提供了一种混合内存结构的数据读取方法和系统,以提高包括dram和nvm的混合内存结构的性能。

为实现上述目的,本发明提供如下技术方案:

一种混合内存结构的数据读取方法,所述混合内存结构包括第一存储设备和第二存储设备,所述数据读取方法包括:

接收数据读取请求;

判断所述数据读取请求所请求的数据是否在所述第一存储设备中;

若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据;

若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页地址的映射关系,从所述第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据所述映射关系从所述第一存储设备中读取所述请求的数据;

其中,所述物理微页为物理页划分成的多个物理微页中与所述请求的数据分配时的偏移和大小相同的物理微页。

优选的,判断所述数据读取请求所请求的数据是否在所述第一存储设备中的过程包括:

从所述数据读取请求中获取所请求的数据的虚拟地址;

从所述虚拟地址对应的页表中查找匹配的页表项,若查找到匹配的页表项,则所述请求的数据在所述第一存储设备中,若没有查找到匹配的页表项,则所述请求的数据不在所述第一存储设备中。

优选的,建立所述虚拟地址与所述物理微页地址的映射关系的过程包括:

将所述物理微页所在物理页的物理页号写入所述虚拟地址对应的页表的页表项中。

优选的,在所述第一存储设备中为所述请求的数据分配物理微页的过程包括:

判断是否首次为所述请求的数据分配物理微页;

若是,为所述请求的数据分配一个新的内存块,并从所述内存块的空闲链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

若否,则从所述请求的数据相应的链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

其中,同一物理页被划分成相同大小和偏移的多个物理微页,不同物理页划分成的物理微页的大小和偏移不同,并且,具有相同大小和偏移的物理微页被归为一个模式,通过链表链接。

优选的,所述链表包括活跃链表和非活跃链表,所述活跃链表包含最近被请求过的数据,所述非活跃链表包含最近未被请求的数据,当所有的内存块被用完时,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页之前还包括:

从非活跃链表的链头开始查询;

若所述链头的数据的访问位为1,则将所述数据移到活跃链表的链尾,并对其访问位清零;

若所述链头的数据的访问位为0,则将所述数据作为淘汰候选数据,若所述数据为脏数据,则在所述数据写回至所述第二存储设备后,回收其物理微页到相应的空闲链表。

优选的,当所述非活跃链表不足时,还包括:

从活跃链表的链头开始查询;

若所述链头的数据的访问位为1,则将所述数据移至所述活跃链表的链尾,并对其访问位清零;

若所述链头的数据的访问位为0,则将所述数据链入非活跃区的链尾。

优选的,所述第一存储设备为动态随机存取存储器,所述第二存储设备为固态硬盘。

一种混合内存结构的数据读取系统,所述混合内存结构包括第一存储设备和第二存储设备,所述读取系统包括:

接收模块,用于接收数据读取请求;

控制模块,用于判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据,若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求;

数据读取模块,用于根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页地址的映射关系,以使所述控制模块从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据;

其中,所述物理微页为物理页划分成的多个物理微页中与所述请求的数据分配时的偏移和大小相同的物理微页。

优选的,所述数据读取模块包括分配模块和修改模块;

所述分配模块用于根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页;

所述修改模块用于将所述物理微页所在物理页的物理页号写入所述虚拟地址对应的页表的页表项中,以建立所述虚拟地址与所述物理微页地址的映射关系。

优选的,所述分配模块包括判断子模块和分配子模块;

所述判断子模块用于判断是否首次为所述请求的数据分配物理微页,若是,产生第一指令并发送至所述分配子模块,若否,则产生第二指令并发送至所述分配子模块;

所述分配子模块用于根据所述第一指令为所述请求的数据分配一个新的内存块,并从所述内存块的空闲链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据,根据所述第二指令从所述请求的数据相应的链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

其中,同一物理页被划分成相同大小和偏移的多个物理微页,不同物理页划分成的物理微页的大小和偏移不同,并且,具有相同大小和偏移的物理微页被归为一个模式,通过链表链接。

优选的,所述链表包括活跃链表和非活跃链表,所述活跃链表包含最近被请求过的数据,所述非活跃链表包含最近未被请求的数据,所述数据读取模块还包括淘汰模块;

所述淘汰模块用于从非活跃链表的链头开始查询,若所述链头的数据的访问位为1,则将所述数据移到活跃链表的链尾,并对其访问位清零,若所述链头的数据的访问位为0,则将所述数据作为淘汰候选数据,若所述数据为脏数据,则在所述数据写回至所述第二存储设备后,回收其物理微页到相应的空闲链表。

优选的,所述淘汰模块还用于从活跃链表的链头开始查询,若所述链头的数据的访问位为1,则将所述数据移至所述活跃链表的链尾,并对其访问位清零,若所述链头的数据的访问位为0,则将所述数据链入非活跃区的链尾。

优选的,所述第一存储设备为动态随机存取存储器,所述第二存储设备为固态硬盘。

与现有技术相比,本发明所提供的技术方案具有以下优点:

本发明所提供的混合内存结构的数据读取方法和系统,接收数据读取请求后,判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据,若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页的映射关系,从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据。由于所述物理微页为物理页划分成的多个物理微页中与所述请求的数据的偏移和大小相同的物理微页,因此,以物理微页来管理原本的物理页,不仅可以减少物理内存的浪费,还能支持对随机大小数据的访问和来自用户的多线程请求。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的混合内存结构示意图;

图2为本发明实施例提供的混合内存结构的数据读取方法的流程图;

图3为本发明实施例提供的物理内存的划分示意图;

图4为本发明实施例提供的虚拟页与物理页的映射关系示意图;

图5为本发明实施例提供的链表的管理方法示意图;

图6为本发明实施例提供第二存储设备的逻辑组织结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的实施例提供了一种混合内存结构的数据读取方法,混合内存结构的整体框架如图1所示,包括第一存储设备和第二存储设备,所述第一存储设备为dram,所述第二存储设备为ssd(solidstatedrives,固态硬盘),优选为基于闪存的固态硬盘。基于此,部分数据可以存储在dram中,部分数据可以存储在ssd中。

如图2所示,该混合内存结构的数据读取方法包括:

s201:接收数据读取请求;

s202:判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则进入s203,若所述请求的数据不在所述第一存储设备中,则进入s204;

s203:从所述第一存储设备中读取所述请求的数据;

s204:产生携带有所述请求的数据的虚拟地址的缺页异常请求;

s205:根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页的映射关系,从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据;其中,所述物理微页为物理页划分成的多个物理微页中与所述请求的数据分配时的偏移和大小相同的物理微页。

本实施例中,接收到用户发送的数据读取请求后,判断所述数据读取请求所请求的数据是否在所述第一存储设备中,其中,判断所述数据读取请求所请求的数据是否在所述第一存储设备中的过程包括:从所述数据读取请求中获取所请求的数据的虚拟地址;从所述虚拟地址对应的页表中查找匹配的页表项,若查找到匹配的页表项,则所述请求的数据在所述第一存储设备中,若没有查找到匹配的页表项,则所述请求的数据不在所述第一存储设备中。

若请求的数据在第一存储设备中,则直接从第一存储设备中读取所述请求的数据;

若所述请求的数据不在所述第一存储设备中,产生携带有所述请求的数据的虚拟地址的缺页异常请求,根据所述缺页异常请求在所述第二存储设备中为所述请求的数据分配物理微页,建立所述虚拟地址与所述物理微页的映射关系,以从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据,其中,在所述第一存储设备中为所述请求的数据分配物理微页的过程包括:

判断是否首次为所述请求的数据分配物理微页;

若是,为所述请求的数据分配一个新的内存块,并从所述内存块的空闲链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

若否,则从所述请求的数据相应的链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

其中,同一物理页被划分成相同大小和偏移的多个物理微页,不同物理页划分成的物理微页的大小和偏移不同,并且,具有相同大小和偏移的物理微页被归为一个模式,通过链表链接。

本发明的实施例中,为了减少数据对象管理带来的物理空间浪费,将原有4kb的物理页划分成多个物理微页来管理。具体地,将整个物理空间切割成多个内存块,每个内存块包含多个物理页,每个物理页又划分成多个物理微页以加载数据。其中,物理微页的最小尺寸是用户可配置的,即用户可根据其数据的大小情况设置物理微页的最小值,用户可根据实际的数据大小分布情况设置最小的物理微页尺寸,其他的物理微页的尺寸在此基础上等值递增。

本发明实施例提供的内存划分策略忽略原4kb的物理页边界,将每个4kb的物理页划分成多个尺寸大小相同的物理微页,其中,不同物理页划分的物理微页的尺寸大小不同。并且,具有相同尺寸大小和相同偏移的物理微页被归为一个模式,通过链表链接。需要说明的是,如果物理微页的大小不能被4kb整除,则剩余的空间按照从物理页的结束边界逆向挑选尽量大的物理微页为原则,收集到其他具有相同大小和偏移的物理微页的模式链表中。

本发明实施例提供的物理内存的划分示意图,如图3所示,假设最小的物理微页为256b,a至f各为一个4kb的物理页。a页可按照256b划分为相同大小而不同偏移的物理微页,b页可按照512b被整分。当c页按照768b划分时,在偏移3840b处剩余大小256b,这个剩余空间将与a页最后一个物理微页链入同一个模式链表。d页可按照1024b被整分,e页按照大小1280b划分,其剩余空间与c页最后一个物理微页处理相同。f页以1536b划分,在偏移3072b处剩余大小1024b,该剩余空间将按照尽量大的原则被收集到d页的最后一个微页链表中,而不是被划分成四个256b分别链入a页最后四个微页的模式链表中。

基于此,本发明提供的实施例中,为了实现数据的细粒度管理,每个虚拟页上只分配一个数据,并且,虚拟页上的数据与其分配的物理微页的偏移相同。当用户发送的数据读取请求所请求的数据不在第一存储设备即dram中时,触发一个缺页异常,数据读取系统将在第一存储设备即dram中寻找一个合适的物理微页,来加载即将从第二存储设备中获取该数据,并将所述物理微页所在物理页的物理页号写入所述虚拟页对应的页表的页表项中,来建立所述虚拟页与所述物理微页的映射关系,其映射关系如图4所示,从而可以根据所述映射关系从所述第一存储设备中读取所述请求的数据。

本实施例中,为每个模式分别建立不同的链表,管理空闲的和使用过的物理微页,使用过的物理微页所在的链表又分为活跃链表和非活跃链表。所述活跃链表包含最近被请求过的数据,所述非活跃链表包含最近未被请求的数据,当所有的内存块被用完时,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页之前,如图5所示,还包括从第一存储设备到第二存储设备的淘汰过程:

从非活跃链表的链头开始查询;

若所述链头的数据的访问位为1,则将所述数据移到活跃链表的链尾,并对其访问位清零;

若所述链头的数据的访问位为0,则将所述数据作为淘汰候选数据,若所述数据为脏数据,则在所述数据写回至所述第二存储设备后,回收其物理微页到相应的空闲链表。

当所述非活跃链表不足时,还包括:

从活跃链表的链头开始查询;

若所述链头的数据的访问位为1,则将所述数据移至所述活跃链表的链尾,并对其访问位清零;

若所述链头的数据的访问位为0,则将所述数据链入非活跃区的链尾。

其中,可以利用页表项中的访问位,检测该数据最近是否被访问过,可以利用页表项中的脏位,检测该数据是否已变成脏数据。

本实施例中,第二存储设备即ssd被分为多个256kb大小的逻辑块,每个逻辑块包含许多页,每个页包含多个大小与最小微页相同的区。第二存储设备即ssd的逻辑组织结构如图6所示。为了减少第二存储设备即ssd随机写操作的较长延迟,将淘汰的数据组装成256kb的块存入写缓冲区。当写缓冲区快满时,激活相应的后台线程以块为单位顺序写入到第二存储设备即ssd。为了记录数据的虚拟地址与第二存储设备即ssd位置之间的映射关系,实现了一个类似系统页表的映射表st。st由虚拟地址索引,存放了数据的元数据,包括ssd位置、数据大小和偏移等。基于此,可以根据请求数据的虚拟地址在映射表st中查找请求的数据在第二存储设备即ssd中的位置,从而可以将请求的数据从第二存储设备即ssd中加载到第一存储设备中。

由于ssd不支持数据的原地写回,需要延迟较长的擦除操作。因此,即便再次写同一个数据时也应当写到ssd的另一个位置,这将需要更新该数据在st表中的ssd位置信息。同时,该数据在ssd旧位置上的数据将成为垃圾数据。为了回收ssd上的垃圾空间,实现了一个后台线程来执行垃圾回收策略。垃圾回收策略从达到回收条件的块中挑选有效的数据,组装到写缓冲区中,然后该块可以被擦除并重新使用。有效数据的确认是通过比较其当前ssd位置与st表中存放的是否一致来判断。如果两者相同,说明该数据是有效数据;否则该数据为旧备份,可以丢弃,并回收其ssd空间。为了在st上索引数据,在各个块的头部集中存放了数据的虚拟地址。

本发明所提供的混合内存结构的数据读取方法,接收数据读取请求后,判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据,若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页的映射关系,以根据所述映射关系从所述第二存储设备中读取所述请求的数据。由于所述物理微页为物理页划分成的多个物理微页中与所述请求的数据的偏移和大小相同的物理微页,因此,以物理微页来管理原本的物理页,不仅可以减少物理内存的浪费,还能支持对随机大小的数据的访问和来自用户的多线程请求。

本发明实施例还提供了一种混合内存结构的数据读取系统,所述混合内存结构包括第一存储设备和第二存储设备,其中,所述第一存储设备为dram,所述第二存储设备为ssd,优选为基于闪存的固态硬盘,所述读取系统包括:

接收模块,用于接收数据读取请求;

控制模块,用于判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据,若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求;

数据读取模块,用于根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页的映射关系,以使所述控制模块从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据;

其中,所述物理微页为物理页划分成的多个物理微页中与所述请求的数据分配时的偏移和大小相同的物理微页。

其中,所述数据读取模块包括分配模块和修改模块;

所述分配模块用于根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页;

所述修改模块用于将所述物理微页所在物理页的物理页号写入所述虚拟地址对应的页表的页表项中,以建立所述虚拟地址与所述物理微页的映射关系。

其中,所述分配模块包括判断子模块和分配子模块;

所述判断子模块用于判断是否首次为所述请求的数据分配物理微页,若是,产生第一指令并发送至所述分配子模块,若否,则产生第二指令并发送至所述分配子模块;

所述分配子模块用于根据所述第一指令为所述请求的数据分配一个新的内存块,并从所述内存块的空闲链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据,根据所述第二指令从所述请求的数据相应的链表中选取与所述请求的数据的偏移相同的空闲物理微页分配给所述请求的数据;

其中,同一物理页被划分成相同大小和偏移的多个物理微页,不同物理页划分成的物理微页的大小和偏移不同,并且,具有相同大小和偏移的物理微页被归为一个模式,通过链表链接。

其中,所述链表包括活跃链表和非活跃链表,所述活跃链表包含最近被请求过的数据,所述非活跃链表包含最近未被请求的数据,所述数据读取模块还包括淘汰模块;

所述淘汰模块用于从非活跃链表的链头开始查询,若所述链头的数据的访问位为1,则将所述数据移到活跃链表的链尾,并对其访问位清零,若所述链头的数据的访问位为0,则将所述数据作为淘汰候选数据,若所述数据为脏数据,则则在所述数据写回至所述第二存储设备后,回收其物理微页到相应的空闲链表。

其中,所述淘汰模块还用于从活跃链表的链头开始查询,若所述链头的数据的访问位为1,则将所述数据移至所述活跃链表的链尾,并对其访问位清零,若所述链头的数据的访问位为0,则将所述数据链入非活跃区的链尾。

本发明所提供的混合内存结构的数据读取系统,接收数据读取请求后,判断所述数据读取请求所请求的数据是否在所述第一存储设备中,若所述请求的数据在所述第一存储设备中,则从所述第一存储设备中读取所述请求的数据,若所述请求的数据不在所述第一存储设备中,则产生携带有所述请求的数据的虚拟地址的缺页异常请求,根据所述缺页异常请求在所述第一存储设备中为所述请求的数据分配物理微页,并建立所述虚拟地址与所述物理微页的映射关系,从第二存储设备中加载所述请求的数据到所述第一存储设备中,并根据映射关系从所述第一存储设备中读取所述请求的数据。由于所述物理微页为物理页划分成的多个物理微页中与所述请求的数据的偏移和大小相同的物理微页,因此,以物理微页来管理原本的物理页,不仅可以减少物理内存的浪费,还能支持对随机大小的数据的访问和来自用户的多线程请求。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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