基于htm和单向rdma操作的分布式哈希表方法

文档序号:9687398阅读:379来源:国知局
基于htm和单向rdma操作的分布式哈希表方法
【技术领域】
[0001 ]本发明涉及内存键值系统的方法,具体地,涉及一种基于HTM和单向RDMA操作的分布式哈希表方法。
【背景技术】
[0002]大规模的网络应用需要使用内存来存储数据,使得大数据集的访问速度能够满足用户需求。而内存键值系统正是一种满足这种需求的高速数据缓存系统。内存键值系统的优势在于将所有数据存储在内存,从而当访问数据时,只需要访问内存,避免了以往存储系统访问磁盘导致的性能下降。
[0003]硬件事务内存(HTM,Hardware Transact1nal memory)是基于硬件实现的事务性内存,可以简化了并发程序的编写。HTM的基本的想法是要声明一个代码区域作为一个事务,事务(transact1n)执行并原子地提交所有结果到内存(如果事务成功),或中止并取消所有的结果(如果事务失败)。硬件事务以较低的开销提供原子性(Atomicity),一致性(Consistency)和隔离性(Isolat1n)等一系列有用的特性,大大简化并发程序的编写。
[0004]远程直接内存访问(RDMA,Remote Direct Memory Access),是当前高性能网络设备提供的一种模式,能够直接对远端节点已注册的内存空间进行读写访问,完全不需要服务器机器的CPU进行协助。然而现在的内存键值系统仍然只是以传统方式使用这些高性能网络互联设备,未能充分挖掘硬件性能。比如,直接使用InfiniBand网卡提供的兼容以太网编程接口的IP over InfiniteBand(IPoIB)模式。该模式下只能达到有限的传输带宽和较长的网络延迟。比如以lK-byte网络包传输为例,IPoIB模式带宽达和延时分别为每秒12.2万次和60微秒。而使用RDMA时,传输带宽和网络延时则分别能够达到149.6万次和3微秒,性能提升达一个数量级。
[0005]因此如何针对远程直接内存访问(RDMA)模式特征,以及处理器提供的高效事务性内存(HTM)模式特征,设计内存键值系统,充分发挥高性能网络互联设备单向访问特性,充分利用处理器的事务性内存,提高内存键值系统的带宽,降低请求的延迟,并且不需要远程处理器参与,实已成为本领域技术人员亟待解决的技术难题。

【发明内容】

[0006]针对现有技术中的缺陷,本发明的目的是提供一种基于HTM和单向RDMA操作的分布式哈希表方法。
[0007]根据本发明提供的基于HTM和单向RDMA操作的分布式哈希表方法,包括如下步骤:
[0008]步骤1:服务器端初始化内存键值系统,建立客户端和服务器端之间的连接;
[0009]步骤2:客户端在服务器端的内存键值系统内读取存储目标键值对的主头部或者间接头部;
[0010]步骤3:根据主头部或者间接头部的内容,找到值在服务器端的具体位置,判断请求类型。判断请求类别的理由是:读请求不需要复杂的上锁过程,而写请求需要。
[0011]若请求类型为读请求,则发送单向RDMA的读请求,读取服务器端的具体位置处的值,进入步骤6;其中,单向指的是请求不需要目标机器的处理器协助完成;
[0012]若请求类型是写请求则发送单向RDMA的CAS(比较并交换Compare and Swap)请求,原子性地上锁,CAS请求不执行的时候,则继续重试,直到CAS成功,进入步骤4;原子性地上锁指的是CAS请求只有成功与不执行两种,不会有中间状态;
[0013]步骤4:根据主头部或者间接头部存储的值的具体位置,发送单向RDMA写请求,把值写到服务端存储值的具体位置,覆盖原来的值;
[0014]步骤5:发送单向RDMA的写请求,释放远端的锁;
[0015]步骤6:检查初始时存储目标值的键值对主头部或者间接头部里的自增量与读取的目标值中的自增量是否一致;若不一致则返回执行步骤2,若一致,则结束。
[0016]具体地,初始时读取存储目标值的键值对的主头部或者间接头部时包含有键的自增量,在读取目标值时也包含了值的自增量,若这两个自增量若不一致,说明读取头部以及读取具体值的过程中服务器端发生了插入或者删除操作,读取到的具体值可能是不正确的需要重新读取,返回执行步骤2。
[0017]优选地,所述步骤1包括:
[0018]步骤1.1:服务器端初始化内存键值系统,具体地,计算每一个键值对中的键的哈希值,并将键值对存储在对应的主头部或者间接头部,如附图1所示,主头部的位置是固定的,当插入新的键值对的时候,优先在主头部中分配一个空槽存储目标键,当主头部空间使用完了之后,则分配一个间接头部,并将主头部指向新的间接头部,构成一个链表;然后分配一个实际的项,用于存储具体的值,并在主头部或者间接头部里记录好项的地址。
[0019]步骤1.2:建立客户端和服务器端之间的连接;具体地,客户端向服务器端发送连接请求,服务器端收到连接请求后向客户端发送回执消息,客户端获得服务器端一段内存的远程直接访问的权限。
[0020]优选地,所述步骤2包括:
[0021]步骤2.1:客户端通过计算键值对请求的键的哈希值得到该键在服务器端对应的主头部的位置后向服务器端发送远程内存读请求;
[0022]步骤2.2:将所述主头部的四个空槽全部读回,并检查所述四个空槽的键是否与键值对请求的键相等;
[0023]步骤2.3:若键值对请求的键与主头部内空槽的键相等,则进入步骤3;
[0024]若键值对请求的键与主头部的所有空槽的键不相等,则进入步骤2.4;
[0025]步骤2.4:根据主头部最后一个空槽的内容,求出间接头部在服务器端的位置,并向服务器端发送远程内存读请求,将间接头部的四个空槽全部读回,检查间接头部的四个空槽的键是否与键值对请求的键相等;
[0026]若键值对请求的键与间接头部内空槽的键相等,则进入步骤3;否则,进入步骤2.5;
[0027]步骤2.5:在键值对请求的键与间接头部内空槽的键不相等时,则重新执行步骤2.1,当内存键值系统内所有空槽均访问过一次却依然没有找到与键值对请求的键相等的空槽时,说明键值系统中并没有此键值对,查询操作结束;
[0028]优选地,所述步骤3中的原子性地上锁存在一次性不能够成功拿锁的情况,当拿锁不成功时重复尝试拿锁直到成功为止。
[0029]与现有技术相比,本发明具有如下的有益效果:
[0030]1、本发明提出的基于HTM和单向RDMA操作的分布式哈希表方法,能够在不需要服务器端参与的情况下,缩短键值请求的延迟;
[0031]2、本发明提出的基于HTM和单向RDMA操作的分布式哈希表方法,充分发挥高性能网络互联设备单向访问特性,充分利用处理器的事务性内存,提高内存键值系统的带宽,增大系统的吞吐量。
【附图说明】
[0032]通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0033]图1为本发明提供的基于HTM和单向RDMA操作的分布式哈希表方法的结构图;
[0034]图2为本发明提供的基于HTM和单向RDMA操作的分布式哈希表方法的流程示意图。
【具体实施方式】
[0035]下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
[0036]具体地,如图2所示,本发明提供的基于HTM和单向RDMA操作的分布式哈希表方法包括以下步骤:
[0037]步骤S1:服务器端初始化内存键值系统,计算每一个键值对的键的哈希值,并将键值对存储在对应的主头部(Main Header)或者间接头部(Indirect Header),并分配一个实际的项(Entry),用于存储具体的值。
[0038]具体地,每一个主头部有4个空槽(slot),每个空槽可以存储一对键值对,若4个空槽均被占用,贝分配一个间接头部(Indirect Header)来放置最细的键值对。
[0039]步骤S2:建立客户端和服务器端之间的连接;
[0040]具体地,客户端向服务器端发送连接请求,服务器端收到连接请求后向客户端发送回执消息(使用传统方法),双方建立连接,客户端拥有服务器端一段内存的远程直接访问的权限,之后可以远程读写而不会影响服务器。
[0041 ]步骤S3:客户端查找与键值对请求的键相等的键的空槽位置;
[0042]所述步骤S3包括:
[0043 ]步骤S301:客户端通过计算键值对请求的键的哈希值得到该键在服务器端对应的主头部的位置后向服务器端发送远程内存读请求;
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1