CN114756388A - 一种基于rdma的集群系统节点间按需共享内存的方法 - Google Patents
一种基于rdma的集群系统节点间按需共享内存的方法 Download PDFInfo
- Publication number
- CN114756388A CN114756388A CN202210313099.5A CN202210313099A CN114756388A CN 114756388 A CN114756388 A CN 114756388A CN 202210313099 A CN202210313099 A CN 202210313099A CN 114756388 A CN114756388 A CN 114756388A
- Authority
- CN
- China
- Prior art keywords
- memory
- supplier
- node
- requester
- remote
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 832
- 238000000034 method Methods 0.000 title claims abstract description 53
- 230000001960 triggered effect Effects 0.000 claims abstract description 6
- 238000013507 mapping Methods 0.000 claims abstract description 3
- 230000007246 mechanism Effects 0.000 claims description 72
- 230000005540 biological transmission Effects 0.000 claims description 23
- 238000013475 authorization Methods 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 11
- 230000006870 function Effects 0.000 claims description 10
- 238000000638 solvent extraction Methods 0.000 claims description 7
- 239000012634 fragment Substances 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 15
- 238000007726 management method Methods 0.000 description 12
- 239000000872 buffer Substances 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- BULVZWIRKLYCBC-UHFFFAOYSA-N phorate Chemical class CCOP(=S)(OCC)SCSCC BULVZWIRKLYCBC-UHFFFAOYSA-N 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开一种基于RDMA的集群系统节点间按需共享内存的方法,将集群系统中的节点分为内存供给者、内存请求者、自给自足者三类;内存供给者在集群系统中公告内存共享信息,以块为单位向其他节点提供远程共享内存;当内存请求者中内存不足时,通过RDMA使用内存供给者提供的共享内存,以块为单位将这部分内存映射到内存请求者的虚拟地址空间为扩展内存;内存请求者中的应用程序访问扩展内存时,将触发缺页中断,由虚拟内存管理子系统进行内存页的换入和换出,实现应用程序的透明内存访问。本发明具有访存速度快、系统架构简明、软件系统开销低的特点,通过节点间的内存共享,可提高集群系统的资源利用率,降低成本。
Description
技术领域
本发明涉及分布式存储系统技术领域,特别涉及一种基于RDMA(远程直接内存访问Remote Direct Memory Access)的集群系统节点间按需共享内存的方法。
背景技术
内存是当今数据中心服务器征用最多、弹性最小的资源,即使另一台服务器上的内存可供使用,应用程序也只能使用本地内存。这样的情况会在内存压力下不必要地终止工作负载,并降低服务器的利用率。数据中心为满足多样化的应用需求,通常为节点配置充足的硬件资源。在以CPU为中心进行资源分配的虚拟化和多租户技术支持下,处理器(核)资源通常可以得到充分利用,而内存普遍存在着分配剩余的情况。Google和Alibaba的服务器内存平均利用率仅为60%,而不同服务器之间的内存利用率差异却很大,一旦服务器耗尽了可用内存,一些正在运行的应用程序就必须被迫终止。被终止的应用程序和执行状态都会丢失,恢复这些工作负载既浪费时间又浪费精力。由于数据中心节点数量众多,其中大约30%的服务器内存是“冷的”,各节点的空闲内存累计后数量可观,这一资源浪费不但增加了硬件成本,而且还增大了数据中心能耗。目前,分布式系统与高速互连网络的结合使用是解决上述问题的首选方案。
分布式共享内存(Distributed shared memory,DSM)是分布式系统发展中出现的一种重要技术。分布式共享内存系统提供给程序员一个逻辑上统一地址空间,集群中的所有节点都可以对这一地址空间直接进行读写操作。具有分布式内存结构可扩充性的优点,也具有共享内存结构通用性好、可移植性、编程容易的优点。分布式共享内存系统提供了通过消息传递实现的共享内存的抽象,与远程内存访问(Far Memory)一样,分布式共享内存系统访问远程内存时可以通过多种手段,既可以基于页面,又可以基于对象,但是分布式共享内存系统与远程内存访问在概念和实践上却有所不同。从概念上讲,分布式共享内存系统提供了不同的抽象,其中数据在不同主机之间共享。实际上,这种抽象会导致复杂性和低效,因为分布式共享内存系统需要影响性能的高速缓存一致性协议。例如,访问数据必须确定远程缓存是否保存数据的副本。相比之下,远程内存访问中的数据是主机的私有数据——这是一种更严格的抽象,可以更高效地实现远程内存。此外,分布式共享内存系统是几十年前设计的,现代的硬件体系结构细节和常量与其环境不同。
远程直接内存访问(Remote Direct Memory Access,RDMA)是一种新的高速互连网络,RDMA让计算机可以直接读写其他计算机的内存,而不需要经过CPU的处理。RDMA将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。在实现上,RDMA实际上是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将RDMA协议固化于硬件(即智能网卡)上,以及支持Zero-copy和Kernel bypass这两种途径来达到其高性能的远程直接数据存取的目标。RDMA的优势如下:
(1)零拷贝(Zero-copy),应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层;
(2)内核旁路(Kernel bypass),应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换;
(3)不需要CPU干预(No CPU involvement),应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充;
(4)消息基于事务(Message based transactions),数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息/事务的需求;
(5)支持分散/聚合条目(Scatter/gather entries support),RDMA原生态支持分散/聚合。即读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。
在具体的远程内存读写中,RDMA操作用于读写操作的远程虚拟内存地址包含在RDMA消息中传送,远程应用程序只需在其本地网卡中注册相应的内存缓冲区。远程节点的CPU除在连接建立、注册调用等之外,在整个RDMA数据传输过程中并不提供服务,因此没有带来任何负载。最新的RDMA网卡已经支持100Gbps的网络传输带宽和亚微秒级的传输延迟。
分布式共享内存系统和RDMA分别在存储资源利用和网络上展现了性能优势,因此在集群中基于高速互连网络构建分布式内存池系统具有较好的前景。然而,高速互连网络与传统的TCP/IP技术在数据包处理过程中所需的硬件特性大不相同;其次,当前数据中心工作负载普遍具有数据交换量大,应用需求多样化的特点,通过不同程度的抽象给传统分布式内存系统在维护高速缓存一致性方面带来了不小的挑战。
针对以上问题,业内提出了一些基于内存池设备的改进方案,通过使用集中式共享内存池设备,同时缩减节点的内存配置,达到降低成本,提高资源利用率的目的。
目前,关于分布式内存池构造的方法有很多
(1)专利[1],一种基于RDMA网络的分布式文件系统数据传输方法和系统,专利号:CN 11019194 A;其采用了对服务端存储空间进行翻倍扩容的方法来共享空闲资源,但是这种方法可能会出现内存空间不足,或者存储溢出的问题。在实际内存请求测试中,我们发现,内存的使用碎片化以及地址空间的不连续,都可能造成客户端在向服务端进行访存时出现错误。本发明的方法将内存供给者中的空闲内存空间进行等量划分,可以解决这种问题;其次,该方法需要构建一个全局内存地址查找表,所以集群系统中的所有节点并不是等价的,即,如果一方提供内存,则有且仅有另外一方请求内存,使得在构建RDMA通信期间,只有两者在交换数据。这就造成了资源的浪费。
(2)专利[2],一种基于RDMA技术的分布式高性能计算方法,专利号:CN 111382099A;该方法为了使内存共享一致性,采用了目录控制,需要对每个节点的空闲内存进行状态标记,这样做可以达到内存共享的目的,但是其仍然需要构建一个全局内存地址查找表;此外,这种方法并没有根据节点的实际使用情况对节点进行划分,往往在一个集群系统中,节点主要分为计算密集型和内存密集型,如果对所有节点的内存设置状态目录,这里的开销非常大,如果在一个具有百万节点的集群中,情况就更为复杂。
(3)专利[3],一种基于RDMA的数据传输方法和分布式共享内存系统,专利号:CN111277616 A;采用的是RPC通信架构,所提供的共享内存系统包括客户端和服务端,其中服务端包括主节点和副节点,显然这是一种具有层级关系的分布式内存系统。所以,该方法在集群中的所有节点并不是等价的,且仍需要构建一个全局内存地址查找表。
(4)专利[4],一种基于RDMA的分布式内存文件系统,专利号:CN 108268208 A;从该方法的图3可以看出,很明显该方法通过服务节点构建一个共享内存布局图,也就需要将所有节点中的空闲内存资源进行划分、整合,所以,该方法在集群中的所有节点并不是等价的,且仍需要构建一个全局内存地址查找表;此外,这种方法并没有根据节点的实际使用情况对节点进行划分,往往在一个集群系统中,节点主要分为计算密集型和内存密集型,如果对所有节点的内存设置状态目录,这里的开销非常大,如果在一个具有百万节点的集群中,情况就更为复杂。
(5)专利[5],基于HTM和单向RDMA操作的分布式哈希表方法,专利号:CN1054446936 A;约束了一种在服务端和客户端之间建立数据通路的创新方式,所设计的领域与本发明的方法并不相关。但是,与之不同的是,在使用RDMA建立通信链路时,本发明采用了维护一个B树结构来识别内存供给者以及内存块的使用顺序。
以上专利为本发明的相关研究,总结来说,上述相关研究存在如下缺点:
(1)相关研究中大部分对可请求的空闲内存没有进行粗粒度的划分,在实际内存请求测试中,内存的碎片化使用会导致远程地址空间的不连续,对内存的索引信息构建是一项巨大的挑战,严重时甚至会造成客户端在向服务端进行访存时出现错误,以带来服务器内存故障的风险。通常,在集群系统中,不同节点之间进行共享内存需要考虑内存的灾备,而内存灾备从成本和利用率上来考量,都是一个很困难的问题;
(2)相关研究中较多划分了服务端与客户端,这样的层级划分本身会影响节点之间的公平性,导致作为客户端的节点不能将空闲内存提供给其他节点使用。其次,服务端节点需要维护一个全局的内存地址查找表,来调度所有的客户端内存资源的请求与释放,这加重了服务端节点的运行负载,从而会降低集群系统的整体性能和通信效率。
本发明的优点:(1)上述专利多次提到了分布式共享内存,本发明提出的按需共享内存的方法也是一种分布式内存池,但是这个内存池并不是集中式的,而且,集群中的所有节点均为等价的。通过划分内存供给者与内存请求者,使得每个内存请求者可以使用内存供给者的空闲内存块。因此,不需要构建额外的集中式内存空间,而是充分利用了集群中计算密集型节点的空闲内存资源;(2)不需要参考一个集中式的管理节点(或者成为服务节点)所提供的全局内存地址查找表,无需通过维护全局内存地址查找表。而是通过每个内存请求者节点的具体内存使用情况,将远程内存块下放至网卡构建索引链表。即在不降低内存访问效率的前提下,提高了内存资源的利用率。
本发明针对上述问题提出一种不同的解决思路,即分布式共享内存池技术,通过Infiniband等高速互连网络将节点空闲内存连接形成分布式共享内存池,在不增加专门设备的情况下,达到降低成本,提高内存资源利用率的目的。
发明内容
本发明的技术解决的问题:克服现有技术的不足,提供一种基于RDMA的集群系统节点间按需共享内存的方法,根据节点内处理器和内存资源利用情况,将集群系统中的节点进行分类,通过内存资源的请求与分配手段,充分利用节点内空闲资源,实现节点的高速远程内存访问。具有访存速度快、系统架构简明、软件系统开销低的特点。相对于现有技术而言,通过节点间的内存共享,可提高集群系统的资源利用率,降低成本。
本发明技术解决方案:一种基于RDMA的集群系统节点间按需共享内存的方法,包括以下步骤:
S1:将基于RDMA的集群系统中的节点分为三种类型:内存供给者、内存请求者和自给自足者;所述内存供给者指处理器利用率高而内存利用率低的节点;所述内存请求者指处理器利用率低而内存利用率高的节点;所述自给自足者指除内存供给者和内存请求者以外的剩余节点;
根据所述集群系统中的节点内处理器和内存资源利用情况找到内存供给者,通过内存划分机制与内存注册机制对内存供给者节点进行初始化;所述初始化是对内存供给者中的空闲内存空间进行划分和注册,将空闲内存分块,以块为单位,在内存请求者需要使用内存时,内存供给者将空闲内存块注册到内存请求者的虚拟内存地址空间,以便内存请求者对空闲内存块进行访问,方便内存请求者以块为单位进行使用,从而构建内存供给者节点的内存池系统;
S2:将所述集群系统中包括内存供给者、内存请求者和自给自足者的所有节点利用高速网络,根据集群地址空间进行互连。通过内存请求者对内存供给者的空闲内存块的访问机制进行内存请求,使得内存请求者通过高速互连网络直接Write/Read远程内存供给者节点的共享内存空间,并将内存供给者节点中的空闲内存连接形成分布式共享内存池;当内存请求者中内存不足时,内存供给者使用对空闲内存块资源的查找与调度功能,通过内存块授权/释放机制为内存请求者分配已授权内存块,其中内存块授权/释放机制为内存请求者对内存供给者的空闲内存块的访问提供基础,实现跨节点访问空闲内存块;
S3:基于操作系统的虚拟内存管理子系统对虚拟地址空间进行管理。虚拟内存管理子系统负责生成虚拟地址空间,用来保存从不同的内存供给者节点请求到的内存块;基于远程内存索引机制统一接管内存请求者对远程内存块的并发多操作请求,要求请求远程内存块的内存请求者节点需要在本地生成一棵B树结构,虚拟内存管理子系统负责对B树进行管理;同时,在内存请求者节点N0中构建虚拟地址空间,并将内存供给者节点Nt提供的已授权的内存块映射到内存请求者的虚拟地址空间,将该虚拟内存空间定义为扩展内存;然后,内存供给者Nt使用内存块授权/释放机制基于状态信息索引表统一对内存块的一致性信息进行维护;最后,内存请求者触发远程内存索引机制,将内存供给者提供的已授权内存块M0的信息插入到内存请求者的B树结构;
S4:当内存请求者中的应用程序访问扩展内存时触发缺页中断,由操作系统的虚拟内存管理子系统进行内存页的换入和换出,并通过RDMA作为传输机制支持分布式共享内存系统的数据传输,实现内存请求者应用程序对内存供给者提供的内存块进行透明的内存访问,即集群中的跨节点内存访问;最后,基于内存授权/释放机制,当内存请求者节点的应用程序使用完内存供给者的内存块时,内存请求者需要对内存块进行权限释放与归还的操作。
所述步骤S1具体实现如下:
(1)在构建所述内存供给者节点的内存池系统的初始化阶段,根据所述集群系统中的节点内处理器和内存资源利用情况找到内存供给者,将集群系统中的内存供给者节点内存容量的一部分提供为可执行远程访问操作的远程内存(Far Memory)空间,即内存供给者节点的远程内存池;在所述内存供给者节点的远程内存池中,基于内存划分机制,完成粗粒度的内存空间分割和碎片管理功能,内存供给者节点的内存池被均匀地划分为固定大小的内存块,内存块作为远程内存操作的最小内存单元,并根据内存请求者的具体使用情况为其进行分配;所述内存块以状态信息索引表的形式进行统一管理;
(2)在构建所述内存供给者节点的内存池系统的初始化阶段,基于内存注册机制,将内存供给者节点的内存池中的全部内存块的状态信息索引表注册进高速智能网卡的固定区域,完成内存供给者节点的初始化;所述内存注册机制在智能网卡的主机通道适配器(HCA)中开辟一块固定的存储区域作为所有内存块的状态信息索引表域,将具有远程内存访问权限、远程内存起始地址与远程内存状态标志位三项信息存入智能网卡,内存请求者即可对内存供给者中空闲内存块进行远程访问;所述状态信息索引表域包括所有内存块的状态信息索引表;每个状态信息索引表均包括:远程内存访问权限(key),是远程内存块访问权限的唯一标识;远程内存起始地址(addr),用于记录远程内存块在内存供给者中的地址;远程内存状态标识位(flag),用于记录该块的是否可用;链表指针,指向等待获得该地址操作权的任务链表。
所述步骤S2中,根据内存请求者对内存供给者的空闲内存块的访问机制,内存请求者进行内存请求的方法如下:
S2.1:首先,在集群系统中,内存请求者节点N0的应用程序对内存的使用量超过了自身内存的最大限额;
S2.2:节点N0的应用程序访存进程抛出异常,触发集群内存池查找机制,找到内存供给者节点Nt,请求获取该节点共享内存池资源;同时,内存供给者节点Nt在智能网卡中查找远程内存状态标识位flag标志位为0的内存块M0供内存请求者节点N0使用,并触发内存块授权/释放机制中的授权机制,内存供给者节点Nt将内存块M0这块内存空间的flag标志位修改为1;其中在基于RDMA的集群系统中,基于集群内存池查找机制统一接管集群中,实现内存供给者的空闲内存块资源的查找与调度功能;
S2.3:内存请求者节点N0与内存供给者节点Nt通过RDMA_SEND、RDMA_RECV建立高速通信链路,内存供给者节点Nt将内存块M0的远程内存访问权限key与内存块M0的远程内存起始地址addr,通过RDMA_SEND_INLINE的方式发送给N0。
所述步骤S3中,所述B树结构包括B树结构存储权限标识和索引所需的信息,用于记录内存供给者提供的可供远程Write/Read内存块的地址,以及对已授权的内存块进行管理,当内存请求者获得内存供给者的空闲内存块使用权限后,内存请求者向该B树中插入状态信息索引表中的信息,以便内存请求者在使用内存时进行快速查找。
所述步骤S4中,内存请求者节点N0对该已授权内存块M0直接进行远程直接内存访问写操作RDMA_WRITE、远程直接内存访问读操作RDMA_READ。
所述步骤S4中,基于内存授权/释放机制,当内存请求者节点使用完内存供给者的内存块时,需要进行内存块权限释放与归还的操作具体如下:
对于内存供给者节点Nt,当内存请求者节点N0的应用程序执行完成时,触发内存块释放机制,归还内存块M0,并修改flag标志位为0,断开高速通信链路,并从内存请求者节点N0的B树结构中删除已授权内存块M0的相关信息。
本发明与现有技术相比的优点在于:
(1)本发明与现有的分布式内存池不同的是:第一,本发明无需单独构建一个专门的内存池,而是借助RDMA的高速互联通信机制,将节点间的内存资源利用起来;第二、本发明也无需使用全局内存地址空间,不用将每个节点的内存地址集中到一起,构成一张全局内存地址查找表,而是通过将空闲内存分块,以块为单位,在内存请求者需要使用时,将空闲内存块注册到它的虚拟内存地址空间,以便内存请求者对空闲内存块进行访问。综上所述,现有技术忽略了每个节点中可能存在的空闲内存,本发明在充分考虑节点的计算特征,将计算密集型节点分配为内存供给者节点,将内存密集型节点分配为内存请求者节点,并通过高速互联网络,使得集群中空闲内存资源的高效利用成为可能。
(2)现有技术在采用集中式内存池时构建了全局内存地址查找表,该表存在与共享内存池的操作系统中,需要控制全局内存池资源的调度,既增加了集群系统调度的总开销,又忽略了集群中每个节点可能存在的空闲内存资源,造成了严重的浪费。为了方便内存请求者对内存供给者的空闲内存进行访问,本发明将内存供给者的空闲内存以固定大小进行划分,这样既方便了内存请求者的数据存取,同时也方便了内存的调度和信息索引,具体来说,就是在内存授权与释放的过程中尽可能免去计算内存地址的操作。
(3)在使用集中式内存池的现有技术中,网络通信方式往往还基于传统的TCP/IP或UDP协议栈,导致内存请求节点在需要对集中式内存池进行资源调度时,速度会异常的慢。具体操作如下:首先,内存请求节点需要向集中式内存池机构发送内存资源访问请求,查询内存资源是否可用;然后,集中式内存池通过查找全局内存地址查找表,为内存请求节点分配一块其所需要大小的内存空间,但是,往往在实际使用中,集中式内存池中很难保证一整块连续的内存地址;之后,内存请求节点就需要在本地维护一张复杂的内存池地址链表;然后,由于内存池资源的不连续分布,在实际的应用程序执行数据读取或计算过程中,涉及到节点间信息交换时,需要进行操作系统内核态对数据的上下文切换和多次数据拷贝操作。这又是一笔很大的时间开销,会造成集群系统中不同节点间的信息交换延迟,从而降低了集群系统性能。本发明所使用的空闲内存分块机制与RDMA高速互联网络可以针对性的解决现有技术中存在的“内存资源不连续”与“数据交互速度慢”的技术缺陷,从而提高集群系统的整体性能。
(4)本发明提供了集群内存池查找机制与内存块授权/释放机制。其中,集群内存池查找机制为内存请求者提供发现内存供给者的空闲内存块的功能;内存块授权/释放机制为集群系统的内存资源管理提供了保障。与现有技术相比,本发明在空闲内存块查找阶段,内存供给者通过广播机制将空闲内存块信息对外公开,暴露给集群中的其他节点,通过使用RDMA的收发机制,与内存请求者建立连接。其中,只需要一次连接即可进行无间断的数据交互。并且,基于RDMA的内核旁路机制,将协议栈放入网卡,而不是像现有技术将协议栈放在操作系统中,省掉了应用程序进入内核态的上下文切换,完全由网卡接管数据传输。从而比当前使用传统协议栈和一次传输三次握手的方式具有更高的通信效率。
(5)本发明采用B树的数据结构类型,对内存请求者已获取权限的内存块进行管理。基于B树的信息索引结构具有操作简单,易于实现的特点。相比于现有技术使用全局内存地址查找表的方法,节省了大量用于存储查找表信息的空间。并且,基于B树的信息索引结构可以有效的应对集群系统中复杂的内存请求情况,通过在B树中构建内存块索引链表,在一串不连续的内存授权与释放操作后,可以帮助内存请求者快速地找到内存块地址,从而提高了内存访问效率。
(6)当前采用集中式内存池的做法,不存在内存供给者,即不存在内存供给者对空闲内存块进行远程访问权限授权,也就不需要采用信息索引表对内存块一致性信息进行维护。本权利要求的创新性在于,基于内存授权/释放机制,当内存请求者节点使用完内存供给者的内存块时,需要进行内存块权限释放与归还的操作。
附图说明
图1是本发明方法的流程图;
图2是本发明实施例的基于RDMA的集群系统节点间按需共享内存的方法的执行动作流程图;
图3是本发明一个实施例的分布式共享内存池的系统架构示意图;
图4是本发明一个实施例的高速互联网络数据传输机制示意图;
图5是本发明一个实施例的分布式共享内存池中的内存块示意图;
图6是本发明一个实施例的状态信息索引字段示意图;
图7是本发明一个实施例的远程内存索引机制示意图。
具体实施方式
以下结合附图描述本发明。在介绍本发明的实施例之前,先对本发明中出现的术语进行说明。
高速是本领域的通常术语,RDMA是一种内核旁路的通信技术手段,这种通信方式与传统以太网传输方式速度有60倍左右的提升,这里的高速用来表示:正是依托于这种“高速”的互联技术,才能够支持本方法的分布式内存池;
远程直接内存访问(Remote Direct Memory Access,RDMA)是一种直接内存访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。
传统的TCP/IP技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的CPU和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重“不匹配性”,更加剧了网络延迟效应。
RDMA技术最早出现在Infiniband网络,用于HPC高性能计算集群的互联。传统的基于socket套接字(TCP/IP协议栈)的网络通信,需要经过操作系统软件协议栈,数据在系统DRAM、处理器CACHE和网卡buffer之间来回拷贝搬移,因此占用了大量的CPU计算资源和内存总线带宽,也加大了网络延时。举例来说,40Gbps的TCP流,能耗尽主流服务器的所有CPU资源。RDMA解决了传统TCP/IP通信的技术痛点:40Gbps场景下,CPU占用率从100%下降到5%,网络延时从ms级降低到10us以下。RDMA可以简单理解为利用相关的硬件和网络技术,节点1的网卡可以直接读写节点2的内存,最终达到高带宽、低延迟和低资源利用率的效果。如图3所示,应用程序不需要参与数据传输过程,只需要指定内存读写地址,开启传输并等待传输完成即可。
图4展示了RDMA通信的大致流程:(1)节点N0与Nt之间的RDMA通路建立以后,当节点N0的应用程序需要对节点Nt进行Write操作时(Read与Write类似),网卡控制器首先从本地内存中获取相应的数据,并检查远程内存块的状态信息索引表确定写入路径,核对写入数据大小是否超过内存块大小;(2)在确认状态信息后,将要进行远程传输的数据打包放入发送队列,通过数据总线以DMA的方式拷贝至网卡缓存区BR;(3)BR在接收到数据以后,直接通过B树中提供的内存块地址,通过高速互连网络,以RDMA_WRITE的方式发送给节点Nt的网卡缓冲区BR;(4)BR接收数据完成之后,根据数据包提供的地址,通过数据总线以DMA的方式直接将数据写入目的地址内存块,完成操作。整个过程不涉及双方CPU参与,并绕过了内核态,实现了数据的零拷贝。另外,双方在建立高速通路之前需要经过以下步骤:(1)节点需要在系统初始化时,通过RDMA_MR将内存池信息注册到网卡中,以供其他节点进行远程访问;(2)节点N0首先通过ib_post_send向节点Nt发送连接建立请求;(3)节点Nt接收请求信息,并向CPU请求建立连接,并通过ib_post_recv将内存池使用权限、地址信息打包返回给节点N0;(4)节点N0收到返回信息表示高速数据通路建立完成,即可执行应用程序数据传输任务。
RDMA可以配置为三种模式:可靠连接(RC)、不可靠连接(UC)和不可靠数据报(UD)。UD支持单播(一对一)和组播(一对多),无需建立连接,而RC和UC需要首先建立连接,并且只支持一对一数据传输。UD和RC/UC之间的另一个区别是最大传输单位(MTU)。UD的MTU只有4KB,RC/UC的MTU高达2GB。RC和UC的区别在于交换矩阵的可靠性。RC保证了网络层数据传输的可靠性和正确性,而UC没有这样的保证。
RDMA在建立高速数据通路是主要有两种方式可以使用:imm和inline。在携带数据特别少的场景(小于4BYTES),可以考虑使用imm数据模式(Immediate命令),从而避免DMA数据段的开销(这种模式下,芯片就不需要考虑数据段,仅完成命令头的DMA)。通常模式下数据通过SGE来交互,数据的地址存放在相关描述符中,这些描述符被写入到芯片和OS的共享内存中,芯片处理时需要先把描述符DMA到芯片,解析得到地址后再把数据DMA到芯片。采用inline数据,就是允许把数据放到描述符中,这样芯片就少DMA一次。注意:采用这种方式的代价是数据拷贝,一般仅适用于数据较小且大于4BYTES(这种就用imm数据)的场景。如果芯片支持的inline数据较大,需要通过测试来找到恰当地inline数据长度门限值。而且这种方式对描述符的大小有要求,在芯片设计的时候需要考虑系统的“readcompletioncombining size”,按照这个值对齐达到最佳的PCIE利用率。此外,还可以在CQE中使用inline数据,和发送方向的inline数据一样,对SEND类型的数据,如果数据量较小,直接放到CQE中避免多次启动DMA。该方式也会产生CPU拷贝,需要测试最佳的数据长度值。
分布式共享内存(Distributed shared memory,DSM)是分布式系统发展中出现的一种重要技术。分布式共享内存系统提供了通过消息传递实现的共享内存的抽象,与远程内存访问(Far Memory)一样,分布式共享内存系统访问远程内存时可以通过多种手段,既可以基于页面,又可以基于对象,但是分布式共享内存系统与远程内存访问在概念和实践上却有所不同。从概念上讲,分布式共享内存系统提供了不同的抽象,其中数据在不同主机之间共享。实际上,这种抽象会导致复杂性和低效,因为分布式共享内存系统需要影响性能的高速缓存一致性协议。例如,访问数据必须确定远程缓存是否保存数据的副本。相比之下,远程内存访问中的数据是主机的私有数据——这是一种更严格的抽象,可以更高效地实现远程内存。目前比较流行的分布式共享内存框架包括Redis、OSS。Redis主要用于解决键值(Key-Value)存储,遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对存储数据库,并提供多种语言的API。相比来说,OSS是一个分布式文件系统,用户可以通过本发明文档提供的简单的REST接口,从云设备上上传和下载数据。多用于大规模的数据服务。
图2是本发明实施例的一种基于RDMA的集群系统节点间按需共享内存的方法的执行动作流程图。
如图1所示,根据发明实施例的基于集群系统节点间按需共享内存的内存池系统,该系统执行以下动作:
S1:根据节点内处理器和内存资源利用情况,通过内存划分机制与内存注册机制对内存供给者节点进行初始化。将集群系统中的内存供给者节点内存容量的一部分(如百分之三十)提供为可执行远程访问操作的远程内存(Far Memory)空间,即内存供给者节点的远程内存池;在所述内存供给者节点的远程内存池中,基于内存划分机制,完成粗粒度的内存空间分割和碎片管理功能,内存供给者节点的内存池将被均匀地划分为固定大小的内存块(如1GB),内存块作为远程内存操作的最小内存操作单元进行分配;所述内存块以状态信息索引表的形式进行统一管理;
在构建所述内存供给者节点的内存池系统的初始化阶段,基于内存注册机制,将内存供给者节点的内存池中的全部内存块的状态信息索引表注册进高速智能网卡的固定区域,完成内存供给者节点的初始化。其特征在于,所述内存注册机制需要在智能网卡的主机通道适配器(HCA)中开辟一块固定的存储区域作为所有内存块的状态信息索引表域。所述状态信息索引表域包括所有内存块的状态信息索引表;每个状态信息索引表均包括:远程内存访问权限(key)、远程内存起始地址(addr)、远程内存状态标识位(flag)。创新性在于通过内存注册机制,仅需要将具有远程内存访问权限、远程内存起始地址与远程内存状态标志位三项信息存入智能网卡,内存请求者即可完成对内存供给者中空闲内存块的远程访问。
S2:通过高速网络将集群中所有节点进行互连。内存请求者中内存不足时,内存供给者通过内存块授权/释放机制为请求者分配内存。利用高速网络(如InfiniBand RDMA),将集群系统中的节点通过集群地址空间进行互连,无需将所述内存供给者的所有内存块地址编址为全局统一的虚拟地址空间,这样使得内存请求者通过高速互连网络直接Write/Read远程内存供给者节点的共享内存空间。并实施以下步骤:
S2.1:集群中,内存请求者节点N0内存使用量超过了最大限额;
S2.2:节点N0的应用程序访存进程抛出异常,触发集群内存池查找机制,找到内存供给者节点Nt,请求获取该节点共享内存池资源;同时,节点Nt在智能网卡中查找flag标志位为0的内存块M0供节点N0使用,并触发内存块授权/释放机制中的授权机制,Nt将M0这块内存空间的flag标志位修改为1;在基于RDMA的集群系统中,基于集群内存池查找机制统一接管集群中所述内存供给者的空闲内存块资源的查找与调度功能;
S2.3:节点N0与节点Nt通过RDMA_SEND、RDMA_RECV建立高速通信链路,节点Nt将内存块M0的远程内存访问权限key与该内存块M0的远程内存起始地址addr,通过RDMA_SEND_INLINE的方式发送给N0。
S3:内存请求者通过远程内存索引机制对已授权的内存块进行管理,将授权内存块映射到内存请求者的虚拟地址空间,定义为扩展内存。基于远程内存索引机制提供远程内存块的多请求模式,使得请求远程内存块的内存请求者节点N0需要在本地生成一棵B树结构,包括B树结构存储权限标识和索引所需信息,用于记录内存供给者提供的可供远程Write/Read内存块的地址,以及对已授权的内存块进行管理;如图7所示,在这棵B树中,key是每个B树子节点的关键信息,保存着用于识别远程空闲内存块访问权限的具体键值。当内存请求者的应用程序需要访问key为α(如:84c87814)的内存块时,可以依靠B树这种数据结构进行快速查找。当找到该内存块后,根据addr定位远程空闲内存块在内存供给者节点中的具体地址,并进行访问。flag标识了该内存块的使用状态,链表P是应用程序在后续使用过程中仍需访问内存块的索引信息。
基于操作系统的虚拟内存管理子系统,在内存请求者节点N0中构建虚拟地址空间,并将内存供给者节点Nt提供的已授权的内存块映射到内存请求者的虚拟地址空间,将该虚拟内存空间定义为扩展内存。其中,虚拟内存管理子系统负责生成虚拟地址空间,用来保存从不同的内存供给者节点请求到的内存块。虚拟内存管理子系统负责对B树进行管理,B树中存储了内存块之间更详细的信息,比如哪些是连续的块。之后,内存请求者触发远程内存索引机制,将内存供给者提供的已授权内存块M0的信息插入到内存请求者的B树结构,如图7所示。
B树结构用于存储权限标识和索引所需信息。当内存请求者获得内存供给者的空闲内存块使用权限后,内存请求者向该B树中插入如下信息以建立索引,具体包括:远程内存访问权限(key),是远程内存块访问权限的唯一标识;远程内存起始地址(addr),用于记录远程内存块在内存供给者中的地址;远程内存状态标识位(flag),用于记录该块的是否可用;链表指针,指向等待获得该地址操作权的任务链表。
S4:内存请求者中的应用程序访问扩展内存时触发缺页中断,由操作系统的虚拟内存管理子系统进行内存页的换入和换出,并通过RDMA作为传输机制来支持这种分布式共享内存系统的数据传输,从而实现内存请求者应用程序对内存供给者提供的内存块进行透明的内存访问。内存请求者节点N0对该已授权内存块M0直接进行RDMA_WRITE(远程直接内存访问写操作)、RDMA_READ(远程直接内存访问读操作)。
对于内存供给者节点Nt,当内存请求者节点N0的应用程序执行完成时,触发内存块释放机制,归还内存块M0,并修改flag标志位为0,断开高速通信链路,并从内存请求者节点N0的B树结构中删除已授权内存块M0的相关信息。所述内存供给者Nt使用内存块授权/释放机制基于所述状态信息索引表统一对内存块的一致性信息进行维护。
需要说明的是,在步骤S1中,基于集群的分布式共享内存池由不同节点提供的内存块构成,但是各节点内存块之间不需要进行统一编址,也不需要存储超级块、消息池等,该分布式共享内存池用于数据的Write/Read操作,因此本分布式共享内存池的构建和数据传输方法均不同于以往技术方案,通过这种管理方式,提高了访存速度、简化了系统架构、从而降低了软件系统的开销,使得本地节点在访问远程内存时在处理速度上获得了显著的提升。
在本发明步骤S1的一个实施例中,内存块的大小设置为1GB,内存池空间设定为内存总容量的30%。这种设定可以依照不同集群的不同节点的不同应用程序访存习惯进行设定。之后,系统初始化内存块的状态信息索引表,并缓冲进网卡。以上步骤处于系统初始化阶段。
在本发明步骤S2的一个实施例中,每个节点拥有独有的ID号,以及该节点提供的内存池访问接口。所有节点提供的内存池空间构成了集群的分布式共享内存池,如图3所示。特别地,本发明使用的实施方案不需要集中式内存池,不需要专有的存储服务器,不需要全系统的统一编址,而是充分利用每个节点空闲内存空间,满足其他节点的内存请求。
在本发明步骤S2的一个实施例中,如图3所示,在高速数据通路建立阶段,节点N0首先通过RDMA_SEND_INLINE向节点Nt发送连接建立请求,节点Nt接收请求信息,并向CPU请求建立连接,并通过RDMA_RECV_INLINE将内存块使用权限key、内存块起始地址addr打包返回给节点N0。节点N0收到返回信息后将内存块的状态信息写入网卡维护的B树中,内存块状态信息跟随数据一同进入接收队列,后续将写入内存池维护的状态信息索引表。完成高速数据通路建立,等待应用程序进行Write/Read操作。
本发明步骤S3的一个实施例中,如图5所示,集群中的内存供给者节点都拥有一个内存池,包含了一个接收队列,一个发送队列,一个空闲队列,还有大小为1GB的多个内存块(最小内存请求单元)。此外,内存池仍需一个远程访存模块,包括该节点请求的若干个其他节点内存块,这些内存块由状态信息索引表进行维护。在网卡中,通过远程内存索引机制构建B树,包含了所有远程请求内存块信息,B树中每个节点的信息包括:远程内存访问权限(key)、远程内存起始地址(addr)、远程内存状态标识位(flag)、链表指针,指向等待获得该地址操作权的任务链表,如图6所示。
根据本发明的分布式共享内存系统在高速互连网络中的重构方法,使得系统性能得到大幅度的提升。传统的分布式共享内存池系统以TCP/IP技术数据包处理方式,需要经过操作系统及其他软件层,占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的CPU和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重“不匹配性”,更加剧了网络延迟效应。为此本发明结合RDMA技术,对分布式系统和高速互连网络进行了重构,无需对所有分布式内存资源进行统一编址,简化了结构,使得本发明提出的分布式共享内存池系统实现了亚微秒级的传输延迟,同时提高了系统整体吞吐量。
本发明步骤S3的一个实施例中,每个节点内维护的状态信息索引表字段如图6所示,包括远程内存访问权限(key)、远程内存起始地址(addr)、远程内存状态标识位(flag)、链表指针。其中,1位的远程内存状态标识位(flag)共有两种状态,分别是,flag为0,表示该内存块空闲;flag为1,表示该内存块被本节点请求占用。
本发明步骤S2的一个实施例中,集群内存查找机制是指节点N0通过一定的搜索算法在该集群系统中查找具有空闲内存块的节点Nt。这里的实施例使用广播的方式实现集群内存查找机制,即节点N0会将内存请求通过RDMA_SEND_INLINE以广播的形式发送给所有节点,如果节点Nt首先返回RDMA_RECV_INLINE,则节点N0将会与之建立高速数据通路。如果有其他节点Nt+1也向N0返回了信息,则N0将自动忽略。此时节点Nt+1也会由于超时未响应而放弃与N0建立连接。通过该集群内存查找机制可以将所有节点保持活跃状态,及时响应高速数据通路建立请求,实现低延迟传输。
另外,本发明实施例的分布式内存池系统的其他构成以及作用对于本领域的技术人员而言都是已知的,为了减少冗余,不做赘述。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (6)
1.一种基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,包括以下步骤:
S1:将基于RDMA的集群系统中的节点分为三种类型:内存供给者、内存请求者和自给自足者;所述内存供给者指处理器利用率高而内存利用率低的节点;所述内存请求者指处理器利用率低而内存利用率高的节点;所述自给自足者指除内存供给者和内存请求者以外的剩余节点;
根据所述集群系统中的节点内处理器和内存资源利用情况找到内存供给者,通过内存划分机制与内存注册机制对内存供给者节点进行初始化;所述初始化是对内存供给者中的空闲内存空间进行划分和注册,将空闲内存分块,以块为单位,在内存请求者需要使用内存时,内存供给者将空闲内存块注册到内存请求者的虚拟内存地址空间,以便内存请求者对空闲内存块进行访问,方便内存请求者以块为单位进行使用,从而构建内存供给者节点的内存池系统;
S2:将所述集群系统中包括内存供给者、内存请求者和自给自足者的所有节点利用高速网络,根据集群地址空间进行互连。通过内存请求者对内存供给者的空闲内存块的访问机制进行内存请求,使得内存请求者通过高速互连网络直接Write/Read远程内存供给者节点的共享内存空间,并将内存供给者节点中的空闲内存连接形成分布式共享内存池;当内存请求者中内存不足时,内存供给者使用对空闲内存块资源的查找与调度功能,通过内存块授权/释放机制为内存请求者分配已授权内存块,其中内存块授权/释放机制为内存请求者对内存供给者的空闲内存块的访问提供基础,实现跨节点访问空闲内存块;
S3:基于操作系统的虚拟内存管理子系统对虚拟地址空间进行管理。虚拟内存管理子系统负责生成虚拟地址空间,用来保存从不同的内存供给者节点请求到的内存块;基于远程内存索引机制统一接管内存请求者对远程内存块的并发多操作请求,要求请求远程内存块的内存请求者节点需要在本地生成一棵B树结构,虚拟内存管理子系统负责对B树进行管理;同时,在内存请求者节点N0中构建虚拟地址空间,并将内存供给者节点Nt提供的已授权的内存块映射到内存请求者的虚拟地址空间,将该虚拟内存空间定义为扩展内存;然后,内存供给者Nt使用内存块授权/释放机制基于状态信息索引表统一对内存块的一致性信息进行维护;最后,内存请求者触发远程内存索引机制,将内存供给者提供的已授权内存块M0的信息插入到内存请求者的B树结构;
S4:当内存请求者中的应用程序访问扩展内存时触发缺页中断,由操作系统的虚拟内存管理子系统进行内存页的换入和换出,并通过RDMA作为传输机制支持分布式共享内存系统的数据传输,实现内存请求者应用程序对内存供给者提供的内存块进行透明的内存访问,即集群中的跨节点内存访问;最后,基于内存授权/释放机制,当内存请求者节点的应用程序使用完内存供给者的内存块时,内存请求者需要对内存块进行权限释放与归还的操作。
2.根据权利要求1所述的基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,所述步骤S1具体实现如下:
(1)在构建所述内存供给者节点的内存池系统的初始化阶段,根据所述集群系统中的节点内处理器和内存资源利用情况找到内存供给者,将集群系统中的内存供给者节点内存容量的一部分提供为可执行远程访问操作的远程内存(Far Memory)空间,即内存供给者节点的远程内存池;在所述内存供给者节点的远程内存池中,基于内存划分机制,完成粗粒度的内存空间分割和碎片管理功能,内存供给者节点的内存池被均匀地划分为固定大小的内存块,内存块作为远程内存操作的最小内存单元,并根据内存请求者的具体使用情况为其进行分配;所述内存块以状态信息索引表的形式进行统一管理;
(2)在构建所述内存供给者节点的内存池系统的初始化阶段,基于内存注册机制,将内存供给者节点的内存池中的全部内存块的状态信息索引表注册进高速智能网卡的固定区域,完成内存供给者节点的初始化;所述内存注册机制在智能网卡的主机通道适配器(HCA)中开辟一块固定的存储区域作为所有内存块的状态信息索引表域,将具有远程内存访问权限、远程内存起始地址与远程内存状态标志位三项信息存入智能网卡,内存请求者即可对内存供给者中空闲内存块进行远程访问;所述状态信息索引表域包括所有内存块的状态信息索引表;每个状态信息索引表均包括:远程内存访问权限(key),是远程内存块访问权限的唯一标识;远程内存起始地址(addr),用于记录远程内存块在内存供给者中的地址;远程内存状态标识位(flag),用于记录该块的是否可用;链表指针,指向等待获得该地址操作权的任务链表。
3.根据权利要求1所述的基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,所述步骤S2中,根据内存请求者对内存供给者的空闲内存块的访问机制,内存请求者进行内存请求的方法如下:
S2.1:首先,在集群系统中,内存请求者节点N0的应用程序对内存的使用量超过了自身内存的最大限额;
S2.2:节点N0的应用程序访存进程抛出异常,触发集群内存池查找机制,找到内存供给者节点Nt,请求获取该节点共享内存池资源;同时,内存供给者节点Nt在智能网卡中查找远程内存状态标识位flag标志位为0的内存块M0供内存请求者节点N0使用,并触发内存块授权/释放机制中的授权机制,内存供给者节点Nt将内存块M0这块内存空间的flag标志位修改为1;其中在基于RDMA的集群系统中,基于集群内存池查找机制统一接管集群中,实现内存供给者的空闲内存块资源的查找与调度功能;
S2.3:内存请求者节点N0与内存供给者节点Nt通过RDMA_SEND、RDMA_RECV建立高速通信链路,内存供给者节点Nt将内存块M0的远程内存访问权限key与内存块M0的远程内存起始地址addr,通过RDMA_SEND_INLINE的方式发送给N0。
4.根据权利要求1所述的基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,所述步骤S3中,所述B树结构包括B树结构存储权限标识和索引所需的信息,用于记录内存供给者提供的可供远程Write/Read内存块的地址,以及对已授权的内存块进行管理,当内存请求者获得内存供给者的空闲内存块使用权限后,内存请求者向该B树中插入状态信息索引表中的信息,以便内存请求者在使用内存时进行快速查找。
5.根据权利要求1所述的基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,所述步骤S4中,内存请求者节点N0对该已授权内存块M0直接进行远程直接内存访问写操作RDMA_WRITE、远程直接内存访问读操作RDMA_READ。
6.根据权利要求1所述的基于RDMA的集群系统节点间按需共享内存的方法,其特征在于,所述步骤S4中,基于内存授权/释放机制,当内存请求者节点使用完内存供给者的内存块时,需要进行内存块权限释放与归还的操作具体如下:
对于内存供给者节点Nt,当内存请求者节点N0的应用程序执行完成时,触发内存块释放机制,归还内存块M0,并修改flag标志位为0,断开高速通信链路,并从内存请求者节点N0的B树结构中删除已授权内存块M0的相关信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210313099.5A CN114756388B (zh) | 2022-03-28 | 一种基于rdma的集群系统节点间按需共享内存的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210313099.5A CN114756388B (zh) | 2022-03-28 | 一种基于rdma的集群系统节点间按需共享内存的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114756388A true CN114756388A (zh) | 2022-07-15 |
CN114756388B CN114756388B (zh) | 2024-05-31 |
Family
ID=
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115297144A (zh) * | 2022-07-29 | 2022-11-04 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
CN115495246A (zh) * | 2022-09-30 | 2022-12-20 | 上海交通大学 | 分离式内存架构下的混合远内存调度方法 |
CN115586980A (zh) * | 2022-10-09 | 2023-01-10 | 维塔科技(北京)有限公司 | 远程过程调用装置及方法 |
CN116680206A (zh) * | 2023-08-04 | 2023-09-01 | 浪潮电子信息产业股份有限公司 | 内存扩展方法、装置、系统、电子设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100049921A1 (en) * | 2008-08-25 | 2010-02-25 | International Business Machines Corporation | Distributed Shared Caching for Clustered File Systems |
WO2011060366A2 (en) * | 2009-11-13 | 2011-05-19 | Anderson Richard S | Distributed symmetric multiprocessing computing architecture |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN110221779A (zh) * | 2019-05-29 | 2019-09-10 | 清华大学 | 分布式持久性内存存储系统的构建方法 |
CN111125049A (zh) * | 2019-12-24 | 2020-05-08 | 上海交通大学 | 基于rdma与非易失内存的分布式文件数据块读写方法及系统 |
CN113590364A (zh) * | 2021-09-29 | 2021-11-02 | 阿里云计算有限公司 | 一种基于分布式共享内存系统的数据处理方法和装置 |
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100049921A1 (en) * | 2008-08-25 | 2010-02-25 | International Business Machines Corporation | Distributed Shared Caching for Clustered File Systems |
WO2011060366A2 (en) * | 2009-11-13 | 2011-05-19 | Anderson Richard S | Distributed symmetric multiprocessing computing architecture |
CN108268208A (zh) * | 2016-12-30 | 2018-07-10 | 清华大学 | 一种基于rdma的分布式内存文件系统 |
CN110221779A (zh) * | 2019-05-29 | 2019-09-10 | 清华大学 | 分布式持久性内存存储系统的构建方法 |
CN111125049A (zh) * | 2019-12-24 | 2020-05-08 | 上海交通大学 | 基于rdma与非易失内存的分布式文件数据块读写方法及系统 |
CN113590364A (zh) * | 2021-09-29 | 2021-11-02 | 阿里云计算有限公司 | 一种基于分布式共享内存系统的数据处理方法和装置 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115297144A (zh) * | 2022-07-29 | 2022-11-04 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
CN115297144B (zh) * | 2022-07-29 | 2024-03-08 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
CN115495246A (zh) * | 2022-09-30 | 2022-12-20 | 上海交通大学 | 分离式内存架构下的混合远内存调度方法 |
CN115586980A (zh) * | 2022-10-09 | 2023-01-10 | 维塔科技(北京)有限公司 | 远程过程调用装置及方法 |
CN116680206A (zh) * | 2023-08-04 | 2023-09-01 | 浪潮电子信息产业股份有限公司 | 内存扩展方法、装置、系统、电子设备及可读存储介质 |
CN116680206B (zh) * | 2023-08-04 | 2024-01-12 | 浪潮电子信息产业股份有限公司 | 内存扩展方法、装置、系统、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tsai et al. | LITE kernel RDMA support for datacenter applications | |
US20200293465A1 (en) | Multi-protocol support for transactions | |
CN108268208B (zh) | 一种基于rdma的分布式内存文件系统 | |
US20200387405A1 (en) | Communication Method and Apparatus | |
US6081883A (en) | Processing system with dynamically allocatable buffer memory | |
TWI543073B (zh) | 用於多晶片系統中的工作調度的方法和系統 | |
WO2018035856A1 (zh) | 实现硬件加速处理的方法、设备和系统 | |
CN115210693A (zh) | 具有可预测时延的存储事务 | |
US8131814B1 (en) | Dynamic pinning remote direct memory access | |
TWI519958B (zh) | 用於多節點系統中的記憶體分配的方法和裝置 | |
JP2021190123A (ja) | キャッシュコヒーレントインターコネクトを使用するシステム及び方法 | |
DeBergalis et al. | The Direct Access File System. | |
TWI547870B (zh) | 用於在多節點環境中對i/o 存取排序的方法和系統 | |
CN111966446B (zh) | 一种容器环境下rdma虚拟化方法 | |
TW201543218A (zh) | 具有多節點連接的多核網路處理器互連之晶片元件與方法 | |
TWI541649B (zh) | 用於多晶片系統的晶片間互連協定之系統與方法 | |
US20200379922A1 (en) | Adaptive routing for pooled and tiered data architectures | |
US20210326270A1 (en) | Address translation at a target network interface device | |
CN102375789A (zh) | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 | |
Magoutis | Design and Implementation of a Direct Access File System ({{{{{DAFS}}}}}) Kernel Server for {FreeBSD} | |
Taranov et al. | Kafkadirect: Zero-copy data access for apache kafka over rdma networks | |
CN114756388B (zh) | 一种基于rdma的集群系统节点间按需共享内存的方法 | |
CN114756388A (zh) | 一种基于rdma的集群系统节点间按需共享内存的方法 | |
Choi et al. | Performance evaluation of a remote block device with high-speed cluster interconnects | |
Li et al. | Performance of the 25 gbps/100 gbps fullmesh roce network using mellanox connetx-4 lx adapter and ruijie s6500 ethernet switch |
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 |