一种内存冗余消除方法

文档序号:6370449阅读:695来源:国知局
专利名称:一种内存冗余消除方法
技术领域
本发明涉及一种计算机系统优化领域,特别是采用RAM (Random Access Memory) 的计算机的内存冗余消除方法。
背景技术
随着内存芯片技术的不断发展,当代计算机系统所装备的内存越来越多,内存当 中存储的内容也越来越丰富。然而,云计算等技术的兴起使得计算机系统当中的内存相对 于硬盘来说,仍然是一种稀缺资源。已有的操作系统采用了共享内存,进程创建时的写时拷 贝(Copy-On-Write)等技术来节约内存,但是仍然有相当多的内存区域中包含了相同的内 容造成了内存中数据的冗余。这些冗余的内容来源于不同的磁盘块,或者不同的应用程序, 因此是传统的计算机系统内存技术无法解决的难题。作为例子之一,就是在云计算中大量 使用的虚拟化技术在一台拥有很多个虚拟机的物理机器当中,不同虚拟机之间的内存往 往是来自类似的应用程序,因此可能拥有很高的冗余度。如何高效合理地解决内存冗余的 问题就被提上了日程。

发明内容
发明目的本发明所要解决的技术问题是针对现有技术的不足,提供一种内存冗 余消除方法。为了解决上述技术问题,本发明公开了一种内存冗余消除方法,包括以下步骤步骤1,将计算机内存划分成不同的区域块,选择其中一个区域块,初始化查找数 据结构;步骤2,采用加密的哈希函数或者非加密的哈希函数,计算当前选择区域块的全部 内容或者部分内容的哈希值作为当前选择区域块的哈希值;步骤3,从查找数据结构中,查找是否有其他区域块的哈希值与步骤2中区域块的 哈希值相同;步骤4,如果是,则判定两个区域块为高概率相同,转至步骤6,否则转至步骤5 ;步骤5,将此区域块以及哈希值加入查找数据结构,转至步骤10 ;步骤6,如果步骤2中采用加密哈希函数,并且哈希函数计算的是区域块的全部内 容,则转至步骤8,否则转至步骤7 ;步骤7,比较这两个区域块的内容是否完全相同,如果完全相同,进行步骤8,否则 转至步骤10 ;步骤8,用一个区域块替换另一个区域块,并更改被替换的区域块的索引的访问权 限,进行步骤9;步骤9,释放被替换索引的区域块;步骤10,从剩余区域块中选择一区域块,并返回步骤2,直到所有区域块遍历完 毕。
本发明中,进一步地,步骤1中所述将计算机内存划分成不同的区域块采用物理 内存页框划分法、操作系统映射内存块划分法(包括堆、栈、mmap操作返回区域)以及虚拟化 技术管理内存块划分法中的任意一种(其划分的粒度从小到大),划分的依据视实施者对其 具体实施的场景中可能出现冗余的粒度的预估计而定,如实施者对可能的冗余粒度估计不 足,则缺省可采用最小粒度的物理内存页框划分法。本发明中,步骤3中数据结构为哈希表或者查找树。。本发明中,步骤8中的索引为指针,数组下标或者虚拟内存页表项中的任意一种。本发明中,步骤8中原来的索引访问权限更改为写时拷贝。本发明使用汇编语言、C语言或者C++语言均可实现。本发明与背景技术相比,具有的有益效果是1)内存使用效率的提高。本发明的方法能发现现有技术不能处理的内存冗余,通 过冗余的消除,进一步提高了内存的使用效率。随着云计算的推广,内存的冗余程度会越来 越高,本方法的优势也将越来越明显。2)实施的灵活性。本发明的方法能适用于不同的内存冗余粒度,能应用不同的类 型的Hash函数(对加密或者非加密Hash函数做了区别考虑),具有现有技术没有的实施灵 活性,在实施者比较清楚自己平台特性的基础上,实施更有灵活性,能够挖掘更多的平台相 关的潜在效率。


下面结合附图和具体实施方式
对本发明做更进一步的具体说明,本发明的上述 和/或其他方面的优点将会变得更加清楚。图1是本发明内存冗余消除方法的流程图。图2是查找数据结构为Hash表结构方式。图3是查找数据结构为查找树结构方式。图4是操作系统映射内存块的结构图。
具体实施例方式如图1所示,本发明公开了一种内存冗余消除方法,包括以下步骤步骤1,内存区域块的划分与选择,初始化查找数据结构。根据不同的应用场景选择合理的划分方式,具体选择的依据是所应用场景内存可 能冗余的程度。根据不同的应用场景选择合理的划分方式,依据不同CPU体系结构选择物 理页框的大小常见的,例如Intel X86可以的页框大小是4KB、2MB、4MB或者1GB几种可能 性,而对于 IA64 可能有 4K、8K、64K、256K、1M、4M、16M、256M ;等等。以物理页框划分方式为例,守护进程依照计算机虚拟内存管理的页表扫描,每次 通过1到4次的页表查询得出一个可以直接寻址的物理页框。并计算出可以对其进行访问 的内存指针,并将该页框的指针作为下一步的输入。如果在页表扫描的过程中出现了空的 页表项,则跳过,扫描下一个页表项。在页框划分方式为例的前提下。初始化查找数据结构为空。步骤2,采用Hash (哈希)函数计算所选区域块的全部内容Hash值或者部分内容Hash值(简称H值)。根据具体实施的需求选择一个Hash函数,该Hash函数可以是强度比较高冲突率 比较小的加密Hash函数比如SHA-1 ;也可以是强度比较低,冲突率稍高的非加密Hash函 数,视实施的硬件的特性以及对速度的要求而定。试图达到在所实施的具体硬件环境中,该 Hash函数的计算代价比较小,而冲突率又不是很高。该Hash函数以当前所选择的内存区域 的指针作为输入,计算该内存区域全部或者部分内容的Hash值。在计算过程中,应当保持 该内存区域的内容不变。得出的Hash值可以为32位、64位或者128位的无符号整形。步骤3,从查找数据结构中,查找是否有其他区域块的哈希值与步骤2中区域块的 哈希值相同。根据具体实施的需求可以选择Hash表或者查找树作为查找数据结构,根据查找 数据结构可能的规模,可以为动态或者静态存储。典型的哈希表的结构如图2所示,典型的 查找树的结构图如图3所示其中以每个内存区域块的Hash值为键值(以Hi表示),内存区 域块号组成的二元组作为这两种结构的基本节点以查找树为例,上一步骤的Hash值作为查找的键值,进行树的查找操作。一般为 了快速查找,查找树的涉及可以采用红黑树,AVL树等的平衡结构。步骤4,如果是,则判定两个区域块为高概率相同,转至步骤6,否则转至步骤5。如果找到另外一个区域块的Hash值,与步骤2内存区域块的Hash值相同,那么由 于Hash函数的特点,即可认为这两个Hash值相同的内存区域块有很高的概率完全相同。那 么需要进一步的判断来确定,是否这两块的内容确实完全相同还是仅仅是由于Hash冲撞 导致的Hash相同。因为只有严格相同的两个内存区域块,才能真的进行冗余消除。一般认 为,如果小于硬件除错的概率的Hash冲撞率,那么可以认为如果Hash值相同那么这个区域 块内容严格相同。否则,需要更高可信度的判断。步骤5,如果没有找到另一块Hash值相同的区域块,那么将此区域块以及Hash值 加入查找数据结构,并转入步骤10。以查找树为例如果通过树的查找操作没有查找到相同Hash值的另一个区域块, 那么,将此内存区域块以它的Hash值作为键值,插入到此查找树当中。并做对应的查找树 平衡操作。此步骤的执行可以令查找数据结构不断扩充,因此实施过程中需要保证足够的 预留存储空间来存放查找数据结构。步骤6,如果步骤2中Hash函数的种类为加密Hash函数,转入步骤8,否则进行步 骤7。一般加密Hash函数的冲撞率都非常低,例如SHA-1,构造一个冲突需要大约280 次操作,这样的冲撞率一般能够保证,如果两个内存区域块的全内容Hash值相同,那么,这 个两个区域块的内容不相等的概率,比硬件错误而导致的内存区域块内容改变的概率还要 低。因此,如果在步骤2中Hash函数选取的是加密Hash函数,并且作为Hash函数输入的 是全部的内存区域内容,那么可以直接进行索引的替换工作。步骤7,比较这两个Hash值相同的区域块的全部内容,如果内容不相同,转入步骤 10,如果相同,进行步骤8。如果采用的是非加密的Hash函数,那么,尽管两个内存区域块的Hash相同,他们 仍然是有一定的概率不同。如果内容真的不同,直接用一种一个内存区域块的索引替换另外一个内存区域块的索引会导致数据信息的丢失。因此,在本步骤,需要进一步100%确认 这两个内存区域块是否相等。确认的方式可以是常见的内存比较函数_!^!^或者其它类 似的按字节对比机制,如果有硬件支持,可以对此比较过程进行加速。比较得出的结果,如 果发现这两个他81!值相同的区域块实际内容确实相同,那么,继续步骤8;否则,转入步骤 10。步骤8,将其中一个区域块的索引替换成另一个区域块的索引;并更改原来索引 的访问权限,变成写时拷贝(Copy-On-Write)假设将该两个区域块命名成B1和も(对应关系任意),将原本指向B1的索引替换 成指向も的索引,并更改所有指向も的索引访问权限,进行步骤9。本步骤只需要将其中的ー个内存区域块的索引替换成另ー个即可。以页框划分方 式为例,这里索引即是指向物理页框的虚拟内存页表项。在替换了页表项以后,原来所有各 自访问两个物理页框的操作,即会被导引到同ー个物理页框。显然,这个时候如果有写入操 作,那么会导致不ー致,因此,需要对索引(页表项)的访问权限做ー定限制。限制的方式可 以是全部变成写时拷贝(Copy-On-Write)。步骤9,释放被替换索引的冗余的区域块此时由于被替换索引的区域块已经不再有索引指向它,那么该区域块是无用的冗 余区域块。可以对此内存区域块执行释放操作。以页框划分方式为例,这样的操作可能将 该页框放回可供自由分配的存储池。步骤10,从剩余内存区域块中选择下ー个区域块返回步骤2,直到所有内存区域 块遍历完毕。到本步骤的时候,已经完成了ー个冗余内存区域块的消除エ作。那么需要选择下 ー个内存区域块来尝试进行冗余消除。实施例1本实施例公开了ー种基于内存区域块物理页框划分的云计算环境下内存冗余消 除方法,包括以下步骤步骤1,采用虚拟化技术管理内存块划分方法将计算机内存划分成不同的物理页 框,通过扫描计算机虚拟内存管理的页表,选择其中一个物理页框,初始化查找数据结构;步骤2,采用加密的哈希函数或者非加密的哈希函数,计算当前选择物理页框的全 部内容或者部分内容的哈希值作为当前选择物理页框的哈希值;步骤3,从查找数据结构中,查找是否有其他物理页框的哈希值与步骤2中物理页 框的哈希值相同;步骤4,如果是,则判定两个物理页框为高概率相同,转至步骤6,否则转至步骤5 ;步骤5,将此物理页框以及哈希值加入查找数据结构,转至步骤10 ;步骤6,如果步骤2中采用加密哈希函数,并且哈希函数计算的是物理页框的全部 内容,则转至步骤8,否则转至步骤7 ; 步骤7,比较这两个物理页框的内容是否完全相同,如果完全相同,进行步骤8,否 则转至步骤10 ; 步骤8,查找系统虚拟内存管理页表,将查找数据结构中已有的物理页框(假设用 ?叫^表示)的页表项替换成当前选择的物理页框(假设用Pag%)的页表项;并更改所有指向PageB的页表项的访问权限为写时拷贝(copy-on-write),进行步骤9 ;步骤9,释放被替换页表项的冗余的物理页框PageA ;步骤10,从剩余区域块中选择一物理页框,并返回步骤2,直到所有物理页框遍历 完毕。实施例2本实施例公开了一种基于操作系统映射内存块划分法的云计算环境下内存冗余 消除方法。基于平台的特征,假设实施者确定内存的冗余粒度较大,并且硬件为加密Hash 函数SHA1提供了特别的优化(例如VIA的C7处理器芯片)。如图4所示,假设系统当中已有的进程Pp P2、…Pi等,其各自已有不同数量的映 射内存区域块,依照地址次序链接在各自的进程控制块(PCB)中。本实施案例包括以下步骤步骤1,将系统内存基于操作系统映射内存块(_ap系统调用所产生的内存映射 块)划分成不同的内存块,依照系统中进程号,从大到小,进程地址从大到小的双重次序标 准选择第一个内存块。初始化查找数据结构为空红黑树(包含0个树节点);步骤2,初始化CPU (C7)用以计算SHA1哈希值的加密引擎,将所选择的内存区域 的所有内容填入引擎并执行SHA1计算,得出160位哈希值H ;步骤3,从查找数据结构,红黑树中,查找是否有其它内存区域的哈希值与步骤2 中所选内存区域相同;步骤4,如果是,则认为这两个内存区域块的内容相同(由于SHA1的哈希冲撞概率 相当低,甚至低于硬件的除错的概率,因此可以这样认为),转至步骤6,否则转至步骤5 ;步骤5,将指向原被选择内存块的指针,以其SHA1哈希值H作为键值,插入到红黑 树中,成为一个树节点。并同时检查和调整红黑树的红黑属性,结束后转至步骤8 ;步骤6,将原本指向其中一个内存块(例如图4,Block2)的指针替换成指向相同的 另一个内存块(例如图4,Block5)的指针;并更改所有指向Block2的指针的访问权限标注 写时拷贝(图4中用点横线表示),扫描Block5所映射内存物理页面对应的虚拟内存页表,并 将所有页表项置成写保护,从此以后,凡是对这个内存块的任何一个页面的写入操作都将 触发对Block5数据的拷贝。步骤7,删除并释放被替换指针的冗余内存区域块Block2 (图4中用虚线表示),并 做其它的指针调整用以连接其它原本由Block2连接的内存块(如图4说明);步骤8,依照步骤1的排序方法,从剩余区域块中选择下一个内存块,并返回步骤 2,直到所有内存块遍历完毕。本发明提供了一种内存冗余消除方法,具体实现该技术方案的方法和途径很多, 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在 不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发 明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
权利要求
1.一种内存冗余消除方法,其特征在于,包括以下步骤步骤1,将计算机内存划分成不同的区域块,选择其中一个区域块,初始化查找数据结构;步骤2,采用加密的哈希函数或者非加密的哈希函数,计算当前选择区域块的全部内容 或者部分内容的哈希值作为当前选择区域块的哈希值;步骤3,从查找数据结构中,查找是否有其他区域块的哈希值与步骤2中区域块的哈希 值相同;步骤4,如果是,则判定两个区域块为高概率相同,转至步骤6,否则转至步骤5 ;步骤5,将此区域块以及哈希值加入查找数据结构,转至步骤10 ;步骤6,如果步骤2中采用加密哈希函数,并且哈希函数计算的是区域块的全部内容, 则转至步骤8,否则转至步骤7 ;步骤7,比较这两个区域块的内容是否完全相同,如果完全相同,进行步骤8,否则转至 步骤10 ;步骤8,用一个区域块替换另一个区域块,并更改被替换的区域块的索引的访问权限, 进行步骤9 ;步骤9,释放被替换索引的区域块;步骤10,从剩余区域块中选择一区域块,并返回步骤2,直到所有区域块遍历完毕。
2.根据权利要求1所述的一种内存冗余消除方法,其特征在于,步骤1中所述将计算机 内存划分成不同的区域块采用物理内存页框划分法、操作系统映射内存块划分法以及虚拟 化技术管理内存块划分法中的任意一种。
3.根据权利要求1所述的一种内存冗余消除方法,其特征在于,步骤3中数据结构为哈 希表或者查找树。
4.根据权利要求1所述的一种内存冗余消除方法,其特征在于,步骤8中的索引为指 针,数组下标或者虚拟内存页表项中的任意一种。
5.根据权利要求1所述的一种内存冗余消除方法,其特征在于,步骤8中原来的索引访 问权限更改为写时拷贝。
全文摘要
本发明涉及一种内存冗余消除方法,包括步骤1,将计算机内存划分成不同的区域块并选择;步骤2,计算当前选择区域块的哈希值;步骤3,查找是否有其他区域块的哈希值与步骤2中区域块的哈希值相同;步骤4,如果是,判定两个区域块为高概率相同,转至步骤6;步骤5,将此区域块以及哈希值加入查找数据结构,转至步骤10;步骤6,如果步骤2中采用加密哈希函数,并且哈希函数计算的是区域块的全部内容,则转至步骤8;步骤7,比较这两个区域块的内容是否完全相同;步骤8,将其中一个区域块的索引替换成另一个区域块的索引;步骤9,释放被替换索引的区域块;步骤10,从剩余区域块中选择一区域块,并返回步骤2。
文档编号G06F12/12GK102722452SQ201210171790
公开日2012年10月10日 申请日期2012年5月29日 优先权日2012年5月29日
发明者夏耐 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1