CN111078607A - 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 - Google Patents
面向rdma与非易失性内存的网络访问编程框架部署方法及系统 Download PDFInfo
- Publication number
- CN111078607A CN111078607A CN201911346712.8A CN201911346712A CN111078607A CN 111078607 A CN111078607 A CN 111078607A CN 201911346712 A CN201911346712 A CN 201911346712A CN 111078607 A CN111078607 A CN 111078607A
- Authority
- CN
- China
- Prior art keywords
- rdma
- client
- module
- read
- nonvolatile memory
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/154—Networked environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/16—General purpose computing application
- G06F2212/163—Server or database system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/26—Using a specific storage system architecture
- G06F2212/264—Remote server
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种面向RDMA与非易失性内存的网络访问编程框架部署方法及系统,包括:步骤M1:客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;步骤M2:进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;步骤M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址。本发明能够提供普适的使用RDMA技术远程访问非易失性内存的功能接口;本发明能够通过日志结构的数据存储与访问机制可保证高并发性及远程原子性;本发明能够支持使用者自定义业务逻辑,具有广泛的应用价值。
Description
技术领域
本发明涉及计算机系统结构领域,具体地,涉及一种面向RDMA与非易失性内存的网络访问编程框架部署方法及系统。
背景技术
新型非易失内存(Non-Volatile Memory,NVM)技术综合了DRAM内存与磁盘/固态硬盘(SSD)/闪存(Flash)两者的特性。一方面,它具有大容量、非易失、低功耗等特点,与磁盘相似;另一方面,它具有低延迟、高带宽、可字节寻址等特点,与内存相似。与传统DRAM内存相比,基于NVM构建存储系统可直接持久存储数据,省去刷出到下一级持久存储器的开销;与磁盘相比,基于NVM构建持久存储系统可通过load/store方式直接访问PM中存储的数据,省去了加载到内存缓冲区的开销。因此,NVM为构建新型高效持久存储系统提供了机遇。远程直接内存访问(Remote Direct Memory Access,RDMA)是指通信时允许本地端点绕过远端节点的操作系统,直接读写远端内存的技术。RDMA无需像传统的以太网一样穿越内核中的多层网络协议栈,可以实现零拷贝的跨节点数据传输。RDMA具有高带宽、低延迟的特性。基于RDMA技术可以构建支持高速远程读写的数据中心存储系统。最近的研究表明,将单边访问RDMA的低延迟网络访问与非易失性内存的低开销存储结合在一起,已被证明拥有巨大的开发潜能。但在单边访问的数据竞争以及远程数据的故障一致性问题等解决方案方面,现有工作中鲜有这方面的研究。
专利文献CN109716808A公开了一种用于允许远程装置访问安全网络的装置,该装置包括:无线收发器;存储器,其存储与安全网络相关联的网络密钥;以及控制模块,其中,该控制模块被配置为:形成第一网络和形成安全网络;在检测到远程装置具有与第一网络相关联的网络密钥时允许远程装置加入第一网络,其中与第一网络相关联的该网络密钥也被存储在所述存储器中;以及在远程装置已经加入第一网络时,控制模块被配置为:经由无线收发器接收从远程装置发送的远程装置的唯一标识符;根据所述唯一标识符确定远程装置是否被授权访问该安全网络;并根据所述确定,经由所述无线收发器以加密的形式向远程装置发送与该安全网络相关联的网络密钥,以允许远程装置访问该安全网络。该专利并不能很好地利用RDMA与非易失性内存的特性优化网络访问编程框架方面的部署。。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种面向RDMA与非易失性内存的网络访问编程框架部署方法及系统。
根据本发明提供的一种面向RDMA与非易失性内存的网络访问编程框架部署方法,采用基于日志结构的数据存储与访问机制来支持使用单边RDMA远程访问非易失性内存,可保证高并发性及远程更新原子性。包括:步骤M1:在客户端请求阶段中,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;步骤M2:在服务端处理阶段中,进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;非易失性内存的存储结构由一个对象列表、一个日志条目列表、一个数据条目列表、一个内存字节列表、一个哈希表、一个对象链表、多个日志条目链表、多个数据条目链表组成。步骤M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;以上三个阶段的通信步骤,均基于OpenFabrics联盟提供的专用RDMA编程库libibverbs来实现,具体包括RDMA连接管理方法、RDMA缓冲区数据填充方法、基于消息机制的数据通信方法、基于读写机制的数据通信方法等。步骤M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
优选地,所述步骤M1包括:步骤M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;步骤M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;步骤M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;步骤M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
优选地,所述步骤M2包括:步骤M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;步骤M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;步骤M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用;
优选地,所述步骤M2.2包括:步骤M2.2.1:检查RDMA访问请求是否合法;步骤M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;步骤M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;步骤M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;其中,所述步骤M2.2.3包括:步骤M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;步骤M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;步骤M2.2.3.3:返回找到的需读区域内容地址;步骤M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;所述非易失内存区域大小等于所需写的内容大小;步骤M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;步骤M2.2.3.6:返回新分配的非易失内存区域起始地址。
优选地,所述步骤M3包括:步骤M3.1:客户端获取服务端返回的读/写地址;步骤M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
根据本发明提供的一种面向RDMA与非易失性内存的网络访问编程框架部署系统,采用基于日志结构的数据存储与访问机制来支持使用单边RDMA远程访问非易失性内存,可保证高并发性及远程更新原子性。包括:模块M1:在客户端请求阶段中,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;模块M2:在服务端处理阶段中,进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;非易失性内存的存储结构由一个对象列表、一个日志条目列表、一个数据条目列表、一个内存字节列表、一个哈希表、一个对象链表、多个日志条目链表、多个数据条目链表组成。模块M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;以上三个阶段的通信模块,均基于OpenFabrics联盟提供的专用RDMA编程库libibverbs来实现,具体包括RDMA连接管理方法、RDMA缓冲区数据填充方法、基于消息机制的数据通信方法、基于读写机制的数据通信方法等。模块M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
优选地,所述模块M1包括:模块M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;模块M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;模块M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;模块M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
优选地,所述模块M2包括:模块M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;模块M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;模块M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用。
优选地,所述模块M2.2包括:模块M2.2.1:检查RDMA访问请求是否合法;模块M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;模块M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;模块M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;其中,所述模块M2.2.3包括:模块M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;模块M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;模块M2.2.3.3:返回找到的需读区域内容地址;模块M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;所述非易失内存区域大小等于所需写的内容大小;模块M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;模块M2.2.3.6:返回新分配的非易失内存区域起始地址。
优选地,所述模块M3包括:模块M3.1:客户端获取服务端返回的读/写地址;模块M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
与现有技术相比,本发明具有如下的有益效果:
1、本发明能够提供普适的使用RDMA技术远程访问非易失性内存的功能接口;
2、本发明能够通过日志结构的数据存储与访问机制可保证高并发性及远程原子性;
3、本发明能够支持使用者自定义业务逻辑,具有广泛的应用价值。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例中框架总模块示意图。
图2是本发明实施例中服务端模块运行流程示意图。
图3是本发明实施例中服务端模块接口read()运行流程示意图。
图4是本发明实施例中服务端模块接口write()运行流程示意图。
图5是本发明实施例中服务端模块错误恢复运行流程示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
如图1-图5所示,根据本发明提供的一种面向RDMA与非易失性内存的网络访问编程框架部署方法,采用基于日志结构的数据存储与访问机制来支持使用单边RDMA远程访问非易失性内存,可保证高并发性及远程更新原子性。包括:步骤M1:在客户端请求阶段中,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;步骤M2:在服务端处理阶段中,进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;非易失性内存的存储结构由一个对象列表、一个日志条目列表、一个数据条目列表、一个内存字节列表、一个哈希表、一个对象链表、多个日志条目链表、多个数据条目链表组成。步骤M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;以上三个阶段的通信步骤,均基于OpenFabrics联盟提供的专用RDMA编程库libibverbs来实现,具体包括RDMA连接管理方法、RDMA缓冲区数据填充方法、基于消息机制的数据通信方法、基于读写机制的数据通信方法等。步骤M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
优选地,所述步骤M1包括:步骤M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;步骤M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;步骤M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;步骤M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
优选地,所述步骤M2包括:步骤M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;步骤M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;步骤M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用;
优选地,所述步骤M2.2包括:步骤M2.2.1:检查RDMA访问请求是否合法;步骤M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;步骤M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;步骤M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;其中,所述步骤M2.2.3包括:步骤M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;步骤M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;步骤M2.2.3.3:返回找到的需读区域内容地址;步骤M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;所述非易失内存区域大小等于所需写的内容大小;步骤M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;步骤M2.2.3.6:返回新分配的非易失内存区域起始地址。
优选地,所述步骤M3包括:步骤M3.1:客户端获取服务端返回的读/写地址;步骤M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
非易失内存(Non-VolatileMemory,NVM)技术如相变存储器(PCM)、铁存储器(FeRAM)、忆阻器(Memristor)和Intel3DXPoint等,综合了DRAM内存与磁盘/固态硬盘(SSD)/闪存(Flash)两者的特性。一方面,它具有类似于磁盘的大容量、非易失、低功耗等特性;另一方面,它具有类似于内存的低延迟、高带宽、可字节寻址等特性。然而。使用非易失内存持久化数据需要系统设计者解决故障一致性的问题。系统或程序故障导致的数据不一致主要由两个因素导致:部分写问题和乱序写问题。由于现代操作系统仅支持8字节或16字节的原子写操作,因此在更新更大粒度的数据时并非是一次完整的原子写,产生部分写问题。现有工作主要使用redo日志或undo日志来保证数据更新的完整性。为优化程序性能,CPU和缓存会打乱程序数据的(内存)存储顺序,产生乱序写问题。现有的工作主要使用clflush和mfence指令来保证数据存储的顺序性。
直接内存访问(DirectMemoryAccess,DMA)允许某些硬件装置在无CPU的参与下,直接独立访问内存,读写数据。该技术通常用于缓解CPU对外设的处理压力。在数据传输过程中,CPU仅在执行初始化操作,然后就将整个数据传输动作交由DMA控制器来完成。
远程直接内存访问(RemoteDirectMemoryAccess,RDMA)是一种新型的网络通讯技术,它能实现在双方操作系统不直接参与的情况下直接访问远端内存,具有零拷贝、CPU旁路的优点,并实现了高带宽、低延迟的网络特性。RDMA通过让网卡将数据直接传输到远端节点的内存,消除了对方CPU和Cache的直接参与,避免了复杂的上下文切换开销。目前支持RDMA技术的网络协议栈包括Infiniband、RoCE(RDMAoverConvergedEthernet)和iWARP,前两者由Mellanox提供硬件技术支持,特别地,后两者由于采用了普通以太网的数据链路层,因此均可与以太网完全兼容。图2展示了RDMA读写访问的具体过程:在读取远端节点数据时,首先由本地CPU以MMIO(memory-mappedIO)的方式向网卡发起远程读请求,该请求封装了待读取数据的地址和远端节点的必要信息,本地网卡检测到该命令之后,通过RDMA网络传输该请求消息到远端网卡,远端网卡接收到该请求消息后,根据请求中指定的地址以DMA的方式读取该节点内存中的本地数据,将数据打包,并再次通过RDMA网络将读取的数据传输至本地网卡,本地网卡接收到传回的消息,以DMA的方式直接写入本地内存,待本地后续处理;在向远端节点写入数据时,首先由本地CPU以MMIO的方式向网卡发起远程写请求,本地网卡检测到该命令之后,以DMA的方式从本地内存中读取待传输的数据,将数据打包,并在RDMA网络进行数据传输,远端网卡接收到数据之后,将数据以DMA的方式直接写入到它的本地内存,在RC模式下远端网卡在接收数据完毕时会自动回送ack帧给本地网卡,产生一个完成信息到完成队列。在RDMA读写的整个过程,均不涉及对方CPU参与,也绕过了双方的内核,实现了数据传输的CPU旁路和零拷贝。使用RDMA技术通讯的双方在建立通讯之前需要经过一些步骤:打开网卡设备;创建保护域,该保护域会与在后面阶段创建的QP对象绑定,以保障数据传输安全,任何跨域的操作将会引发通讯错误;注册内存,将通讯的内存进行注册,建立该段内存用户态地址和物理内存地址的映射,并将映射表保存到网卡缓存,同时生成该内存段的密钥对(lkey和rkey),网卡在本地或远程访问内存时需携带相应的密钥进行身份确认;创建完成队列CQ(CompletionQueue),发送方在消息发送成功后或者接收方接收消息成功后均会将相应的完成信息放入完成队列,用户可以反复检测完成队列来验证消息发送是否完成;创建QP(QueuePair),QP的概念可以类比为TCP/IP的套接字,是双方通信的实体,一对QP由SendQueue和ReceiveQueue构成,发送方把需要发送的消息放入发送队列,接收方将接收请求放入接收队列,双方通过这种方式进行网络通信;QP状态初始化,通讯双方创建一一对应的QP之后,需要进行一系列的握手状态转换,直到成功建立起通讯链路。QP可以建立不同的连接类型,包括可靠连接RC(ReliableConnection)、不可靠连接UC(UnreliableConnection)和不可靠数据报UD(UnreliableDatagram),RC模式下,QP只能进行一对一可靠传输,数据包发送成功后会有相应的确认信息反馈,UC模式下,QP进行一对一传输,无确认信息反馈,UD模式则无一对一的界定,也没有确认信息反馈,以上三种传输模式具有不同的特点,同时对通信原语的支持程度也各不相同。RDMA有两种实现远程访问的原语:双边通信的消息语义,典型的操作为SEND和RECV,它们与TCP/IP通信中所使用的send/recv相似,在一端使用SEND发送数据前,另一端需要使用RECV准备好一个接收数据的内存空间;单边通信的内存语义:典型的操作为RDMA_READ和RDMA_WRITE(及其变种RDMA_WRITE_WITH_IMM),它们能够实现完全的服务器旁路式的远程地址操作,即读写远程节点某一地址的数据时对方服务器对此操作完全不感知。
具体地,在一个实施例中,一种面向RDMA与非易失性内存的网络访问编程框架部署方法,采用一种在线检测装置,在线检测装置包括客户端单元以及服务端单元。
服务端单元执行步骤如下:
步骤1:客户端单元、服务端单元启动,服务端单元扫描非易失性内存中的各元数据并进行错误恢复流程,如图5所示。具体地,服务端首先将持久内存中的对象进行分组,使用多线程并发处理。对每一组未处理的对象,服务端单元执行以下操作:
根据该对象的元数据信息核对该数据的有效性;
若有效,查找该数据对象的日志项、数据项与数据区并标记为使用状态;
若无效,则清除该对象并回收它的日志项、数据项与数据区空间。
步骤2:如图2所示,服务端单元和客户端单元分别初始化socket连接,同时客户端单元向服务端单元发送RDMA连接建立请求。
步骤3:接着,如图2所示,服务端单元接受到客户端单元的连接建立请求,为该请求创建一个客户端请求处理线程。
步骤4:接着,如图2所示,客户端单元准备读/写内容,填入RDMA缓冲区,并向服务端单元发送读/写请求。
步骤5:接着,如图2所示,服务端单元接受到客户端单元的读/写请求并进行解析,以基于日志结构的方式处理该请求。若该请求为读请求,则转到步骤7;若该请求为写请求,则转到步骤6。
步骤6:如图4所示,写请求的服务端执行首先分配一个新的日志项和一个新的数据项,并把日志项添加到该数据项,然后检测未垃圾回收的更新次数是否达到阈值,若是,则进行垃圾回收过程,回收无效的日志项。
步骤7:如图3和4所示,服务端单元将读/写所需的非易失性内存地址返回给客户端单元,以供客户端执行单边读写操作;
步骤8:客户端单元接受到返回的非易失性内存地址,通过单边访问RDMA读/写该地址,完成数据I/O,并转到步骤2,处理新的远程访问请求。
根据本发明提供的一种面向RDMA与非易失性内存的网络访问编程框架部署系统,采用基于日志结构的数据存储与访问机制来支持使用单边RDMA远程访问非易失性内存,可保证高并发性及远程更新原子性。包括:模块M1:在客户端请求阶段中,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;模块M2:在服务端处理阶段中,进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;非易失性内存的存储结构由一个对象列表、一个日志条目列表、一个数据条目列表、一个内存字节列表、一个哈希表、一个对象链表、多个日志条目链表、多个数据条目链表组成。模块M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;以上三个阶段的通信模块,均基于OpenFabrics联盟提供的专用RDMA编程库libibverbs来实现,具体包括RDMA连接管理系统、RDMA缓冲区数据填充系统、基于消息机制的数据通信系统、基于读写机制的数据通信系统等。模块M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
优选地,所述模块M1包括:模块M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;模块M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;模块M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;模块M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
优选地,所述模块M2包括:模块M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;模块M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;模块M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用。
优选地,所述模块M2.2包括:模块M2.2.1:检查RDMA访问请求是否合法;模块M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;模块M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;模块M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;其中,所述模块M2.2.3包括:模块M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;模块M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;模块M2.2.3.3:返回找到的需读区域内容地址;模块M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;所述非易失内存区域大小等于所需写的内容大小;模块M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;模块M2.2.3.6:返回新分配的非易失内存区域起始地址。
优选地,所述模块M3包括:模块M3.1:客户端获取服务端返回的读/写地址;模块M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
具体地,在一个实施例中,一种面向RDMA与非易失性内存的网络访问编程框架部署系统能够较简易的部署到网络系统中,具有良好的市场前景和应用价值。
所述编程框架提供了RDMA远程访问非易失性内存的客户端单元以及服务端单元,通过日志结构的数据存储与访问机制可保证高并发性及远程更新原子性。
所述客户端单元,包括客户端预处理单元、客户端逻辑单元、RDMA网络请求单元以及RDMA单边读写单元,该单元用于网络系统在客户端中使用RDMA访问远程机器的非易失性内存;
所述服务端单元,包括服务端请求处理单元、服务端逻辑单元、非易失性内存管理单元、RDMA网络返回单元,该单元用于在远程服务器上管理非易失性内存,处理客户端的访问请求。
在所述客户端单元中,客户端预处理单元由网络请求的RDMA缓冲区填充及一次基于CRC32的校验码计算组成;客户端逻辑单元由客户端主接口的虚函数自定义实现组成;RDMA网络请求单元由基于OpenFabrics联盟提供的RDMA编程库libibverbs实现的RDMA连接管理与访问发送组成;RDMA单边读写单元由同样基于libibverbs实现的RDMA缓冲区填充RDMA请求发送组成。
在所述服务端单元中,服务端请求处理单元由RDMA缓冲区轮询及请求处理触发组成;服务端逻辑单元由服务端主接口的虚函数自定义实现组成;非易失性内存管理单元由一个对象列表、一个日志条目列表、一个数据条目列表、一个内存字节列表、一个哈希表、一个对象链表、多个日志条目链表、多个数据条目链表及基于日志结构的非易失性内存管理组成。上述数据结构皆位于非易失性内存中;RDMA网络返回单元由基于libibverbs实现的RDMA缓冲区填充及RDMA请求返回组成。
面向RDMA与非易失性内存的网络访问编程框架的客户端单元主要包括以下模块:模块A,客户端通过RDMA连接管理与服务端建立RDMA的网络连接;模块B,客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;模块C,客户端单元向服务端单元发送RDMA请求,并获得服务端单元的请求返回;模块D,客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写;面向RDMA与非易失性内存的网络访问编程框架的服务端单元主要包括以下模块:模块A,服务端单元接受客户端单元的RDMA连接请求,与客户端建立RDMA网络连接;模块B,服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;模块C,服务端将客户端本次请求对应的非易失性内存地址返回供RDMA单边访问使用。
本发明能够提供普适的使用RDMA技术远程访问非易失性内存的功能接口;本发明能够通过日志结构的数据存储与访问机制可保证高并发性及远程原子性;本发明能够支持使用者自定义业务逻辑,具有广泛的应用价值。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种面向RDMA与非易失性内存的网络访问编程框架部署方法,其特征在于,包括:
步骤M1:进行客户端请求处理,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;
步骤M2:进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;
步骤M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;
步骤M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
2.根据权利要求1所述的面向RDMA与非易失性内存的网络访问编程框架部署方法,其特征在于,所述步骤M1包括:
步骤M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;
步骤M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;
步骤M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;
步骤M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
3.根据权利要求1所述的面向RDMA与非易失性内存的网络访问编程框架部署方法,其特征在于,所述步骤M2包括:
步骤M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;
步骤M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;
步骤M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用。
4.根据权利要求3所述的面向RDMA与非易失性内存的网络访问编程框架部署方法,其特征在于,所述步骤M2.2包括:
步骤M2.2.1:检查RDMA访问请求是否合法;
步骤M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;
步骤M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;
步骤M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;
其中,所述步骤M2.2.3包括:
步骤M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;
步骤M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;
步骤M2.2.3.3:返回找到的需读区域内容地址;
步骤M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;
所述非易失内存区域大小等于所需写的内容大小;
步骤M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;
步骤M2.2.3.6:返回新分配的非易失内存区域起始地址。
5.根据权利要求1所述的面向RDMA与非易失性内存的网络访问编程框架部署方法,其特征在于,所述步骤M3包括:
步骤M3.1:客户端获取服务端返回的读/写地址;
步骤M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
6.一种面向RDMA与非易失性内存的网络访问编程框架部署系统,其特征在于,包括:
模块M1:进行客户端请求处理,客户端请求包括RDMA缓冲区数据填充及一次基于CRC32的校验码计算;
模块M2:进行服务端请求处理,服务端请求处理包括RDMA缓冲区轮询及请求处理触发;
模块M3:在客户端读写阶段中,客户端读写通过RDMA单边读写单元直接访问远程机器的非易失内存,读写特定地址;
模块M4:获取面向RDMA与非易失性内存的网络访问编程框架结果信息。
7.根据权利要求6所述的面向RDMA与非易失性内存的网络访问编程框架部署系统,其特征在于,所述模块M1包括:
模块M1.1:客户端通过RDMA连接管理与服务端建立基于RDMA网络的通信连接;
模块M1.2:客户端单元将读写内容存入RDMA缓冲区,并对其进行一次基于CRC32的校验码计算;
模块M1.3:客户端单元使用基于RDMA的消息机制向服务端单元发送RDMA请求消息;
模块M1.4:客户端单元根据请求返回中的非易失性内存地址进行RDMA单边读写。
8.根据权利要求6所述的面向RDMA与非易失性内存的网络访问编程框架部署系统,其特征在于,所述模块M2包括:
模块M2.1:服务端单元接受客户端单元的RDMA连接请求,与客户端建立基于RDMA网络的通信连接;
模块M2.2:服务端单元接受客户端单元的RDMA访问请求,以基于日志结构的方式处理非易失性内存及其元数据;
模块M2.3:服务端将客户端本次请求对应的非易失性内存地址返回给客户端,供RDMA单边访问单元使用。
9.根据权利要求8所述的面向RDMA与非易失性内存的网络访问编程框架部署系统,其特征在于,所述模块M2.2包括:
模块M2.2.1:检查RDMA访问请求是否合法;
模块M2.2.2:通过请求中的对象键值的哈希索引,得到所需操作的非易失内存中的数据对象;
模块M2.2.3:根据请求中指定的操作类型进行读对象操作、写对象操作;
模块M2.2.4:返回读对象操作、写对象操作成功与否,以及所需读/写的非易失内存地址;
其中,所述模块M2.2.3包括:
模块M2.2.3.1:根据请求需读的区域,按照时间顺序检索日志对象对应的日志条目;
模块M2.2.3.2:在每次检索的日志条目中检查是否有需读区域的内容,若有,则记录内容起始地址,并在需读区域中去掉内容起始地址;
模块M2.2.3.3:返回找到的需读区域内容地址;
模块M2.2.3.4:分配一个日志条目,一个数据条目以及一块非易失内存区域,并将一个日志条目,一个数据条目以及一块非易失内存区域组织起来;
所述非易失内存区域大小等于所需写的内容大小;
模块M2.2.3.5:将日志条目插入内存对象的日志链表的起始位置,作为最新的日志条目;
模块M2.2.3.6:返回新分配的非易失内存区域起始地址。
10.根据权利要求6所述的面向RDMA与非易失性内存的网络访问编程框架部署系统,其特征在于,所述模块M3包括:
模块M3.1:客户端获取服务端返回的读/写地址;
模块M3.2:客户端使用基于读写的单边访问RDMA机制直接读/写返回的远程非易失内存地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911346712.8A CN111078607B (zh) | 2019-12-24 | 2019-12-24 | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911346712.8A CN111078607B (zh) | 2019-12-24 | 2019-12-24 | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078607A true CN111078607A (zh) | 2020-04-28 |
CN111078607B CN111078607B (zh) | 2023-06-23 |
Family
ID=70317233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911346712.8A Active CN111078607B (zh) | 2019-12-24 | 2019-12-24 | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078607B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459418A (zh) * | 2020-05-15 | 2020-07-28 | 南京大学 | 一种基于rdma的键值存储系统传输方法 |
CN111611223A (zh) * | 2020-05-20 | 2020-09-01 | 清华大学 | 非易失性数据的访问方法、系统、电子设备和介质 |
CN112667416A (zh) * | 2020-12-25 | 2021-04-16 | 华中科技大学 | 一种基于rdma的非易失内存系统的通信方法及服务器 |
CN112817887A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的远内存访问优化方法及系统 |
CN113448897A (zh) * | 2021-07-12 | 2021-09-28 | 上海交通大学 | 适用于纯用户态远端直接内存访问的数组结构及优化方法 |
CN114124680A (zh) * | 2021-09-24 | 2022-03-01 | 绿盟科技集团股份有限公司 | 一种文件访问控制告警日志管理方法及装置 |
CN114979270A (zh) * | 2022-05-25 | 2022-08-30 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
CN116361037A (zh) * | 2023-05-18 | 2023-06-30 | 之江实验室 | 一种分布式通信系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090292861A1 (en) * | 2008-05-23 | 2009-11-26 | Netapp, Inc. | Use of rdma to access non-volatile solid-state memory in a network storage system |
CN107463447A (zh) * | 2017-08-21 | 2017-12-12 | 中国人民解放军国防科技大学 | 一种基于远程直接非易失内存访问的b+树管理方法 |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN109144413A (zh) * | 2018-07-27 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种元数据管理方法及装置 |
-
2019
- 2019-12-24 CN CN201911346712.8A patent/CN111078607B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090292861A1 (en) * | 2008-05-23 | 2009-11-26 | Netapp, Inc. | Use of rdma to access non-volatile solid-state memory in a network storage system |
CN107463447A (zh) * | 2017-08-21 | 2017-12-12 | 中国人民解放军国防科技大学 | 一种基于远程直接非易失内存访问的b+树管理方法 |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
CN109144413A (zh) * | 2018-07-27 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种元数据管理方法及装置 |
Non-Patent Citations (1)
Title |
---|
马文龙;朱妤晴;蒋德钧;熊劲;张立新;孟潇;包云岗;: "Key-Value型NoSQL本地存储系统研究" * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111459418B (zh) * | 2020-05-15 | 2021-07-23 | 南京大学 | 一种基于rdma的键值存储系统传输方法 |
CN111459418A (zh) * | 2020-05-15 | 2020-07-28 | 南京大学 | 一种基于rdma的键值存储系统传输方法 |
CN111611223B (zh) * | 2020-05-20 | 2023-09-26 | 清华大学 | 非易失性数据的访问方法、系统、电子设备和介质 |
CN111611223A (zh) * | 2020-05-20 | 2020-09-01 | 清华大学 | 非易失性数据的访问方法、系统、电子设备和介质 |
CN112667416A (zh) * | 2020-12-25 | 2021-04-16 | 华中科技大学 | 一种基于rdma的非易失内存系统的通信方法及服务器 |
CN112667416B (zh) * | 2020-12-25 | 2024-02-27 | 华中科技大学 | 一种基于rdma的非易失内存系统的通信方法及服务器 |
CN112817887A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的远内存访问优化方法及系统 |
CN113448897A (zh) * | 2021-07-12 | 2021-09-28 | 上海交通大学 | 适用于纯用户态远端直接内存访问的数组结构及优化方法 |
CN114124680A (zh) * | 2021-09-24 | 2022-03-01 | 绿盟科技集团股份有限公司 | 一种文件访问控制告警日志管理方法及装置 |
CN114124680B (zh) * | 2021-09-24 | 2023-11-17 | 绿盟科技集团股份有限公司 | 一种文件访问控制告警日志管理方法及装置 |
CN114979270B (zh) * | 2022-05-25 | 2023-08-25 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
CN114979270A (zh) * | 2022-05-25 | 2022-08-30 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
CN116361037B (zh) * | 2023-05-18 | 2023-08-18 | 之江实验室 | 一种分布式通信系统及方法 |
CN116361037A (zh) * | 2023-05-18 | 2023-06-30 | 之江实验室 | 一种分布式通信系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111078607B (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078607B (zh) | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 | |
US10965753B2 (en) | Interconnect delivery process | |
CN112204513B (zh) | 多租户存储系统中的基于组的数据复制 | |
US10223326B2 (en) | Direct access persistent memory shared storage | |
US9619389B1 (en) | System for a backward and forward application environment compatible distributed shared coherent storage | |
US7007142B2 (en) | Network data storage-related operations | |
KR102462708B1 (ko) | 다수의 스토리지 디바이스에 걸친 원자 기입 동작의 수행 | |
CN111400307B (zh) | 支持远程并发访问的持久哈希表访问系统 | |
US11240306B2 (en) | Scalable storage system | |
WO2019127018A1 (zh) | 存储系统访问方法及装置 | |
CN111316251B (zh) | 可扩展存储系统 | |
WO2019127021A1 (zh) | 存储系统中存储设备的管理方法及装置 | |
WO2019127017A1 (zh) | 存储系统中存储设备的管理方法及装置 | |
US20160034191A1 (en) | Grid oriented distributed parallel computing platform | |
US11947419B2 (en) | Storage device with data deduplication, operation method of storage device, and operation method of storage server | |
Luo et al. | {SMART}: A {High-Performance} Adaptive Radix Tree for Disaggregated Memory | |
US10997026B1 (en) | Dynamic data placement for replicated raid in a storage system | |
US10289550B1 (en) | Method and system for dynamic write-back cache sizing in solid state memory storage | |
US11238010B2 (en) | Sand timer algorithm for tracking in-flight data storage requests for data replication | |
CN107562654A (zh) | Io命令处理方法与装置 | |
US20230141936A1 (en) | Secure processor, operating method thereof, and storage device including same | |
US9348859B2 (en) | Providing record-level sharing (RLS) to local data sets | |
US11513716B2 (en) | Write first to winner in a metro cluster | |
US20220405254A1 (en) | Data deduplication in a disaggregated storage system | |
Zhang et al. | Localized Validation Accelerates Distributed Transactions on Disaggregated Persistent Memory |
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 |