CN111400307A - 支持远程并发访问的持久哈希表访问系统 - Google Patents
支持远程并发访问的持久哈希表访问系统 Download PDFInfo
- Publication number
- CN111400307A CN111400307A CN202010105294.XA CN202010105294A CN111400307A CN 111400307 A CN111400307 A CN 111400307A CN 202010105294 A CN202010105294 A CN 202010105294A CN 111400307 A CN111400307 A CN 111400307A
- Authority
- CN
- China
- Prior art keywords
- data
- remote
- slot
- hash table
- access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Bioethics (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种支持远程并发访问的持久哈希表访问系统,包括:数据存储模块:组织和管理哈希表的元数据及数据的持久存储,并支持通用哈希表读写访问接口;远程访问模块:建立服务端与客户端的RDMA通信连接,实现客户端的远程访问;后台处理模块:后台辅助客户端的远程写请求,更新相关数据及元数据,以保证哈希表的元数据和数据处于一致状态;数据恢复模块:在服务端开启持久哈希表时检测故障一致性,当数据不一致时恢复哈希表中的所有数据到一致状态。本发明能够降低远程读写延迟,减少服务端负载压力,支持高并发远程访问,保障高效数据一致性。
Description
技术领域
本发明涉及存储系统领域,具体地,涉及一种支持远程并发访问的持久哈希表访问系统。
背景技术
新型持久内存PM(Persistent Memory,又作非易失内存NVM)技术综合了DRAM内存与磁盘/固态硬盘(SSD)/闪存(Flash)两者的特性。一方面,它具有大容量、非易失、低功耗等特点,与磁盘相似;另一方面,它具有低延迟、高带宽、可字节寻址等特点,与内存相似。与传统DRAM内存相比,基于PM构建存储系统可直接持久存储数据,省去刷出到下一级持久存储器的开销;与磁盘相比,基于PM构建持久存储系统可通过load/store方式直接访问PM中存储的数据,省去了加载到内存缓冲区的开销。因此,PM为构建新型高效持久存储系统提供了机遇。
哈希表(Hash Table)是一种重要的数据结构,它以键值对(key-value pair)的形式存储和访问数据,被广泛应用于键值数据库、索引表、缓存表等设计中。哈希表需要解决数据哈希冲突(不同的键映射到同一存储位置)以保证哈希表的存储效率。通常的哈希冲突解决方案有k-哈希、线性探测哈希、Cuckoo哈希、Hopscotch哈希等。基于PM设计持久哈希表可以加速其读写性能,但现有的持久哈希表设计以单节点为主,对远程访问和分布式访问的支持十分有限。专利文献CN104809179B公开了一种访问哈希表的装置和方法,也并未具体涉及到远程访问和分布式访问。
远程直接内存访问(Remote Direct Memory Access,RDMA)是指通信时允许本地端点绕过远端节点的操作系统,直接读写远端内存的技术。RDMA无需像传统的以太网一样穿越内核中的多层网络协议栈,可以实现零拷贝的跨节点数据传输。RDMA具有高带宽、低延迟的特性。基于RDMA技术可以构建支持高速远程读写的数据中心存储系统。然而,目前尚不存在一种通用的哈希表结构和哈希访问机制,来同时支持高效的本地持久化与高性能的远程并发访问。
发明内容
针对现有技术中的局限性,本发明的目的是提供一种支持远程并发访问的持久哈希表访问系统。
根据本发明提供的一种支持远程并发访问的持久哈希表访问系统,包括:
数据存储模块:组织和管理哈希表的元数据及数据的持久存储,并支持通用哈希表读写访问接口;
远程访问模块:建立服务端与客户端的RDMA通信连接,实现客户端的远程访问;
后台处理模块:后台辅助客户端的远程写请求,更新相关数据及元数据,以保证哈希表的元数据和数据处于一致状态;
数据恢复模块:在服务端开启持久哈希表时检测故障一致性,当数据不一致时恢复哈希表中的所有数据到一致状态。
优选地,组织和管理哈希表的所述数据包括:索引表和数据表;
数据表存储键值对数据,索引表存储数据表的元数据。
优选地,所述数据采用Hopscotch哈希方案避免数据哈希冲突,将哈希表中相邻的K个数据桶组成一个Hopscotch组,每个数据桶包含M个数据槽,且K与M满足2≤K≤16,2≤M≤8,K*M≤32;
所述数据槽除存储键值对数据外,还保留1字节作为标记项,置于数据槽末尾,用来指明所述数据槽的有效性与写属性。
优选地,所述索引表由索引槽组成,任一索引槽与数据表中的一个数据桶一一对应,并作为该数据桶的元数据,且该元数据为8字节,支持原子更新。
优选地,所述索引槽包括四个部分:
位图bitmap:指示该数据桶内每个数据槽的有效性,大小为8比特,其中0表示空数据槽,1表示有效数据槽;
跳跃图hopmap:指示哈希到本数据桶的数据在一个Hopscotch组的实际存储情况,大小为32比特,其中每4比特表示一个数据桶的特定有效数据槽数量;
本地锁llock:指示当前是否存在发生在本数据桶中的本地写操作,大小为8比特,用于服务端本地执行哈希表写操作;
远程锁rlock:指示当前是否存在锁定相应数据桶的远程客户端,大小为16比特,为0时表示不存在,否则存在。
优选地,所述服务端将整个哈希表的存储区域注册到网卡,与多个客户端建立RDMA连接并同步关键数据,从而支持客户端对服务端哈希表的远程直接内存访问。
优选地,所述服务端使用共享接收队列来接收多个客户端发送的写事件,并在写事件发生后轮询完成队列,服务端具体执行以下动作:
S1:当与多个客户端建立连接成功并同步关键数据后,发起R个RECV请求,其中R为服务端网卡支持的最大RECV请求数量;
S2:等待远程写事件发生;
S3:当触发远程写事件时,轮询完成队列中的完成消息;
S4:在本地补充一个RECV请求;
S5:提取消息中的立即数,转交所述后台处理模块使用。
优选地,所述客户端子执行远程读写访问的整个过程中,使用完全的单边RDMA原语,避免服务端在关键执行路径上的一切CPU开销,具体包括:
在执行远程读时,客户端执行以下动作:
S11:通过本地哈希的方式计算出数据桶偏移;
S12:根据所求数据桶偏移初始化远端访问地址,设置访问大小为Hopscotch组大小,发起RDMA_READ操作;
S13:本地轮询完成队列,直到接收到读成功完成消息;
S14:读取用于接收数据的地址空间,以数据槽粒度逐个匹配键信息,直到匹配成功,返回该键所对应的值信息;
在执行远程写时,客户端执行以下动作:
S21:通过本地哈希的方式计算出索引槽偏移或数据桶偏移;
S22:根据索引槽偏移或数据桶偏移初始化远端访问地址,设置访问大小为8字节,发起ATOMIC_FETCH_AND_ADD操作;
S23:本地轮询完成队列,直到接收到远程原子操作完成消息;
S24:读取用于接收数据的地址空间,将8字节的访问大小数据分解为位图、跳跃图、本地锁和远程锁进行分析:
S24.1:检查本地锁,若0<llock<3,则设LN=1,否则LN=0;
S24.2:检查远程锁,设rlock数据值为RN;
S24.3:检查位图,设为0的比特位数量为FN;
S24.4:若LN+RN≥FN,则说明该索引槽所对应数据桶中已无空闲数据槽供本次写操作使用,回退固定时间BT重新从S22开始执行,BT≤1us,若不等式不成立,则选取位图第FN-RN个空闲比特所对应的数据槽偏移作为本次写操作所使用的目标存储位置;
S25:根据数据槽偏移初始化远端访问地址,将填充好的数据槽结构作为本地发送数据,发起RDMA_WRITE_WITH_IMM操作;
S26:本地轮询完成队列,直到接收到写完成消息。
优选地,所述后台处理模块接收所述远程访问模块接收到的写数据,进行后台补写过程,具体包括:
S31:找到立即数所对应的索引槽;
S32:检查分析找到的索引槽的数据:
S32.1:检查远程锁,设rlock值为RN,若RN=0,则跳过本次处理过程,重新执行S31;
S32.2:检查该索引槽本地锁,若llock满足0<llock<3,则设其值LN=1,否则令LN=0;
S32.3:检查该索引槽位图,设bitmap中为0的比特位数量为FN;
S32.4:取PL=MIN(RN,FN-LN)作为本次处理的数据槽最大值,并确定客户端的远程写数据位于从最后一个为0比特位开始的倒数PL个空闲比特位所对应的数据槽;
S33:分析处理相应的数据槽:
S33.1:检查数据槽的标记项,若标记项为0,则说明远程客户端仅对索引槽上锁但尚未完成数据发送过程,可跳过此数据槽操作,否则执行下一步;
S33.2:根据标记项的值判断操作类型,并执行相应补写操作,更新相关数据槽与索引槽数据,以保证该数据桶与对应索引槽的数据一致性。
优选地,所述数据恢复模块执行:
S41:核对魔数,若魔数与计算所得匹配,则说明无数据不一致,无需进行一致性恢复操作,否则执行下一步;
S42:依次检查索引槽,仅对索引槽中存在llock+rlock>0的索引槽进行处理,处理步骤包括:
S42.1:检查本地锁对应的数据槽,根据标记项选择取消或重做本次写操作,标记项为0则取消,否则重做标记项所蕴含的相应操作;
S42.2:检查远程锁对应的数据槽,根据标记项选择取消或重做本次写操作,标记项为0则取消,否则重做标记项所蕴含的相应操作;
S42.3:原子地更新索引槽数据,包括位图、跳跃图、本地锁和远程锁。
与现有技术相比,本发明具有如下的有益效果:
本发明能够降低远程读写延迟,减少服务端负载压力,支持高并发远程访问,保障高效数据一致性
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例的支持远程并发访问的持久哈希表访问系统的模块组成图;
图2是本发明一个实施例的使用RDMA进行数据读写的示意图;
图3是本发明一个实施例的服务端节点哈希表的数据布局图;
图4是本发明一个实施例的服务端节点哈希表的核心数据结构;
图5是本发明一个实施例的客户端节点的远程读操作流程图;
图6是本发明一个实施例的客户端节点的远程写操作流程图;
图7是本发明一个实施例的服务端节点的服务端补写操作流程图;
图8是本发明一个实施例的服务端节点的数据恢复流程图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
在介绍本发明的实施例之前,先对本发明中出现的术语进行说明。
持久内存(Persistent Memory,PM,又作非易失内存NVM)技术如相变存储器(PCM)、铁存储器(FeRAM)、忆阻器(Memristor)和Intel 3D XPoint等,综合了DRAM内存与磁盘/固态硬盘(SSD)/闪存(Flash)两者的特性。一方面,它具有类似于磁盘的大容量、非易失、低功耗等特性;另一方面,它具有类似于内存的低延迟、高带宽、可字节寻址等特性。
直接内存访问(Direct Memory Access,DMA)允许某些硬件装置在无CPU的参与下,直接独立访问内存,读写数据。该技术通常用于缓解CPU对外设的处理压力。在数据传输过程中,CPU仅在执行初始化操作,然后就将整个数据传输动作交由DMA控制器来完成。
远程直接内存访问(Remote Direct Memory Access,RDMA)是一种新型的网络通讯技术,它能实现在双方操作系统不直接参与的情况下直接访问远端内存,具有零拷贝、CPU旁路的优点,并实现了高带宽、低延迟的网络特性。RDMA通过让网卡将数据直接传输到远端节点的内存,消除了对方CPU和Cache的直接参与,避免了复杂的上下文切换开销。目前支持RDMA技术的网络协议栈包括Infiniband、RoCE(RDMA over Converged Ethernet)和iWARP,前两者由Mellanox提供硬件技术支持,特别地,后两者由于采用了普通以太网的数据链路层,因此均可与以太网完全兼容。图2展示了RDMA读写访问的具体过程:在读取远端节点数据时,首先由本地CPU以MMIO(memory-mapped IO)的方式向网卡发起远程读请求,该请求封装了待读取数据的地址和远端节点的必要信息,本地网卡检测到该命令之后,通过RDMA网络传输该请求消息到远端网卡,远端网卡接收到该请求消息后,根据请求中指定的地址以DMA的方式读取该节点内存中的本地数据,将数据打包,并再次通过RDMA网络将读取的数据传输至本地网卡,本地网卡接收到传回的消息,以DMA的方式直接写入本地内存,待本地后续处理;在向远端节点写入数据时,首先由本地CPU以MMIO的方式向网卡发起远程写请求,本地网卡检测到该命令之后,以DMA的方式从本地内存中读取待传输的数据,将数据打包,并在RDMA网络进行数据传输,远端网卡接收到数据之后,将数据以DMA的方式直接写入到它的本地内存,在RC模式下远端网卡在接收数据完毕时会自动回送ack帧给本地网卡,产生一个完成信息到完成队列。在RDMA读写的整个过程,均不涉及对方CPU参与,也绕过了双方的内核,实现了数据传输的CPU旁路和零拷贝。使用RDMA技术通讯的双方在建立通讯之前需要经过一些步骤:打开网卡设备;创建保护域,该保护域会与在后面阶段创建的QP对象绑定,以保障数据传输安全,任何跨域的操作将会引发通讯错误;注册内存,将通讯的内存进行注册,建立该段内存用户态地址和物理内存地址的映射,并将映射表保存到网卡缓存,同时生成该内存段的密钥对(lkey和rkey),网卡在本地或远程访问内存时需携带相应的密钥进行身份确认;创建完成队列CQ(Completion Queue),发送方在消息发送成功后或者接收方接收消息成功后均会将相应的完成信息放入完成队列,用户可以反复检测完成队列来验证消息发送是否完成;创建QP(Queue Pair),QP的概念可以类比为TCP/IP的套接字,是双方通信的实体,一对QP由Send Queue和Receive Queue构成,发送方把需要发送的消息放入发送队列,接收方将接收请求放入接收队列,双方通过这种方式进行网络通信;QP状态初始化,通讯双方创建一一对应的QP之后,需要进行一系列的握手状态转换,直到成功建立起通讯链路。QP可以建立不同的连接类型,包括可靠连接RC(Reliable Connection)、不可靠连接UC(Unreliable Connection)和不可靠数据报UD(Unreliable Datagram),RC模式下,QP只能进行一对一可靠传输,数据包发送成功后会有相应的确认信息反馈,UC模式下,QP进行一对一传输,无确认信息反馈,UD模式则无一对一的界定,也没有确认信息反馈,以上三种传输模式具有不同的特点,同时对通信原语的支持程度也各不相同。RDMA有两种实现远程访问的原语:双边通信的消息语义,典型的操作为SEND和RECV,它们与TCP/IP通信中所使用的send/recv相似,在一端使用SEND发送数据前,另一端需要使用RECV准备好一个接收数据的内存空间;单边通信的内存语义:典型的操作为RDMA_READ和RDMA_WRITE(及其变种RDMA_WRITE_WITH_IMM),它们能够实现完全的服务器旁路式的远程地址操作,即读写远程节点某一地址的数据时对方服务器对此操作完全不感知。此外,原子操作如ATOMIC_COMPARE_AND_SWAP(CAS)与ATOMIC_FETCH_AND_ADD(FAA)也是单边的内存语义操作,可以执行对远端内存中8字节数据的原子操作—交换或增加,并返回改变前的数据。
Hopscotch哈希是一种解决哈希表数据冲突的哈希方案。具体来说,对于每一个键,它除了一个通过哈希函数计算得到的哈希桶与之对应外,还可以存储在该哈希桶的后续若干邻居桶中。每一个数据桶需要保存一个跳跃表,来维系映射到本哈希桶的键值对在邻居桶的存储情况。当发生数据哈希冲突时,Hopscotch哈希会试图将旧的键值对从选定的哈希桶移动到一个可用的邻居桶内,而出让的这一哈希桶用来存储新的键值对。通过这种方式,Hopscotch哈希保证了一个给定的键必定在它所映射的哈希桶或其若干邻居桶中,即一个Hopscotch组中。
图1是本发明实施例的一种支持远程并发访问的持久哈希表访问系统的模块组成图。根据图1所示的支持远程并发访问的持久哈希表,由四个主要模块构成,即数据存储模块、远程访问模块、后台处理模块和数据恢复模块。
其中,数据存储模块部署在服务端,它使用新型持久内存PM作为持久哈希表存储介质,将哈希表分为索引表与数据表,并支持通用的哈希表读写访问接口如搜索、插入、更新和删除;远程访问模块分为服务端子模块和客户端子模块,其服务端子模块需将持久哈希表存储区域注册到网卡,以支持远端节点对持久哈希表进行内存直接访问,其客户端子模块需通过RDMA技术绕过服务端CPU,主动地执行远程读写请求;后台处理模块部署在服务端,负责在后台协助远端写请求的数据一致性保障,当检测到新的写事件到来时,它将对持久哈希表的数据表和索引表执行轻量级的更新操作;数据恢复模块部署在服务端,负责执行哈希表的数据恢复过程,并保证恢复后的数据处于一致状态。
需要说明的是,持久哈希表的数据存储模块除了管理哈希表元数据外,还进一步将哈希表数据分为索引表与数据表两部分,如图3所示。其中,数据槽是键值对存储的基本单位,而若干数据槽构成了一个数据桶,一个索引槽与一个数据桶一一对应,数据桶与索引槽都是键映射的基本单位。
值得注意的是,持久哈希表的数据存储模块将哈希表中相邻的K(2≤K≤16)个数据桶组成一个Hopscotch组,每个数据桶可包含M(2≤M≤8)个数据槽,且K与M满足K*M≤32。Hopscotch组是键值对存储的基本单元。键值对数据除了存储在哈希映射的数据桶外,还能存储在该数据桶的后续若干邻居桶中。以图3为例,每个数据桶包含4个数据槽,每个Hopscotch组又可包含4个数据桶(邻居桶数量为3)。
此外,持久哈希表的数据存储模块以图4中所示的数据结构组织索引槽和数据槽。其中,索引槽由四个部分组成:位图,用于指示该数据桶内每个数据槽的有效性,大小为8比特(1字节),其中0表示空数据槽,1表示有效数据槽;跳跃图,用于指示哈希到本数据桶的数据在一个Hopscotch组的实际存储情况,大小为32比特(4字节),其中每4比特表示一个数据桶的特定有效数据槽数量;本地锁,用于指示当前是否存在发生在本数据桶中的本地写操作,大小为8比特(1字节),用于服务端本地执行哈希表写操作;远程锁,用于指示当前是否存在锁定相应数据桶的远程客户端,大小为16比特(2字节),该数据为0表示不存在,否则存在。
持久哈希表的远程访问模块分为两个子模块,需分别部署在服务端与客户端。其服务端子模块将整个哈希表存储区域注册到网卡,并与多个客户端子模块建立RDMA连接,然后同步哈希初始化参数等关键数据,从而支持客户端对服务端哈希表数据的远程直接内存访问。
持久哈希表客户端子模块在执行读写访问时,其客户端子模块使用完全的单边RDMA原语,避免服务端在关键执行路径上的一切CPU开销。具体地,
(1)在执行搜索操作(读请求)时,客户端子模块的执行过程如图5所示:
S1:通过本地哈希的方式计算出该键的哈希值,即数据桶偏移;
S2:根据所求数据桶偏移初始化远端访问地址,设置访问大小为Hopscotch组大小,发起RDMA_READ操作;
S3:本地轮询完成队列,直到接收到读成功完成消息WC;
S4:读取用于接收数据的地址空间,以数据槽粒度逐个匹配键信息,直到匹配成功,返回该键所对应的值信息。注意读取过程中需要跳过那些mark项为0的数据槽,因为它们不包含有效数据。
(2)在执行插入、更新及删除操作时,客户端子模块的执行过程如图6所示:
S1:通过本地哈希的方式计算出该键的哈希值,即索引槽偏移/数据桶偏移;
S2:根据索引槽偏移初始化远端访问地址,设置访问大小为8字节,发起ATOMIC_FETCH_AND_ADD操作;
S3:本地轮询完成队列,直到接收到远程原子操作完成消息WC;
S4:读取用于接收数据的地址空间,将该8字节数据分解为位图bitmap、跳跃图hopmap、本地锁llock和远程锁rlock进行分析:
S4.1:检查本地锁,若llock满足(0<llock<3)则设LN=1,否则LN=0;
S4.2:检查远程锁,设rlock数据值为RN;
S4.3:检查位图,设为0的比特位数量为FN;
S4.4:若LN+RN≥FN,则说明该索引槽所对应数据桶中已无空闲数据槽供本次写操作使用,回退固定时间BT(BT≤1us)重新从S2开始执行,若不等式不成立,则选取位图第FN-RN个空闲比特所对应的数据槽偏移作为本次写操作所使用的目标存储位置;
S5:根据数据槽偏移初始化远端访问地址,将填充好的数据槽结构作为本地发送数据,发起RDMA_WRITE_WITH_IMM操作。数据槽填充方式为:依次写入键,值与标记项,标记项用1,2,3分别表示插入、更新和删除,当为删除操作时值可设置为空。发送附带的4字节立即数需赋值为索引槽偏移。
S6:本地轮询完成队列,直到接收到写成功消息,返回。
另外,持久哈希表远程访问模块服务端子模块使用共享接收队列(Shared RecvQueue)来接收多个客户端发送的消息,并轮询接收完成消息。具体地,服务端子模块将执行以下动作:
S1:当与多个客户端子模块建立连接成功并同步关键数据后,发起R个RECV请求,其中R为服务端网卡支持的最大RECV请求数量;
S2:等待远程写事件发生;
S3:当触发远程写事件时,轮询完成队列中的完成消息;
S4:在本地补充一个RECV请求;
S5:提取消息中的立即数,转交供持久哈希表后台处理模块使用。
持久哈希表后台处理模块会接远程访问模块服务端子模块转交的立即数数据,进行后台补写过程。具体地,支持后台补写的整个执行过程如图7所示:
S1:远程访问模块服务端子模块等待新的写事件;
S2:写事件发生后提取完成消息中的立即数转交给后台处理模块;
S3:后台处理模块根据立即数找到对应的索引槽;
S4:后台处理模块读取分析该索引槽数据:
S4.1:检查远程锁,设rlock值为RN,若RN=0,则跳过本次处理过程,重新执行S1;
S4.2:检查该索引槽本地锁,若llock满足0<llock<3,则设其值LN=1,否则令LN=0;
S4.3:检查该索引槽位图,设bitmap中为0的比特位数量为FN;
S4.4:取PL=MIN(RN,FN-LN)作为本次处理的消息最大值,并确定客户端的远程写数据位于从最后一个为0比特位开始的倒数PL个空闲比特位所对应的数据槽;
S5:读取并处理相应数据槽:
S5.1:检查数据槽的标记项,若标记项为0,则说明客户端仅对索引槽上锁但尚未完成数据发送过程,可跳过此数据槽操作,否则执行下一步;
S5.2:根据标记项的值判断操作类型,并执行相应补写操作,即原子地更新索引槽数据,以保证数据一致性。
持久哈希表数据恢复模块可以保证任意哈希表关闭情形后的一致性恢复,包括1)正常关闭后重新打开持久哈希表,2)程序崩溃后重新打开哈希表以及3)机器故障后重新打开持久哈希表。在数据恢复阶段,它将执行如图8所示的数据恢复流程:
S1:核对魔数,若魔数正确,则说明无数据不一致,无需进行一致性恢复操作,否则执行下一步;
S2:依次检查索引槽,仅对索引槽中存在llock+rlock>0的索引槽进行处理,处理步骤如下:
S2.1:检查本地锁对应的数据槽,即位图中第一个为0比特位对应的数据槽,根据标记选择抛弃或redo本次写操作;
S2.2:检查远程锁对应的数据槽,即位图中倒数第一个为0比特位开始若干有效个空闲比特位所对应的数据槽,根据标记选择抛弃或重做本次写操作;
S2.3:原子地更新索引槽数据,包括位图、本地锁和远程锁。
在本发明的一个实施例中,当客户端数量增加时,服务端无需像传统的基于双边通信原语的架构那样对消息区进行扩容,也无需注册新的持久内存地址到网卡,只需在建立连接时将本地的访问权限数据同步给客户端节点。
在执行远程访问的过程中,大部分的查找、冲突解决和数据写入开销都转移到客户端上,服务端无需在关键执行路径上参与,只需协助执行轻量级的后台补写过程。因此,该技术能够支持较高的水平扩展(增加客户端节点数量)和垂直扩展(增加单客户端节点上的客户连接数量)。
客户端在执行远程写请求时选用了RDMA_WRITE_WITH_IMM原语来发送消息,在保证较低延迟的前提下,通过携带辅助信息使得服务端可以通过事件响应机制获取写请求,能够有效减少服务端的CPU占用,降低了服务端的负载压力。因此,该技术能很好的适应高并发场景。
另外,本发明实施例的支持远程并发访问的持久哈希表的其他构成以及作用对于本领域的技术人员而言是已知的,为了减少冗余,不做赘述。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种支持远程并发访问的持久哈希表访问系统,其特征在于,包括:
数据存储模块:组织和管理哈希表的元数据及数据的持久存储,并支持通用哈希表读写访问接口;
远程访问模块:建立服务端与客户端的RDMA通信连接,实现客户端的远程访问;
后台处理模块:后台辅助客户端的远程写请求,更新相关数据及元数据,以保证哈希表的元数据和数据处于一致状态;
数据恢复模块:在服务端开启持久哈希表时检测故障一致性,当数据不一致时恢复哈希表中的所有数据到一致状态。
2.根据权利要求1所述的支持远程并发访问的持久哈希表访问系统,其特征在于,组织和管理哈希表的所述数据包括:索引表和数据表;
数据表存储键值对数据,索引表存储数据表的元数据。
3.根据权利要求2所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述数据采用Hopscotch哈希方案避免数据哈希冲突,将哈希表中相邻的K个数据桶组成一个Hopscotch组,每个数据桶包含M个数据槽,且K与M满足2≤K≤16,2≤M≤8,K*M≤32;
所述数据槽除存储键值对数据外,还保留1字节作为标记项,置于数据槽末尾,用来指明所述数据槽的有效性与写属性。
4.根据权利要求3所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述索引表由索引槽组成,任一索引槽与数据表中的一个数据桶一一对应,并作为该数据桶的元数据,且该元数据为8字节,支持原子更新。
5.根据权利要求4所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述索引槽包括四个部分:
位图bitmap:指示该数据桶内每个数据槽的有效性,大小为8比特,其中0表示空数据槽,1表示有效数据槽;
跳跃图hopmap:指示哈希到本数据桶的数据在一个Hopscotch组的实际存储情况,大小为32比特,其中每4比特表示一个数据桶的特定有效数据槽数量;
本地锁llock:指示当前是否存在发生在本数据桶中的本地写操作,大小为8比特,用于服务端本地执行哈希表写操作;
远程锁rlock:指示当前是否存在锁定相应数据桶的远程客户端,大小为16比特,为0时表示不存在,否则存在。
6.根据权利要求1所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述服务端将整个哈希表的存储区域注册到网卡,与多个客户端建立RDMA连接并同步关键数据,从而支持客户端对服务端哈希表的远程直接内存访问。
7.根据权利要求6所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述服务端使用共享接收队列来接收多个客户端发送的写事件,并在写事件发生后轮询完成队列,服务端具体执行以下动作:
S1:当与多个客户端建立连接成功并同步关键数据后,发起R个RECV请求,其中R为服务端网卡支持的最大RECV请求数量;
S2:等待远程写事件发生;
S3:当触发远程写事件时,轮询完成队列中的完成消息;
S4:在本地补充一个RECV请求;
S5:提取消息中的立即数,转交所述后台处理模块使用。
8.根据权利要求5所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述客户端在执行远程读写访问的整个过程中,使用完全的单边RDMA原语,避免服务端在关键执行路径上的一切CPU开销,具体包括:
在执行远程读时,客户端执行以下动作:
S11:通过本地哈希的方式计算出数据桶偏移;
S12:根据所求数据桶偏移初始化远端访问地址,设置访问大小为Hopscotch组大小,发起RDMA_READ操作;
S13:本地轮询完成队列,直到接收到读成功完成消息;
S14:读取用于接收数据的地址空间,以数据槽粒度逐个匹配键信息,直到匹配成功,返回该键所对应的值信息;
在执行远程写时,客户端执行以下动作:
S21:通过本地哈希的方式计算出索引槽偏移或数据桶偏移;
S22:根据索引槽偏移或数据桶偏移初始化远端访问地址,设置访问大小为8字节,发起ATOMIC_FETCH_AND_ADD操作;
S23:本地轮询完成队列,直到接收到远程原子操作完成消息;
S24:读取用于接收数据的地址空间,将8字节的访问大小数据分解为位图、跳跃图、本地锁和远程锁进行分析:
S24.1:检查本地锁,若0<llock<3,则设LN=1,否则LN=0;
S24.2:检查远程锁,设rlock数据值为RN;
S24.3:检查位图,设为0的比特位数量为FN;
S24.4:若LN+RN≥FN,则说明该索引槽所对应数据桶中已无空闲数据槽供本次写操作使用,回退固定时间BT重新从S22开始执行,BT≤1us,若不等式不成立,则选取位图第FN-RN个空闲比特所对应的数据槽偏移作为本次写操作所使用的目标存储位置;
S25:根据数据槽偏移初始化远端访问地址,将填充好的数据槽结构作为本地发送数据,发起RDMA_WRITE_WITH_IMM操作;
S26:本地轮询完成队列,直到接收到写完成消息。
9.根据权利要求8所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述后台处理模块接收所述远程访问模块接收到的写数据,进行后台补写过程,具体包括:
S31:找到立即数所对应的索引槽;
S32:检查分析找到的索引槽的数据:
S32.1:检查远程锁,设rlock值为RN,若RN=0,则跳过本次处理过程,重新执行S31;
S32.2:检查该索引槽本地锁,若llock满足0<llock<3,则设其值LN=1,否则令LN=0;
S32.3:检查该索引槽位图,设bitmap中为0的比特位数量为FN;
S32.4:取PL=MIN(RN,FN-LN)作为本次处理的数据槽最大值,并确定客户端的远程写数据位于从最后一个为0比特位开始的倒数PL个空闲比特位所对应的数据槽;
S33:分析处理相应的数据槽:
S33.1:检查数据槽的标记项,若标记项为0,则说明远程客户端仅对索引槽上锁但尚未完成数据发送过程,可跳过此数据槽操作,否则执行下一步;
S33.2:根据标记项的值判断操作类型,并执行相应补写操作,更新相关数据槽与索引槽数据,以保证该数据桶与对应索引槽的数据一致性。
10.根据权利要求9所述的支持远程并发访问的持久哈希表访问系统,其特征在于,所述数据恢复模块执行:
S41:核对魔数,若魔数与计算所得匹配,则说明无数据不一致,无需进行一致性恢复操作,否则执行下一步;
S42:依次检查索引槽,仅对索引槽中存在llock+rlock>0的索引槽进行处理,处理步骤包括:
S42.1:检查本地锁对应的数据槽,根据标记项选择取消或重做本次写操作,标记项为0则取消,否则重做标记项所蕴含的相应操作;
S42.2:检查远程锁对应的数据槽,根据标记项选择取消或重做本次写操作,标记项为0则取消,否则重做标记项所蕴含的相应操作;
S42.3:原子地更新索引槽数据,包括位图、跳跃图、本地锁和远程锁。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010105294.XA CN111400307B (zh) | 2020-02-20 | 2020-02-20 | 支持远程并发访问的持久哈希表访问系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010105294.XA CN111400307B (zh) | 2020-02-20 | 2020-02-20 | 支持远程并发访问的持久哈希表访问系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400307A true CN111400307A (zh) | 2020-07-10 |
CN111400307B CN111400307B (zh) | 2023-06-23 |
Family
ID=71434263
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010105294.XA Active CN111400307B (zh) | 2020-02-20 | 2020-02-20 | 支持远程并发访问的持久哈希表访问系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400307B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112817887A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的远内存访问优化方法及系统 |
CN112905607A (zh) * | 2021-05-07 | 2021-06-04 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN113238856A (zh) * | 2021-03-09 | 2021-08-10 | 西安奥卡云数据科技有限公司 | 一种基于rdma的内存管理方法及装置 |
CN113297101A (zh) * | 2020-09-30 | 2021-08-24 | 阿里云计算有限公司 | 用于哈希缓存的方法以及装置 |
CN113609339A (zh) * | 2021-08-05 | 2021-11-05 | 北京汇钧科技有限公司 | 提升智能网卡性能的方法及装置 |
CN114327857A (zh) * | 2021-11-02 | 2022-04-12 | 腾讯科技(深圳)有限公司 | 操作数据处理方法、装置、计算机设备和存储介质 |
CN114584482A (zh) * | 2022-02-14 | 2022-06-03 | 阿里巴巴(中国)有限公司 | 基于内存存储检测数据的方法、装置以及网卡 |
WO2024120227A1 (zh) * | 2022-12-09 | 2024-06-13 | 浪潮电子信息产业股份有限公司 | 容器数据保护系统、方法、装置、设备及可读存储介质 |
EP4293530A4 (en) * | 2021-03-29 | 2024-07-31 | Huawei Tech Co Ltd | DATA PROCESSING METHOD, SERVER AND SYSTEM |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426321A (zh) * | 2015-11-13 | 2016-03-23 | 上海交通大学 | 采用远程位置信息的rdma友好缓存方法 |
US20170091246A1 (en) * | 2015-09-25 | 2017-03-30 | Microsoft Technology Licensing, Llc | Distributed graph database |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN108710638A (zh) * | 2018-04-13 | 2018-10-26 | 上海交通大学 | 一种基于混合rdma操作的分布式并发控制方法及系统 |
CN110113425A (zh) * | 2019-05-16 | 2019-08-09 | 南京大学 | 一种基于rdma网卡纠删码卸载的负载均衡系统及均衡方法 |
CN110691062A (zh) * | 2018-07-06 | 2020-01-14 | 浙江大学 | 一种数据写入方法、装置及其设备 |
-
2020
- 2020-02-20 CN CN202010105294.XA patent/CN111400307B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170091246A1 (en) * | 2015-09-25 | 2017-03-30 | Microsoft Technology Licensing, Llc | Distributed graph database |
WO2017053904A1 (en) * | 2015-09-25 | 2017-03-30 | Microsoft Technology Licensing, Llc | Distributed graph database |
CN105426321A (zh) * | 2015-11-13 | 2016-03-23 | 上海交通大学 | 采用远程位置信息的rdma友好缓存方法 |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN108710638A (zh) * | 2018-04-13 | 2018-10-26 | 上海交通大学 | 一种基于混合rdma操作的分布式并发控制方法及系统 |
CN110691062A (zh) * | 2018-07-06 | 2020-01-14 | 浙江大学 | 一种数据写入方法、装置及其设备 |
CN110113425A (zh) * | 2019-05-16 | 2019-08-09 | 南京大学 | 一种基于rdma网卡纠删码卸载的负载均衡系统及均衡方法 |
Non-Patent Citations (4)
Title |
---|
KAIXIN HUANG: "Forca: Fast and Atomic Remote Direct Access to Persistent Memory" * |
KANGPING DONG: "Exploiting RDMA for Distributed Low-Latency Key/Value Store on Non-Volatile Main Memory" * |
TAO ZHANG: "ParSA: High-throughput scientific data analysis framework with distributed file system" * |
陈志文: "多核系统并发哈希表研究" * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297101A (zh) * | 2020-09-30 | 2021-08-24 | 阿里云计算有限公司 | 用于哈希缓存的方法以及装置 |
CN112817887A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的远内存访问优化方法及系统 |
CN113238856A (zh) * | 2021-03-09 | 2021-08-10 | 西安奥卡云数据科技有限公司 | 一种基于rdma的内存管理方法及装置 |
CN113238856B (zh) * | 2021-03-09 | 2022-07-26 | 西安奥卡云数据科技有限公司 | 一种基于rdma的内存管理方法及装置 |
EP4293530A4 (en) * | 2021-03-29 | 2024-07-31 | Huawei Tech Co Ltd | DATA PROCESSING METHOD, SERVER AND SYSTEM |
CN112905607A (zh) * | 2021-05-07 | 2021-06-04 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN112905607B (zh) * | 2021-05-07 | 2022-02-01 | 支付宝(杭州)信息技术有限公司 | 区块链数据存储方法及装置、电子设备 |
CN113609339A (zh) * | 2021-08-05 | 2021-11-05 | 北京汇钧科技有限公司 | 提升智能网卡性能的方法及装置 |
CN114327857A (zh) * | 2021-11-02 | 2022-04-12 | 腾讯科技(深圳)有限公司 | 操作数据处理方法、装置、计算机设备和存储介质 |
CN114584482A (zh) * | 2022-02-14 | 2022-06-03 | 阿里巴巴(中国)有限公司 | 基于内存存储检测数据的方法、装置以及网卡 |
CN114584482B (zh) * | 2022-02-14 | 2023-09-08 | 阿里巴巴(中国)有限公司 | 基于内存存储检测数据的方法、装置以及网卡 |
WO2024120227A1 (zh) * | 2022-12-09 | 2024-06-13 | 浪潮电子信息产业股份有限公司 | 容器数据保护系统、方法、装置、设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111400307B (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111400307B (zh) | 支持远程并发访问的持久哈希表访问系统 | |
CN110113420B (zh) | 基于nvm的分布式消息队列管理系统 | |
CN108268208B (zh) | 一种基于rdma的分布式内存文件系统 | |
US11042501B2 (en) | Group-based data replication in multi-tenant storage systems | |
US7089289B1 (en) | Mechanisms for efficient message passing with copy avoidance in a distributed system using advanced network devices | |
US6799200B1 (en) | Mechanisms for efficient message passing with copy avoidance in a distributed system | |
CN106657365B (zh) | 一种基于rdma的高并发数据传输方法 | |
CN111078607B (zh) | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 | |
US9925492B2 (en) | Remote transactional memory | |
US8281081B2 (en) | Shared memory architecture | |
US8850101B2 (en) | System and method to reduce memory access latencies using selective replication across multiple memory ports | |
US11025564B2 (en) | RDMA transport with hardware integration and out of order placement | |
Burke et al. | PRISM: Rethinking the RDMA interface for distributed systems | |
CN109379432A (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
US11068412B2 (en) | RDMA transport with hardware integration | |
CN113905097B (zh) | 一种数据传输方法和装置 | |
US20160034191A1 (en) | Grid oriented distributed parallel computing platform | |
CN111541624B (zh) | 空间以太网缓存处理方法 | |
CN116257521B (zh) | 一种基于fpga的kv存储方法 | |
JP2019067301A (ja) | プログラム実行装置およびプログラム実行方法 | |
US20240202118A1 (en) | Mechanism to enable out-of-order packet processing in a datatype engine | |
WO2023110117A1 (en) | Multi-writer centralized logging storage array | |
CN116680041A (zh) | 面向分离式内存的多版本并发控制的事务处理系统及方法 | |
JP2953362B2 (ja) | Lanのスイッチング装置 | |
CN117873744A (zh) | 一种队列对状态管理方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |