一种面向非易失性内存的高效的页面组织和管理方法

文档序号:10569853阅读:299来源:国知局
一种面向非易失性内存的高效的页面组织和管理方法
【专利摘要】本发明公开了一种面向非易失性内存的高效的页面组织和管理方法,首先用树形结构建立并组织NVM中的空闲页面的索引结构,生成磨损度索引树;然后将NVM中的空闲页面按照磨损计数值大小分成若干区间,各区间内部的空闲页面以链表的形式连接起来,形成区间链表;磨损度索引树除叶子节点以外的所有内部节点存放于DRAM中,用于快速索引;DRAM中的最后一层节点指向NVM内存页面的区间链表。本发明提供的面向非易失性内存的高效的页面组织和管理方法,解决了NVM内存页面的组织和管理方法,使得写磨损比较少的页面会被优先选择,从而达到将写操作尽可能地均匀分布到每个页面中的目的;同时在保证写磨损均衡的同时实现高性能的NVM页面的分配和回收管理;且充分利用多核架构,达到并行分配和回收。
【专利说明】
一种面向非易失性内存的高效的页面组织和管理方法
技术领域
[0001]本发明涉及计算机内存页面管理领域,特别是一种面向非易失性内存的高效的页面组织和管理方法。
【背景技术】
[0002]非易失性存储器(Non-VolatileMemory,NVM)有着数据掉电不丢失、高存储密度、低功耗和高速读写等特性。和传统动态随机内存(Dynamic Random Access Memory ,DRAM)一样,NVM能够直接连接到系统的内存总线,共享地址空间,直接通过CPU的load/store指令进行访问。然而,不同于DRAM的是,NVM存储单元的耐久度有限,其存储介质在擦写过程中会被磨损,当磨损到一定程度时,相应的存储单元就会失效。因此,如果频繁擦写地同一块NVM区域,会导致NVM在短时间内被写坏,极大地降低NVM的使用寿命。可见,如何均匀地分布对存储介质的写操作,使得各个页面的磨损次数相近,对延长NVM在计算机内存中的使用寿命具有重大意义。NVM在内存中的使用寿命决定了非易失性内存的实际使用价值。
[0003]由于NVM内存的容量大,在NVM页面管理的同时考虑NVM写磨损均衡将造成一定的性能损失。因此NVM内存的页面组织架构和管理方法的设计必须考虑到性能因素。
[0004]在已被广泛应用的多核并行的计算机系统架构下,NVN内存页面的组织和管理方法需要能够适用于多核并行的体系结构,并充分利用这样并行结构提升内存管理本身的性能。内存页面管理的并行化能力将对在多核并行系统的性能提升产生重要影响。
[0005]目前,以其高速的读写性能和非易失性,NVM内存被用来存放内存文件系统和内存数据库的数据。其中,NVM空闲空间的管理和分配是系统的重要组成部分。现有的管理方案普遍使用位图(Bit Map)、链表(Link List)和树(Tree)组织并管理空闲页。这些NVM的页面管理方案在对NVM空间的回收和分配时都没有考虑到NVM的磨损均衡,这可能导致对某些NVM的页面擦写次数过多,降低NVM内存的实际使用寿命。此外,现有的全局、中心化的内存管理数据结构,在多个进程同时需要分配/回收内存页面的情况下需要加锁,以保证数据的一致,因此会造成性能瓶颈,导致多核系统不能完全发挥并发执行的优势,影响系统性能。

【发明内容】

[0006]本发明的目的是提出一种面向非易失性内存的高效的页面组织和管理方法;该方法是一种面向动态随机存取内存(DRAM)和非易失性存储器(Non-Volatile Memory,NVMWg合内存架构中的非易失性内存的页面管理及磨损均衡的方法。
[0007]本发明的目的是通过以下技术方案来实现的:
[0008]本发明提供的一种面向非易失性内存的高效的页面组织和管理方法,包括以下步骤:
[0009]S1:用树形结构建立并组织NVM中的空闲页面的索引结构,生成磨损度索引树,所述磨损度索引树的最低一层为NVM的空闲页面;
[0010]S2:将NVM中的空闲页面按照磨损计数值大小分成若干区间,各区间内部的空闲页面以链表的形式连接起来,形成区间链表;
[0011]S3:将磨损度索引树除叶子节点外的所有内部节点存放于DRAM中,所述DRAM中最后一层节点设置有指向NVM内存页面的区间链表;
[0012]S4:对NVM页面分配采用写磨损均衡;
[0013]S5:对NVM页面回收采用写磨损均衡。
[0014]进一步,所述步骤SI中的树形结构按照NVM空闲页面的磨损计数值建立索引数据;同时,将所述树形结构根据NVM的空间大小和NVM页面的数量分为不同的层次结构的树;
[0015]在多核并行结构下,每个核使用相互独立的磨损度索引树分配和回收页面,使得NVM内存页面的管理并行执行。
[0016]进一步,所述写磨损均衡过程,具体步骤如下:
[0017]S41:搜索存放在DRAM中的磨损度索引树,找到索引树最左边的节点,找到最小主键;
[0018]S42:通过最小主键的头指针找到NVM中区间链表的起始地址,并返回该页面的地址;
[0019]S43:修改DRAM中该最小主键的头指针,使头指针指向NVM中区间链表的下一个页面。
[0020]进一步,所述写磨损均衡过程,具体步骤如下:
[0021]S51:获取回收页面的磨损计数值;
[0022]S52:搜索存放在DRAM中的磨损度索引树,在磨损度索引树的最后一层节点中找到相应的磨损计数值区间;
[0023 ] S53:将回收的页面插入步骤S8中找到的NVM区间的尾部。
[0024]进一步,所述索引数据包括索引初始化,所述索引初始化具体步骤如下:
[0025]步骤801,开始;
[0026]步骤802,判断NVM中是否有空闲页,如果没有,则该过程结束于步骤811 ;
[0027]步骤803,如果有,扫描NVM页面的空闲链表;
[0028]步骤804,将扫描的每个页面的地址和磨损计数信息读入DRAM;
[0029]步骤805,判断DRAM中是否已经存在磨损度索引树,如果没有,执行步骤806;否则执行步骤807 ;
[0030]步骤806,创建一个新的磨损度索引树根节点,并把该节点的指针保存到NVM;
[0031]步骤807,从磨损度索引树中找到该页面的正确位置,并插入数据,即需要保证DRAM中节点的主键有序排列;
[0032]步骤808,判断是否需要调整树的节点,如果需要,则执行步骤809;
[0033]步骤809,按需对节点执行分裂操作;
[0034]步骤810,调整NVM空闲页的区间链表指针;
[0035]步骤811,继续处理NVM空闲链表的下一个页面。
[0036]进一步,所述NVM页面分配按照以下步骤进行:
[0037]步骤901,开始;
[0038]步骤902,初始化需要分配的页面总数M;
[0039]步骤903,初始化已经分配的页面总数N;
[0040]步骤904,判断是否已经分配完所需数目的页面,如果是,则执行步骤910;否则执行步骤905;
[0041 ]步骤905,从DRAM的磨损度索引树中,读取最左边节点的主键,对应的指针指向的NVM页面都是磨损计数值相对较小的页面;
[0042]步骤906,从DRAM中最后一层节点中找到NVM区间的头指针;
[0043 ] 步骤907,返回NVM链表头页面的地址,表示新分配的一个NVM页面;
[0044]步骤908,修改DRAM中链表头的指针为该区间下一个NVM的页面;
[0045]步骤909,对已经分配的页面总数加I;
[0046]步骤910,所有页面已经分配完毕,分配过程结束。
[0047]进一步,所述NVM页面回收过程按照以下步骤进行:
[0048]步骤1001,开始;
[0049]步骤1002,获取回收页面的磨损计数值,所述数值存储在全局数组中,可以根据该页面的地址定位到其磨损计数值;
[0050]步骤1003,在磨损度索引树中找到该页面对应的主键以及其对应的区间,即需要找到这个更新之后的页面属于哪个NVM区间;
[0051 ]步骤1004,读取该区间的尾指针;
[0052]步骤1005,将回收的页面插入NVM区间的尾部,不对NVM这个区间的页面磨损计数排序,该操作需要同时修改空闲链表的指针和区间链表的指针;
[0053]步骤1006,修改磨损度索引树相应区间的尾指针为新回收的页面,表示NVM区间链表增加了一个元素;
[0054]步骤1007,回收过程结束。
[0055]由于采用了上述技术方案,本发明具有如下的优点:
[0056]本发明提供的面向非易失性内存的高效的页面组织和管理方法,解决了NVM内存页面的组织和管理方法,使得写磨损比较少的页面会被优先选择,分配给相应的任务或进程使用,从而达到将写操作尽可能地均匀分布到每个页面中的目的;同时在保证写磨损均衡的同时实现高性能的NVM页面的分配和回收管理;且充分利用多核架构,达到并行分配和回收。
[0057]本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
【附图说明】
[0058]本发明的【附图说明】如下。
[0059]图1为索引初始化或重建流程图。
[0060]图2为NVM页面分配过程。
[0061 ]图3为NVM页面回收流程图。
[0062]图4为索引结构图。
[0063]图5为NVM页面分配过程。
[0064]图6为NVM页面回收过程。
【具体实施方式】
[0065]下面结合附图和实施例对本发明作进一步说明。
[0066]实施例1
[0067]如图所示,本实施例提供的一种基于磨损计数机制的树型数据结构来管理NVM的空闲空间,包括以下步骤:
[0068]将NVM空间划分成固定大小的页面(例如为4KB,2MB,或者不同大小页面的集合),在NVM内存中用一块连续区域存放每个页面的“磨损计数值”,“磨损计数值”记录了每一个页面的累积写次数;
[0069]每个NVM页面有两套指针管理,其中一个指针用来将所有的页面链接成一个“空闲链表”,另外一个指针用来将所有的NVM页面按照磨损计数值组合成不同的区间;
[0070]在系统运行时,以树形结构组织NVM中的空闲页面,称为“磨损度索引树”。磨损度索引树的底层是NVM中的空闲页面,空闲页面按照磨损计数值分成多个区间,各区间内部的空闲页面以链表的形式连接起来,称为“区间链表”。磨损度索引树除叶子节点外的所有内部节点用于存放划分及标识NVM页面各区间的索引。在系统运行时,其根节点和内部节点存放于DRAM中;
[0071]磨损度索引树除叶子节点外的所有每个内部节点都包含多个“索引单元”。一个索引单元由一对主键和一对指针组成。其中,两个主键定义了一个NVM空闲页面组中页面的磨损计数值的范围,两个指针则指向了该组指针链表的头尾两个元素。每个主键和指针对表示磨损计数值小于或等于该主键值的所有NVM页面,都可以通过对应的指针找到;每个节点包含一个整数,用来记录当前节点有效键值的个数;DRAM中最后一层节点的每个主键对应有两个指针,分别指向NVM空闲页面区间链表的头部和尾部,另外一个指针指向该节点的父节点,在合并和删除过程中用来调整树的结构;
[0072]在索引树结构初始化过程中,扫描NVM的空闲链表,顺序读取NVM的页面地址和页面的磨损计数值,在DRAM中建立NVM页面的磨损度索引树;如果系统是多核架构,则为每个核单独建立一个磨损度索引树,所有的磨损度索引树有相同的结构,并将空闲页面均匀分配到每个索引树中;
[0073]在分配空闲NVM页面的时候,查询DRAM中的索引,从磨损度索引树最左边的叶子节点开始,取出空闲的NVM页面。这种方式可以保证分配的页面都是磨损计数值比较小的页面。此外,由于分配操作只需要修改链表指针,能够在常数时间完成,时间复杂度为0(1);
[0074]在回收页面时,根据该页面更新之后的磨损计数值,将其插入到NVM对应的区间中;
[0075]NVM中存储叶子节点的区间没有限定大小,可以动态增长或缩小;在一定情况下,还可以统一调整各个区间的范围及大小;
[0076]当区间需要细化或者区间页面过于密集时,可触发“分裂操作”,该操作将待调整的区间中的页面信息读入DRAM,根据磨损计数值重新组织,修改DRAM中的索引结构,然后更新NVM的区间链表指针;
[0077]NVM中区间的分裂会导致DRAM中树形结构的节点调整主键范围,分裂之后的节点所包含的主键范围更加精细,即可以做到更好的磨损均衡;
[0078]当区间范围需要扩大或区间页面过于稀疏时,可触发“合并操作”,合并的好处是使之后的分配操作更快。
[0079]在系统每次分配空闲页面时,使用的都是此时磨损程度相对较小的页面。在回收页面时,通过新的磨损计数值可以将该页面插入适当的区间,用来保证磨损程度比该页面小的空闲页面在下次分配过程中被先使用。因此,这种管理方案能够将写操作均匀分布到系统所有的页面中。并且该方案在DRAM中只需要建立指向NVM页面的指针结构,不需要把NVM所有的页面信息存储到DRAM中,能极大减小DRAM中的空间开销。此外,由于页面用用链表管理,故该方案能在常数时间完成分配和回收,效率很高。针对多核架构,每个核分配和回收的过程使用自己的磨损度索引树,不需要对数据结构加锁,能够实现NVM内存页面管理和磨损均衡的高度并行化。
[0080]实施例2
[0081 ]本实施例提供的索引的初始化或重建流程,如图1所示:
[0082]该流程开始于步骤801,然后如下:
[0083]在步骤802,判断NVM中是否有空闲页,如果没有,则该过程结束于步骤811;如果有,在步骤803,扫描NVM页面的空闲链表;
[0084]在步骤804,将扫描的每个页面的地址和磨损计数信息读入DRAM;
[0085]在步骤805,判断DRAM中是否已经存在磨损度索引树。如果没有,执行步骤806;否则执行步骤807。
[0086]在步骤806,创建一个新的磨损度索引树根节点,并把该节点的指针保存到NVM;
[0087]在步骤807,从磨损度索引树中找到该页面的正确位置,并插入数据,即需要保证DRAM中节点的主键有序排列;
[0088]在步骤808,判断是否需要调整树的节点,如果需要,则执行步骤809;
[0089]在步骤809,按需对节点执行分裂等操作,DRAM中的节点可以按照B+树的条件维护,即当某个节点所存储的键值和指针对达到最大度数是,需要分裂该节点,具体过程和B+树的分裂操作一样;
[0090]在步骤810,调整NVM空闲页的区间链表指针;
[0091 ] 在步骤811,继续处理NVM空闲链表的下一个页面。
[0092]其中,NVM页面分配过程如图2所示。该流程起始于步骤901,然后:
[0093]在步骤902,初始化需要分配的页面总数Μ;
[0094]在步骤903,初始化已经分配的页面总数N;
[0095]在步骤904,判断是否已经分配完所需数目的页面,如果是,则执行步骤910;否则执行步骤905 ;
[0096]在步骤905,从DRAM的磨损度索引树中,读取最左边节点的主键,对应的指针指向的NVM页面都是磨损计数值相对较小的页面;
[0097]在步骤906,从DRAM中最后一层节点中找到NVM区间的头指针;
[0098]在步骤907,返回NVM链表头页面的地址,表示新分配的一个NVM页面;
[0099]在步骤908,修改DRAM中链表头的指针为该区间下一个NVM的页面;
[0100]在步骤909,对已经分配的页面总数加I;
[0101]在步骤910,所有页面已经分配完毕,分配过程结束。
[0102]其中,NVM页面回收过程如图3所示。该过程起始于步骤1001,然后,
[0103]在步骤1002,获取回收页面的磨损计数值,该数值存储在全局数组中,可以根据该页面的地址定位到其磨损计数值;
[0104]在步骤1003,在磨损度索引树中找到该页面对应的主键以及其对应的区间,即需要找到这个更新之后的页面属于哪个NVM区间;
[0105]在步骤1004,读取该区间的尾指针;
[0106]在步骤1005,将回收的页面插入NVM区间的尾部,不对NVM这个区间的页面磨损计数排序,该操作需要同时修改空闲链表的指针和区间链表的指针;
[0107]在步骤1006,修改磨损度索引树相应区间的尾指针为新回收的页面,表示NVM区间链表增加了一个元素;
[0108]在步骤1007,回收过程结束。
[0109]其中,索引树的结构图如图4所示,DRAM中存储树形结构除叶子节点外的所有中间节点,中间节点包含多个主键和指针对,以及记录该节点有效记录个数的数值NumC3DRAM中最后一层节点的每个主键对应两个指针,所有NVM中磨损计数值小于主键的页面构成一个区间(Bucket),HeadPtr存放NVM中区间的首地址,TaiIPtr存放区间的尾地址。
[0110]NVM数据页包括两个字段,Free_List_Pointer: 64字节指针,用来将所有页面链接成空闲链表;Range_Po inter: 64字节指针,用来将所有页面按照磨损计数值的大小顺序组成不同区间。
[0111]如图表示DRAM中最后一层最左边的节点有两个主键指针对,其中主键Keyl为50,主键Key2为80 C3HeadPtrl指向磨损计数值等于11的NVM页面,Tai IPtrl指向磨损计数值等于47的页面,其中,前三个NVM页面(磨损计数值为11,47,45)构成一个区间,所有页面的磨损计数值都小于50,并且每个页面都由?代61^81:_?0;[1^61'链接起来,同时1^11^6_?0;[1^61'将其按照磨损计数值区间组织起来。HeadPtr2,TailPtr2所指向的NVM区间就只有两个页面,其磨损计数值分别为68,72。
[0112]其中,NVM页面分配过程如图5所示,图5表示分配一个NVM页面之后索引的结构,其中磨损计数值为11的NVM页面被分配,需要修改DRAM最后一层节点的HeadPtr为磨损计数值为45的页面。
[0113]NVM页面回收过程如图6所示,图6表示回收一个NVM页面之后索引的结构,其中磨损计数值为65的NVM页面为新回收的页面,该页面对应的区间为主键80,直接将该页面插入TailPtr2之后,并修改TailPtrf指向该页面,注意此时不需要对NVM区间按照磨损计数值排序,当系统空闲或者每个NVM区间存放的节点个数十分不平衡时,再读取NVM区间的所有页面信息到DRAM,调整DRAM中的树形结构,使其重新平衡。
[0114]最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
【主权项】
1.一种面向非易失性内存的高效的页面组织和管理方法,其特征在于:包括以下步骤: S1:用树形结构建立并组织NVM中的空闲页面的索引结构,生成磨损度索引树,所述磨损度索引树的最低一层为NVM的空闲页面; S2:将NVM中的空闲页面按照磨损计数值大小分成若干区间,各区间内部的空闲页面以链表的形式连接起来,形成区间链表; S3:将磨损度索引树除叶子节点外的所有内部节点存放于DRAM中,所述DRAM中最后一层节点设置有指向NVM内存页面的区间链表; 54:对NVM页面分配采用写磨损均衡; 55:对NVM页面回收采用写磨损均衡。2.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述步骤SI中的树形结构按照NVM空闲页面的磨损计数值建立索引数据;同时,将所述树形结构根据NVM的空间大小和NVM页面的数量分为不同的层次结构的树; 在多核并行结构下,每个核使用相互独立的磨损度索引树分配和回收页面,使得NVM内存页面的管理并行执行。3.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述写磨损均衡过程,具体步骤如下: 541:搜索存放在DRAM中的磨损度索引树,找到索引树最左边的节点,找到最小主键; 542:通过最小主键的头指针找到NVM中区间链表的起始地址,并返回该页面的地址; S43:修改DRAM中该最小主键的头指针,使头指针指向NVM中区间链表的下一个页面。4.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述写磨损均衡过程,具体步骤如下: S51:获取回收页面的磨损计数值; 552:搜索存放在DRAM中的磨损度索引树,在磨损度索引树的最后一层节点中找到相应的磨损计数值区间; 553:将回收的页面插入步骤S8中找到的NVM区间的尾部。5.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述索引数据包括索引初始化,所述索引初始化具体步骤如下: 步骤801,开始; 步骤802,判断NVM中是否有空闲页,如果没有,则该过程结束于步骤811 ; 步骤803,如果有,扫描NVM页面的空闲链表; 步骤804,将扫描的每个页面的地址和磨损计数信息读入DRAM; 步骤805,判断DRAM中是否已经存在磨损度索引树,如果没有,执行步骤806;否则执行步骤807; 步骤806,创建一个新的磨损度索弓I树根节点,并把该节点的指针保存到NVM; 步骤807,从磨损度索引树中找到该页面的正确位置,并插入数据,即需要保证DRAM中节点的主键有序排列; 步骤808,判断是否需要调整树的节点,如果需要,则执行步骤809; 步骤809,按需对节点执行分裂操作; 步骤810,调整NVM空闲页的区间链表指针; 步骤811,继续处理NVM空闲链表的下一个页面。6.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述NVM页面分配按照以下步骤进行: 步骤901,开始; 步骤902,初始化需要分配的页面总数M; 步骤903,初始化已经分配的页面总数N; 步骤904,判断是否已经分配完所需数目的页面,如果是,则执行步骤910;否则执行步骤905; 步骤905,从DRAM的磨损度索引树中,读取最左边节点的主键,对应的指针指向的NVM页面都是磨损计数值相对较小的页面; 步骤906,从DRAM中最后一层节点中找到NVM区间的头指针; 步骤907,返回NVM链表头页面的地址,表示新分配的一个NVM页面; 步骤908,修改DRAM中链表头的指针为该区间下一个NVM的页面; 步骤909,对已经分配的页面总数加I; 步骤910,所有页面已经分配完毕,分配过程结束。7.如权利要求1所述的面向非易失性内存的高效的页面组织和管理方法,其特征在于:所述NVM页面回收过程按照以下步骤进行: 步骤1001,开始; 步骤1002,获取回收页面的磨损计数值,所述数值存储在全局数组中,可以根据该页面的地址定位到其磨损计数值; 步骤1003,在磨损度索引树中找到该页面对应的主键以及其对应的区间,即需要找到这个更新之后的页面属于哪个NVM区间; 步骤1004,读取该区间的尾指针; 步骤1005,将回收的页面插入NVM区间的尾部,不对NVM这个区间的页面磨损计数排序,该操作需要同时修改空闲链表的指针和区间链表的指针; 步骤1006,修改磨损度索引树相应区间的尾指针为新回收的页面,表示NVM区间链表增加了一个元素; 步骤1007,回收过程结束。
【文档编号】G06F12/02GK105930280SQ201610364236
【公开日】2016年9月7日
【申请日】2016年5月27日
【发明人】诸葛晴凤, 沙行勉, 吴林
【申请人】诸葛晴凤
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1