
一种基于哈希表组织虚拟内存与存储的映射方法及装置的制作方法.docx
3页一种基于哈希表组织虚拟内存与存储的映射方法及装置的制作方法专利名称:一种基于哈希表组织虚拟内存与存储的映射方法及装置的制作方法技术领域:本发明涉及计算机内存组织及内存与存储的映射关系,特别涉及一种基于哈希表组织虚拟内存与存储的映射方法及装置背景技术:随着存储的广泛应用,用户对数据在传输和存储时的安全性要求越来越高,推动了存储的各个层次高可用性的发展如集群高可用,集群高可以保证一个节点宕机时,另外的节点接管宕机节点的工作但多个节点同时提供服务时要保证对磁盘数据访问的一致性,目前的实现方法是只能有一个控制节点访问磁盘数据,对其余节点的磁盘读写请求全部转发给控制节点来处理但是读节点的读写请求发送到远端节点处理会降低数据读写的速率为了提高数据读写速率,在节点中使用内存作为缓存来缓存数据写数据时,写请求在将数据写入缓存后立即返回,不需要等待数据写入磁盘读数据时,读请求会寻找缓存中是否有有效的数据,如果缓存有有效数据则直接从缓存读取数据,不需要从磁盘读取缓存模块的应用可以有效提高数据的读写速率使用缓存暂存数据时,如果其中一个节点宕机,数据没有能及时完整的写入磁盘,这样会造成数据的丢失所以需要在节点间备份数据,当一个节点宕机,其余节点备份的数据可以保证正确的写入磁盘,保证写入磁盘数据的完整性。
缓存模块重要的工作是不管LUN(Logical Unit Number,逻辑单元号)的大小,保证所有LUN的所有位置都可以映射到缓存模块中的页中其中一种方式是根据哈希算法将所有LUN的数据都映射到一个哈希表中,由页结构体中对应的LUN域来区分不同LUN对哈希表中页的访问需要先获取互斥锁当对多个LUN进行读写时,并发冲突就会增大,影响效率另一种方式是将每个LUN映射到一个哈希表,这样并发访问冲突会减小,但hash表的内存占用会急剧增加发明内容本发明所要解决的技术问题是,提供一种基于哈希表组织虚拟内存与存储的映射方法及装置,以在查找效率和内存占用之间提供一种优化方案为了解决上述技术问题,本发明公开了一种基于哈希表组织虚拟内存与存储的映射方法,包括:初始化哈希表的个数阈值;当添加逻辑单元号(LUN)时,若判断系统当前所创建的哈希表的个数小于所述个数阈值,则创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,若判断系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中较佳地,上述方法还包括:在删除LUN过程中,判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除。
较佳地,上述方法还包括:初始化哈希表长较佳地,上述方法中,初始化哈希表长度的过程如下:计算系统可用内存页,根据所计算的可用内存页总数和哈希表项单链表的平均长度计算哈希表长本发明还公开了一种基于哈希表组织虚拟内存与存储的映射装置,包括:第一模块,初始化哈希表的个数阈值;第二模块,在添加逻辑单元号(LUN)时,判断系统当前所创建的哈希表的个数是否小于所述个数阈值;第三模块,当系统当前所创建的哈希表的个数小于所述个数阈值时,创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,当系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中较佳地,上述装置还包括:第四模块,在删除LUN过程中,判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除较佳地,上述装置还包括:第五模块,初始化哈希表长较佳地,上述装置中,所述第五模块,计算系统可用内存页,根据所计算的可用内存页总数和哈希表项单链表的平均长度计算哈希表长本申请技术方案在查找效率和内存占用之间提供了一种优化方案,在现实测试中利于性能调优,且提高了系统资源利用率。
图1是本实施例提供的虚拟内存与存储的映射方法流程图;图2 (a)是LUN个数为2,哈希表的个数阈值为4时的映射关系示意图;图2(b)是LUN个数为6,哈希表的个数阈值为4时的映射关系示意图具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,下文将结合附图对本发明技术方案作进一步详细说明需要说明的是,在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合实施例1本申请发明人提出创建多个哈希表,从而将各LUN与不同的哈希表分别映射,以提高系统资源利用率基于上述思想,本实施例提供一种基于哈希表组织虚拟内存与存储的映射方法,包括如下步骤,如图1所示:步骤100,初始化哈希表的个数阈值;步骤200,当添加逻辑单元号(LUN)时,判断系统当前所创建的哈希表的个数是否小于初始化的个数阈值,如果是,执行步骤300,否则执行步骤400 ;步骤300,创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中;步骤400,将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中其中,初始化哈希表的个数阈值时,可以先任意设置一个个数阈值,再通过测试来调正此个数阈值具体的,可以根据访问效率,来调正此个数阈值。
即在实际效率测试中选择一个合适的哈希表的个数阈值以保证效率和内存占用的最优化而新添加LUN的过程中,具体可以根据当前哈希表的计数值来判断当前哈希表的个数是否达到个数阈值,若否,则创建一个新的哈希表,并增加哈希表的计数以记录当前系统中已创建的哈希表个数,便于后续添加LUN时判断当前哈希表的个数是否达到个数阈值同样的,当前哈希表的个数已经达到阈值时,则遍历所有的哈希表,查找绑定映射关系的LUN个数最小的哈希表,与新添加的LUN绑定映射关系,并增加哈希表与LUN绑定计数还要说明的是,除了添加LUN外,实际应用中也可能存储删除LUN的操作,此时判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除即要删除某一个LUN时,若该LUN对应映射的哈希表与Iun绑定计数为0,则删除该哈希表而当所要删除的LUN的数据映射的哈希表还与其他LUN的数据映射时,仅删除此LUN即可另外,在初始化过程中,除了初始化哈希表的个数阈值外,还会初始化哈希表长通常可以先计算系统可用内存页,再根据可用内存页总数和哈希表项单链表的平均长度计算哈希表长下面结合具体应用来说明上述该方法的实现过程。
由于哈希表的项是单链表,所以链表的节点平均长度不能过长,假设设置节点长度为4则哈希表长可由可用内存页和哈希表项单链表的平均长度来计算,具体计算公式如下:hash_len = page_usage/4即哈希表长度为可用页总数除以哈希表项单链表的平均长度随后初始化设置哈希表的个数阈值为4当LUN添加到2个时,会创建2个哈希表来与这2个LUN分别绑定,此时创建的哈希表与LUN的映射关系如图2(a)所示当Iun添加超过4个时,新添加的LUN会查找映射最少Iun的哈希表,并与该哈希表绑定映射关系,此时创建的哈希表与LUN的映射关系如图2(b)所示实施例2本实施例介绍一种基于哈希表组织虚拟内存与存储的映射装置,该装置可实现上述实施例1的方法具体地,该装置至少包括第一模块、第二模块和第三模块第一模块,初始化哈希表的个数阈值;第二模块,在添加LUN时,判断系统当前所创建的哈希表的个数是否小于所述个数阈值;第三模块,当系统当前所创建的哈希表的个数小于所述个数阈值时,创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,当系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中。
另外,上述装置还可以包括第四模块,该第四模块,在删除LUN过程中,判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除还要说明的是,上述装置除了实现上述各功能外,还通过一个第五模块来初始化哈希表长具体地,该第五模块,计算系统可用内存页,根据所计算的可用内存页总数和哈希表项单链表的平均长度计算哈希表长本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现本申请不限制于任何特定形式的硬件和软件的结合以上所述,仅为本发明的较佳实例而已,并非用于限定本发明的保护范围凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内权利要求1.一种基于哈希表组织虚拟内存与存储的映射方法,其特征在于,该方法包括: 初始化哈希表的个数阈值; 当添加逻辑单元号(LUN)时,若判断系统当前所创建的哈希表的个数小于所述个数阈值,则创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,若判断系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中。
2.如权利要求1所述的方法,其特征在于,该方法还包括: 在删除LUN过程中,判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除3.如权利要求1或2所述的方法,其特征在于,该方法还包括: 初始化哈希表长4.如权利要求3所述的方法,其特征在于,初始化哈希表长度的过程如下: 计算系统可用内存页,根据所计算的可用内存页总数和哈希表项单链表的平均长度计算哈希表长5.一种基于哈希表组织虚拟内存与存储的映射装置,其特征在于,该装置包括: 第一模块,初始化哈希表的个数阈值; 第二模块,在添加逻辑单元号(LUN)时,判断系统当前所创建的哈希表的个数是否小于所述个数阈值; 第三模块,当系统当前所创建的哈希表的个数小于所述个数阈值时,创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,当系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中6.如权利要求5所述的装置,其特征在于,该装置还包括: 第四模块,在删除LUN过程中,判断与所要删除的LUN的数据映射的哈希表是否与其他LUN的数据映射,若否,则将与所要删除的LUN的数据映射的哈希表删除。
7.如权利要求5或6所述的装置,其特征在于,该装置还包括: 第五模块,初始化哈希表长8.如权利要求7所述的装置,其特征在于, 所述第五模块,计算系统可用内存页,根据所计算的可用内存页总数和哈希表项单链表的平均长度计算哈希表长全文摘要本发明公开了一种基于哈希表组织虚拟内存与存储的映射方法及装置,涉及计算机内存组织及内存与存储的映射技术本发明公开的映射方法包括初始化哈希表的个数阈值;当添加逻辑单元号(LUN)时,若判断系统当前所创建的哈希表的个数小于所述个数阈值,则创建新的哈希表,并将添加的LUN的数据映射到新的哈希表中,若判断系统当前所创建的哈希表的个数等于所述个数阈值,则将添加的LUN的数据映射到已创建的哈希表中映射LUN数目最少的哈希表中本发明还公开了一种基于哈希表组织虚拟内存与存储的映射装置本申请技术方案在查找效率和内存占用之间提供了一种优化方案,在现实测试中利于性能调优,且提高了系统资源利用率。












