CN102831018B - 低延迟先进先出消息交换系统 - Google Patents

低延迟先进先出消息交换系统 Download PDF

Info

Publication number
CN102831018B
CN102831018B CN201110461040.2A CN201110461040A CN102831018B CN 102831018 B CN102831018 B CN 102831018B CN 201110461040 A CN201110461040 A CN 201110461040A CN 102831018 B CN102831018 B CN 102831018B
Authority
CN
China
Prior art keywords
message
host node
node
rdma
batch
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.)
Active
Application number
CN201110461040.2A
Other languages
English (en)
Other versions
CN102831018A (zh
Inventor
M·K·南比亚尔
N·阿格拉沃尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tata Consultancy Services Ltd
Original Assignee
Tata Consultancy Services Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tata Consultancy Services Ltd filed Critical Tata Consultancy Services Ltd
Publication of CN102831018A publication Critical patent/CN102831018A/zh
Application granted granted Critical
Publication of CN102831018B publication Critical patent/CN102831018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供一种低延迟先进先出消息交换系统,用于由支持RDMA的网络接口卡实现的,进程节点之间的进程间通信中的无锁(lockless)的远程消息交换。所述进程间通信通过使用无限带宽(infiniband)动词库或以太网访问的随机直接内存访问(RDMA)写操作来实现。这提供了无需系统调用开销的情况下对支持RDMA的NIC的直接访问,以达到对远程消息交换要求的低延迟和高消息交换速率。因为远程发送方为减少传输和确认每条消息所需的工作请求数量而将多条消息捆绑在一起,因此所述RDMANIC接收批量的消息。这就需要待通过RDMA同步的通信处理节点上的内存映射结构。

Description

低延迟先进先出消息交换系统
技术领域
本发明涉及处理器间消息交换的领域,更具体地,涉及一种由基于先进先出(FIFO)系统的远程直接访问内存辅助的低延迟远程消息交换。
背景技术
随着计算加速的到来,要求两个不同的软件线程或处理器内核之间的数据交换是快速,高效的。一般,现有的基于典型的TCP/IP方案的远程消息交换方法具有发送和接收消息时CPU使用率高的缺点。在所述消息TCP/IP模式中,一个软件线程不会和其希望通信的另一个软件线程分享任何公用内存空间。相反,发送消息到另一个软件线程或者从另一个软件线程接收消息需要分别使用套接字send()(发送())和套接字recv()(接收())系统调用。
通过典型的TCP/IP方案的这方面的通信涉及很多软件指令,所述软件指令由所述发送和远程主机上的CPU内核执行。此外,每次执行send()系统调用,都有从用户级到系统级的上下文的改变,这相当于高CPU开销。在接收端的所述接收系统调用的情况也是如此。
由于在两个不同的软件线程之间应交换的数据量已增多,两个处理器内核之间的所述消息先进先出(FIFO)需要低延迟,使所述处理器内核不会因频繁的通信而减慢速度。使用TCP/IP协议很难实现高速率的消息交换时的低延迟,因为所述系统调用需要由应用进程执行,以促进所述发送和接收端的消息交换。
这意味着消息基础设施(包括软件)应能够处理非常大的工作量。非常大的工作量意味着每秒超过一百万条消息。因此,鉴于所述当前消息交换系统现在需求的工作量和未来预期的工作量,迫切需要一个新的系统,能够保证低延迟的消息交换和优化的吞吐量。
因此,根据上述背景技术,显然需要一种系统和方法:
●为至少在两个节点上运行的至少两个进程之间的进程间通信提供高吞吐量和低延迟消息交换技术;
●增加所述消息交换系统的吞吐量优化;
●降低所述消息交换系统的延迟;
●需求基础设施最小化;
●降低为提高吞吐量和降低所述消息交换系统的延迟而设置的硬件的成本;及
●容易运用于现有系统上。
发明内容
发明目的
本发明的主要目的是提供一种系统,所述系统用于通过网络的进程间通信中的,为远程节点上运行的进程之间的较高工作量提供更低的延迟的高吞吐量消息交换的优化。
本发明的另一个重要目的是提供一种高吞吐量和低延迟的消息交换系统,所述消息交换系统用于所述远程节点上运行的多个进程之间的进程间通信中。
本发明的又一个目的是提供一种更加经济的高吞吐量和低延迟的消息交换系统,所述消息交换系统用于所述远程节点上运行的进程之间的进程间通信中。
本发明的又一个目的是提供一种系统,所述系统通过为高吞吐量和低延迟的消息交换减少CPU干预而使用最少的计算资源并且使其更适合应用程序。
本发明的又一个目的是提供进程间消息交换系统,所述系统通过消除在远程主机接收消息所需的额外的接收器的需求,由此减少一个延迟引入组件,从而需要极少的基础设施支持。
本发明的又一个目的是减少实现进程间通信中的高吞吐量和低延迟消息传递技术所需的额外的消息复制数量。
发明方案
在介绍本发明的方法、系统和硬件实现之前,需要理解的是:本发明不仅限于所描述的特定的系统和方法,因为本发明可以有多个可能的实施方式而这些实施方式未在本公布中明确说明。还需要理解的是:所述说明书中使用的术语仅仅是为了描述特定的版本或实施方式,并不意味着限制本发明的范围,本发明的范围仅由附属的权利要求所限定。
本发明设想一种系统和方法,所述系统和方法用于远程节点上运行的进程之间的进程间通信中的低延迟和高吞吐量的消息交换。
在本发明较佳的实施方式中,所述系统使用随机直接内存访问(RDMA)技术,实现两个服务器主机之间的异步无锁的FIFO消息队列。所述进程间通信使用通过infiniband(无限带宽)动词库访问的RDMA写操作来实现,从而避免使用由操作系统提供的用于远程消息交换的,涉及较高的系统调用开销的TCP/IP方案。
相反,本发明的系统提供支持RDMA的网络接口卡(NIC)的直接访问而无需系统调用开销,这是实现非常低的延迟的消息交换的关键。所述RDMANIC将RDMA写操作转换为一系列RDMA协议消息而置TCP/IP于不顾,所述RDMA协议消息由所述RDMA NIC在远程主机上执行,并且对所述远程主机的内存进行必要的更新。
根据本发明的一种较佳的实施方式提供了一种系统,所述系统用于在至少两个节点上运行的至少两个进程之间的进程间通信中的无锁的远程消息交换,并且所述远程消息交换由支持RDMA的网络接口卡实现,所述网络接口卡配置成,同步位于各所述节点上的内存映射文件,所述系统包括:
a)发送主机节点,其与接收主机节点相互通信地耦合,用于分别通过计算
网络发送和接收消息;
b)支持RDMA的网络接口卡,其配置在各所述主机节点上,用于执行RDMA指令;
c)存储器,其位于各所述主机节点且适用于存储进程间消息,所述进程间消息由所述相互通信地耦合的主机节点中的任何一个所调用;
d)第一内存映射文件,其位于所述发送主机节点,且配置成,使消息的静态循环队列与位于所述接收主机节点的第二内存映射文件进行同步,反之亦然;及
e)至少一个远程发送方进程,其在所述发送主机节点上运行,且用于构成至少一个消息批量,并且异步发送所述批量和相应的RDMA工作请求,其中,所述批量的构成包括所述发送主机节点的操作状态和集合变量之间的协调,以确定所述批量中的消息的数量,其中,所述批量中的额外的消息的包含由预设的aclat参数进一步确定。
根据本发明的其他较佳的实施方式之一,提供一种内存映射结构,所述内存映射结构包含计算机可执行的程序代码,其中所述结构配置成,同发送主机节点和接收主机节点之间的消息的静态循环队列,所述结构包括:
a)多条消息,其捆绑在一起形成至少一个批量,各批量包括一系列有效载荷节,其中,各有效载荷节的后面间歇性地跟着相应的节点计数器结构,以构成连续的内存区域,其中,所述有效载荷节进一步与公用队列数据和连续设置的标头耦合;
b)RDMA自由指向元素,其适用于指向消息缓冲区,在所述消息缓冲区中所述发送主机节点插入新的消息;
c)RDMA插入计数器,其用于计数所述发送主机节点插入的消息的数量;
d)接收节点计数器结构元素,其响应所述接收主机节点,且配置成,允许所述接收主机节点发布一条RDMA工作请求,以确认所述批量中的至少一条消息;
e)所述公用队列数据的最后发送的消息节点指向元素,其用于指向从远程发送方进程发送到所述接收主机节点的最后一条消息的所述节点计数器结构;及
f)所述公用队列数据的最后接收的消息节点指向元素,其用于指向所述接收主机节点最后接收的消息。
在本发明其他实施方式之一中提供了一种方法,所述方法用于在至少一个发送和一个接收主机节点上运行的至少两个进程之间的进程间通信中的无锁的远程消息交换,并且所述方法由RDMA支持的网络接口卡实现,所述网络接口卡配置成,通过位于所述各节点上的内存映射文件同步消息的队列,所述方法包括:
a)每当接收到待由所述接收主机节点从消息缓冲区读取的所述消息的指示,开始从所述发送主机节点到相应的内存映射文件的消息的传输,并且相应地更新RDMA自由指向元素和RDMA插入计数器,以指示所述发送主机节点将下一条消息传输到所述消息缓冲区;
b)在远程发送方进程中执行至少一个消息批量的构成,其中,所述批量构成是基于所述发送主机节点的操作状态和集合变量之间的协调,以确定所述批量中消息的数量,其中,所述构成的批量中的下一条消息的包含由预设的aclat参数进一步确定。
c)更新所述构成的批量的批量大小,用于检测任何新消息的到来的前一个节点的节点计数器结构,和用于指向待由所述接收主机读取的所述消息批量中的最后一条消息的最后发送的消息指向元素;
d)发布RDMA工作请求,所述RDMA工作请求用于传输连续的消息缓冲区和所述消息批量;及
e)开始从所述内存映射文件传输消息到所述相应的接收主机节点,并且更新最后接收的消息指向元素和数据指向元素,以指示待由所述接收主机待读取的所述消息批量的到来。
附图说明
参照附图阅读将更好地理解上述发明内容和下述对较佳的实施方式的详细说明。为了说明本发明,在附图中示出本发明的示例性构成;然而,本发明并非仅限于公布的特定方法和系统。在附图中:
图1为背景技术中已知的内存映射文件的典型布局。
图2示出内存映射文件布局中表示的消息的循环序列;
图3为使用RDMA同步内存映射文件的两个服务器主机之间的进程间通信的系统;
图4为根据本发明的较佳的实施方式的内存映射文件的设计布局;
图5为根据本发明的一种较佳的实施方式系统的实现设置。
具体实施方式
现在详细讨论本发明的一些实施方式,所述实施方式说明本发明的所有特征。
单词“包括”、“具有”及“包含”及其他的形式,意味着意思相同,并且是开放性的,跟随任意一个这些词的一个或多个项目并不意味着这样一个或多个项目的详尽列表,或者并不意味着仅限于受所述列出的一个或多个项目。
还需要指出,此处或附属的权利要求中使用的单数形式“一”及“一个”包括复数引用除非上下文明确地另有规定。虽然在本发明的实施方式的实行和测试中可以使用与本发明描述的系统和方法相似或相同的任何系统和方法,现在描述较佳的系统和方法。
所述公布的实施方式仅仅是本发明的示例,本发明可以以各种形式体现。
定义:
吞吐量:每秒可以从队列中执行的读取消息的数量或者写操作的数量称为吞吐量。
延迟:从所述发送方进程发送消息至所述接收方进程接收该消息所经过的时间是该消息所经历的延迟。
RDMA写操作:RDMA写操作,可互换地称为RDMA写工作请求,是分配给所述支持RDMA的NIC的指令。它是用户级调用,用于通知所述本地NIC关于所述数据放置在RDMA寄存的内存(RAM)中的位置及其长度。然后所述NIC(异步地)获取所述数据并且使用相关的RDMA协议(iWARP,互联网广域RDMA协议)在网络上传输所述数据。实际上,RDMA写操作将特定的数据从本地内存位置写入远程主机上的内存位置。所述远程主机上的NIC通过将所述数据放置在其主机中的RDMA寄存的内存中响应所述iWARP消息,从而执行RDMA写工作请求。
通过infiniband动词库访问所述RDMA写操作。
内存注册:由RDMA所提供的API(应用程序接口),以使本地内存区域可用于远程主机。这对RDMA写操作的使用至关重要。
RDMA技术允许应用程序访问远程主机上的内存,就如同在运行所述应用程序的同一主机上能够访问内存一样。RDMA首先被引入使用本地Infiniband协议的Infiniband网络,随后使用iWARP的以太网上支持所述本地RDMA。在这两种网络中,所述网络接口卡(NIC)能够执行RDMA写指令,所述RDMA写指令能够将数据放置在所述远程主机的所述内存区域。尽管为了说明本发明,在后面的文件中有提到以太网,但本发明并不仅限于以太网并且能够在利用本地infiniband协议的infiniband网络上实现。RDMA接口允许应用程序从远程主机的内存(RAM)位置读取和/或在远程主机的内存(RAM)位置写入。这与发送和接收消息完全不同。所述RDMA接口给所述应用程序一种所述发送方和接收方进程之间共享内存的假象,尽管所述发送方和接收方进程在不同的主机上运行。
支持RDMA操作的NIC的设备驱动程序给应用程序提供直接接口以绕过所述操作系统发送数据。由于避免从用户模式切换到系统模式的较高的开销,因此允许所述CPU更有效地执行所述应用程序。此外,所述RDMANIC实现复杂的网络任务,所述网络任务要求在无需任何CPU介入的情况下将所述消息从所述本地主机传输到所述远程主机,使所述CPU更适用于应用程序。
本发明的另一个有利的特征是消除典型的系统调用的辅助通信中需求执行额外的复制操作的需要。对于RDMA写操作,所述NIC利用源数据进行直接内存访问传输,如同在用户模式下运行的应用程序可以直接将所述消息写入的寄存的内存区域,从而避免额外复制的需要。
此外,由于所述RDMA写操作全权负责使所述数据在运行所述接收方进程的所述远程主机的所述带寄存器的内存区域中可用,因此不需要单独的接收方进程从所述网络接收消息,从而有效地促使系统减少一个延迟引入组件。
如图1和2所示,内存映射文件的典型布局包括消息的静态循环队列。所述文件中的各消息结构具有标头节101和有效载荷节102。所述有效载荷节102包括所述应用程序传递的原始消息。它也被称为消息缓冲区。所述标头节101包括指向下一条消息头的指针,从而建立消息的循环序列。所述文件的起始部分包括所述序列的特定数据。下列是所述节中一些重要的变量:
●data_anchor103(数据_锚103)-指向待所述接收方读取的下一条消息。
●free_node104(自由_节点104)-指向待所述发送方写入的所述消息。
●number_of_inserts105(插入_数量105)-所述发送方发送的消息的数量(自队列创建起)。
●number_of_deletes106(删除_数量106)-所述接收方读取的消息的数量(自队列创建起)。
参照图2,额外的自由节点指针rdma_free_node201(随机直接内存访问_自由_节点201)和新的计数器变量rdma_inserts202(随机直接内存访问_插入202)已被引入,所述rdma_free_node201和rdma_inserts202将典型的消息结构分为两部分。从free_node104指向的消息直到rdma_free_node201指向的消息表示已被所述发送方进程存入队列,但还未被RDMA传输到远程主机(服务器B)的消息。从自由节点到data_anchor103的消息已经在传输到所述远程主机的途中(或已经到达),等待通过所述data_anchor指针的更新被所述接收方进程确认。
现在,参照图3,示出一种用于两个服务器主机之间的,使用RDMA同步内存映射文件的进程间通信的系统。根据本发明的一种较佳的实施方式,所述系统300包括:
●物理服务器301-这是运行发送方应用程序进程的主机。
●物理服务器302-这是运行接收方应用程序的主机。
●服务器301上的支持RDMA的网络接口卡NIC-该NIC能够执行来自本地或远程主机的RDMA指令。
●服务器302上的支持RDMA的网络接口卡-该NIC能够执行来自本地或远程主机的RDMA指令。
●消息库-该库包括消息发送和接收功能,所述发送和接收功能由所述发送方和接收方应用程序进程链接或调用。
●服务器301上的内存映射文件303-该内存映射文件包括FIFO队列,所述FIFO队列用于发送和接收消息。该内存映射文件与服务器302同步。
●服务器302上的内存映射文件304-该内存映射文件包括FIFO队列。所述FIFO队列用于发送和接收消息。该内存映射文件与服务器301同步。
●在服务器301上运行的远程发送方进程305-这是负责通过RDMA批处理输入消息的组件。它将从free_node104到rdma_free_node201的所有消息进行集合,并且为整个消息集合组发布RDMA工作请求。
●以太网或Infiniband交换机(可选)-该交换机链接服务器301和302。
参照图4,示出内存映射文件的设计布局。该图表示用于缓冲区头的单独的节,所述缓冲区头指向所述缓冲区的有效载荷区域。所述缓冲头在一个内存区域内被连续分配,并且所述有效载荷节的情况也是如此。还有队列公用的数据存储的区域。Data anchor103,free node pointer104,number_of_inserts105,number_of_deletes106是该公用队列数据401的所有的例子。在所述公用队列数据区域401中,还示出将所述free node pointer104和所述data anchor pointer103集合的结构。
此外,所述内存映射文件的所述公用队列数据包括两个变量free_node104和number_of_inserts105,所述free_node104和number_of_inserts105已经在单一的结构中组合在一起,用以消除延迟减少组件。这有助于在1RDMA写工作请求中发送所述整个结构,而不是在单独的工作请求中发送。这种结构现在被称为node_counter structure402(节点计数器结构402).
在所述远程发送方进程RS305发布的每个更新中具有两个工作请求。一个工作请求指向所述区域中的所述有效载荷区域。另一个工作请求指向所述node_counter structure。这些工作请求不能结合,因为一个工作请求仅可以指向一个内存的连续区域。为了将各更新所需的所述两个工作请求减少到一个请求,需要以不同的方式结合所述两组数据。
图4描述了优化的内存布局,其中所述node_counter structure402在每个消息的有效载荷节的末端被重复。因此现在可能将所述消息有效载荷与所述node_counter structure结合成一个工作请求,因为他们都在连续的内存区域。
在发送端新增加的变量和修改变量的新的含义如下:
●rdma_free_node-指向所述消息缓冲区,在所述消息缓冲区中所述发送方将插入下一条新的消息。
●rdma_inserts-自队列创建起所述发送方进程插入的消息的数量。
●node_counter.free_node(节点_计数器.自由_节点)-指向下一条消息开始,在此所述远程发送方进程将开始批处理消息,以作为一个RDMA写工作请求的一部分发送所述消息。
●node_counter.number_of_inserts(节点计数器.插入数量)-自创建队列起已更新到远程主机的消息的数量(通过RDMA写工作请求)。
此外,所述data_anchor和所述number_of_deletes可以在单一的结构中组合在一起。这有助于所述接收方进程在1RDMA写工作请求中发送所述整个结构,而不是在单独的工作请求中发送。这种结构现在被称为receiver_node_counterstructure(接收方_节点_计数器结构)。对所述接收方进程,receiver_node_counter.data_anchor(接收方_节点_计数器.数据_锚)与所述data_anchor功能相同,并且receiver_node_counter.number_deletes(接收方_节点_计数器.删除_数量)与所述number_of_deletes功能相同。
下文示出通过引入为建立低延迟高消息吞吐量而新增加的变量实现的优化,其中,通过使用远程发送方进程305将RDMA工作请求的数量减少至一个。
所述发送方进程的所述修改的算法如下:
循环
a.如果rdma_free_node的下一个更新等于data_anchor,继续检查否则进行下一步
b.将所述消息从用户缓冲区复制到所述本地内存映射文件
c.更新所述rdma_free_node以指向下一个数据缓冲区
d.增加rdma_inserts计数器
这次所述发送方进程未发布任何RDMA工作请求,因为现在这项工作将由所述远程发送方进程(RS)完成。
用于所述远程发送方进程的算法如下:
因此用于所述远程发送方的新优化方式如下:
1.在远程主机302中寄存本地内存映射文件,并且执行下列操作:
a.如果rdma_free_node等于free_node并且rdma_inserts等于number_of_inserts,继续检查否则进行下一步
b.Node_var(节点_变量)=free_node
c.Prev_node=NULL(前一个_节点=空)
d.将message_group(消息_组)初始化为空
e.将group_size(组_大小)初始化为0
f.当Node_var不等于rdma_free_node时
i.将节点指向的所述消息加入到所述message_group
ii.增加group_size
iii.Prev_node=node_var
iv.Node_var=next node(下一个节点)
g.将group_size和number_of_inserts加入到last_message_node_counter_pointer(最后的_消息_节点_计数器_指针)和prev_node指向的节点的node_counter结构
h.更新free_node(在last_message_node_counter_pointer和prev_node指向的节点的所述node_counter结构中),以指向紧挨着message_group中最后一条消息的所述消息缓冲区
i.last_message_node_counter_pointer=prev_node
j.检查前面的RDMA工作请求的状态,如果完成其中任何一个,清除所述RDMA工作请求
k.为message_group中消息的所述有效载荷节发布1RDMA工作请求
其中,队列中所述第一个节点的所述变量“last_message_node_counter_pointer”被引入到所述公用队列数据区域。这个变量指向最后发送到所述远程服务器B的所述最后一条消息的所述node_counter结构。在示例中,所述变量将指向上图中node_counter所属的消息节点A。这在队列创建期间完成,并且data_anchor,rdma_free_node和node_counter.free_node的情况类似,与前面实现的情况一样,他们在队列创建期间指向消息节点A。与前面实现的情况一样,在队列创建期间,在所有的所述消息节点中的所述计数器node_counter.no_of_inserts(节点_计数器.插入_数量)和在所述公用数据区域中的no_of_deletes(删除_数量)被初始化为0。此初始化过程之前未明确提及。为方便起见,现在提及。
队列中所述第一个节点的所述变量“last_received_message_node_counter_pointer(最后_接收的_消息_节点_计数器_指针)”被引入所述公用队列数据区域。这个变量指向所述远程服务器A最后接收的最后一条消息的node_counter结构。
所述接收方进程的优化算法如下:
1.在远程主机(服务器A)中寄存所述本地内存映射文件并且执行下列操作:
a.检查前面的RDMA工作请求的状态,如果完成其中任何一个,删除所述RDMA工作请求
b.如果最后接收到的message_node_counter_pointer.free_node等于data_anchor,继续检查,否则进行下一步
c.将消息从本地内存映射文件复制到用户缓冲区
d.last_received_message_node_counter_pointer=data_anchor
e.将所述receiver_node_counter.data_anchor指针更新到下一个数据缓冲区
f.对receiver_node_counter.number of deletes计数器加一
g.发布1RDMA工作请求,用于更新所述receiver_node_counter结构
以上采用的方法通过将所述变量number_of_inserts和free_node指针组合成单一的结构并且将所述节点计数器结构间歇地放置在各有效载荷节后,将所述远程发送方进程305中工作请求的数量减少至一个。系统性能的决定因素可能是支持RDMA的NIC每秒可以执行的工作请求的最大数量。考虑到这一点,应该保证每个更新的工作请求的数量是最优化的。通过在如前面的优化过程中批处理所述消息和组合变量,到一个更新的工作请求的数量已经减少。
发明工作的示例
在下面给出的例子中描述本发明,所述例子只用作说明本发明,因此不被解释为限制本发明的范围。
参照图4,假定所述远程发送方进程305已批处理了3条消息C,D和E,并且希望使用RDMA更新所述远程主机302端。所述批处理中待更新的所述内存区域在附图中有标注。应注意的是,这个内存区域将包括消息B,C,D和E.的所述node_counter结构。同样值得注意的是,需要更新的node_counter结构仅是附着到消息B和E有效载荷的node_counter结构。原因如下:
●附着到B的Node_counter结构:优先于消息C,D和E,从所述远程发送方发送到所述接收方的所述最后一条消息是B。作为所述最后一条消息的一部分,B的所述node_counter结构同样被更新。因此所述接收方将检查附着到B的所述node_counter结构中的所述free_node指针,以确定是否有新消息输入。
●附着到E的Node_counter结构:一旦所述批处理更新到所述远程,并且所述消息C,D和E由所述接收方读取,所述接收方检查附着到E的有效载荷的所述node_counter结构,以了解没有进一步的消息。只有从所述远程发送方的下一个批处理的更新,将更新C中的所述node_counter结构,以表明有更多的消息插入到所述队列。
通过增加所述远程发送方进程组合的消息的数量实现的优化
下文解释的是,通过增加所述远程发送方进程305组合的消息的数量实现的优化级别。在所有上述讨论的优化方法中,可以证明的是组合的消息的数量不是很显著。实际上,所述远程发送方进程发送的消息的组的平均大小小于2。因此,可以理解的是,需要更多的消息加入到所述组,以获得高效的消息传输。如果所述远程发送方进程305无限期地等待更多的消息,将会增加消息的延迟。因此需要有多少条消息可以组合在一起的上界。为本发明的进一步参考,所述上界被称为上限。然而,所述远程发送方进程305不必等待整个上限数量的消息以组成消息组来发送。还应该理解的是不能保证消息什么时候到达。因此,除了所述上限,可以有一些更多的指标,以决定是否继续组合消息(此处称为“集合(bulking)”)。
考虑所述发送方进程在对消息进行列队的情况。在这种情况下,它对于所述远程发送方进程305等待需集合的下一条消息而言是很好的指标。相反,在所述发送方进程不在对消息进行列队的情况下,几乎没有理由让所述远程发送方进程305等待需要加入到组的另一条消息。然而,如果所述应用程序愿意忍受少许的延迟,(在此称为aclat),即使现在所述发送方并不在对消息进行列队,所述远程发送方进程可以等待aclat纳秒,以等待来自所述发送方进程的下一条需加入到所述组的消息。
为实现这个想法,所述发送方进程保留一种变量指标,称为write_on(写入),以检查是否所述发送方进程正在所述队列中列入消息。它被声明为易失的。另外,要实现的是用户可配置的aclat参数,如果所述发送方进程目前并不在发送消息,所述用户可配置的aclat参数将告知所述远程发送方进程305需要等待下一条用于组合的消息多久。
在上述讨论的情况下,修改后的发送方进程详述如下:
a)Write_on=1
b)如果rdma_free_node的下一个更新等于data_anchor,继续检查,否则进行下一步
c)将所述消息从用户缓冲区复制到所述本地内存映射文件
d)更新所述rdma_free_node,以指向下一个数据缓冲区
e)对data_inserts计数器加一
f)Write_on=0
所述远程发送方进程305随着变化的场景也在被修改。然而,增加一些新的变量以实现所述的优化:
a.缓冲变量:引入此变量以控制所述消息的组合并且指示何时可以停止所述组合(集合)。
b.nc-这是临时变量,用于在所述发送方进程目前不发送消息的情况下控制为组合消息的等待。
基于所述新增加的变量所述修改的远程发送方进程305如下:
1)在远程主机(服务器B)中寄存所述本地内存映射文件并且执行下列操作:
a.如果所述rdma_free_node等于free_node并且rdma_inserts等于所述number_of_inserts,继续检查,否则进行下一步
b.Node_var=free_node
c.Prev_node=NULL
d.将message_group初始化为空
e.将group_size初始化为0
f.缓冲变量可用=1
g.当缓冲变量可用时
i.如果node_var等于rdma_free_node
1.如果write_on==0,退出最内层循环
2.等到node_var等于rdma_free_node且write_on==1
3.如果node_var仍然等于rdma_free_node
a.nc=0;
b.init time=time_stamp
c.当nc=0时
I.curr time=time_stamp(当前时间=时间戳)
II.diff_time=curr time-init time(时间差=当前时间-初始时间)
III.如果node_var不等于rdma_free_node,nc=1否则,
IV.如果diff_time>aclat,nc=2
d.如果nc==2,退出最内层循环
ii.将节点指向的所述消息加入到所述message_group
iii.增加group_size
iv.Prev_node=node_var(前一个节点=节点变量)
v.Node_var=下一个节点
vi.如果group_size>up-limit,缓冲变量=0
h.将group_size和number_of_inserts加入到last_message_node_counter_pointer和prev_node指向的节点的所述node_counter结构
i.更新free_node(在last_message_node_counter_pointer和prev_node指向的节点的所述node_counter结构中),以指向紧挨着message_group中最后一条消息的所述消息缓冲区
j.last_message_node_counter_pointer=prev_node
k.检查前面的RDMA工作请求的状态,如果完成其中任何一个,清除所述RDMA工作请求
l.为所述message_group中消息的有效载荷节发布1RDMA工作请求
在上述修改的进程中,所述远程发送方进程305首先等待待所述发送方进程插入的至少一条消息,这与前面的优化方式类似。此时,两者之间的差异在于,当检测到所述第一条消息且所述循环开始组合消息时的循环。
所述组合循环修改的功能如下:
首先检查是否有新消息已到达。如果有新消息到达,如以前,将新消息加入到所述组。否则,检查是否所述发送方正在对新消息进行列队。这通过由所述发送方进程更新的write_on变量来推动。如果所述发送方确实在对消息进行列队,则等待新消息被插入并且如以前一样将新消息加入到所述组。如果所述发送方没有在添加新消息,则等待相当于旋转循环中由管理员配置的aclat参数指定的时间。在所述等待旋转循环中,如果有新消息插入,则退出所述旋转循环并且如以前一样将所述新消息加入到所述组。如果超出aclat指定的时间周期而新消息仍未到达,停止消息的组合。
当通过改变所述内存布局进一步减少工作请求时,实现下一级的优化。这通过在所述接收方进程中将消息批量的工作请求的数量减少至一来实现。在所有前面的优化方法中,在所述远程发送方进程305中工作请求的数量减少,而所述接收方进程依然对每一个收到的消息发布1个工作请求。因此,在这一点上,对所述发送方是瓶颈,因为它每秒发布最大数量的工作请求。为了提高性能,显然,所述发送方应该发布更少的工作请求。稍微考虑将明白所述接收方对来自所述远程发送方的当前接收的消息组中的最后一条消息,发布确认工作请求是值得考虑的。
然而,这样做而意识到的缺点是所述确认将稍晚到达所述发送方。
通过下列考虑事项可以补偿所述缺点:
当所述工作请求实际上由所述NIC执行时,将最新更新到所述receiver_node_counter的消息发送到所述发送方主机(服务器A),这与实际发布所述工作请求时相反。
如果所述接收方进程中的工作请求的减少导致所述吞吐量提高,所述确认到达所述发送方主机的速度再次比预想的速度快。因此,为更好的优化,对所述接收方进程的进一步的修改如下:
1)在远程主机(服务器B)中寄存所述本地内存映射文件并且执行下列操作:
a)检查前面的RDMA工作请求的状态,如果完成其中任何一个,清除所述RDMA工作请求
b)如果last_received_message_node_counter_pointer.free_node等于data_anchor,继续检查,否则进行下一步
c)将消息从本地内存映射文件复制到用户缓冲器
d)last_received_message_node_counter_pointer=data_anchor
e)将所述数据锚指针更新到下一个数据缓冲区
f)对number_of_deletes计数器加一
g)如果当前读取的消息是通过所述远程发送方进程发送的所述消息组中的最后一条消息
a.发布一个RDMA工作请求,用于更新所述receiver_node_counter结构
此外,下列成批消息交换API适用于release_reserve_read_bulk(释放_预留_读取_批量)和release_reserve_write_bulk(释放_预留_写_批量)功能中的RDMA写工作请求
●reserve_read_bulk(&no_of_messages)(&数量_消息)-更新变量no_of_messages,以指示可用于读取的自由缓冲区的数量。
●release_reserve_read_bulk(num)-将下一个“num”消息标记为已读。
●reserve_write_bulk(&no_of_messages)-更新变量no_of_messages,以指示可用于写的自由缓冲区的数量。
●release_reserve_write_bulk(num)-将下一个“num”消息标记为可读。
当在具有某些变化的以下规格的不同的基础设施上执行时,可以实现每秒550万消息的吞吐量。
基础设施的规格:
●2个节点(服务器1和服务器2)各具有在3.07GHz运行的6个内核英特尔X5675。
●12MB的共享缓存
●24GB的内存
●具有40Gbps带宽和支持RDMA的Infiniband的网络
●Mellanox公司的-240Gb/s的InfiniBand夹层卡
●Mellanox公司的M3601Q36端口40Gb/s的InfiniBand交换机
上述基础设施的变化为:
a)保持最大队列大小1000
b)保持上限到40%
c)设置aclat为10纳秒
参照图5,为给定(上述)规格的所述基础设施设置延迟测试,以验证利用如下修改的处理流程实现的优化等级:
到目前为止,所述测量结果只关注吞吐量测试结果,其中仅消息交换率是关注点。因此,设计新的测试,测量延迟和吞吐量测试结果。在这个测试中,所述发送方和接收方进程在相同的主机(服务器1)上运行。在所述远程主机(服务器2)上运行回路进程,所述远程主机单纯地从发送方进程接收所述消息并且将所述消息发送到所述接收方进程。所述接收方进程接收所述消息,并计算延迟和吞吐量。对于延迟计算,就在发送之前,所述发送方进程将时间戳A记录到所述消息中。当所述消息到达所述接收方进程时,所述消息获得时间戳B。B-A的时间差用于计算延迟,平均值根据几个采样计算。
为这个测试配置的队列参数为:
●保持最大队列大小1000
●保持上限到40%
●设置aclat为10纳秒
在这个测试中,所述接收方进程记录每秒3.25条消息的吞吐量和34微秒的平均往返延迟。因此,使用所述修改的方法,实现每秒大于1百万条的消息和只有次级100微秒的延迟。
参照本发明的各种实施方式已呈现前面的描述。本发明所属技术领域的专业人员将认识到,在不脱离本发明的原则、精神和范围的情况下,可以对本发明所描述的结构和操作方法进行替换和改变。

Claims (21)

1.一种用于在至少两个节点上运行的至少两个进程之间的进程间通信中的无锁的远程消息交换的系统,所述远程消息交换由支持RDMA的网络接口卡实现,所述网络接口卡配置成,同步位于各所述节点上的内存映射文件,所述系统包括:
a.发送主机节点与接收主机节点,所述发送主机节点与所述接收主机节点相互通信地耦合,用于分别通过计算网络发送和接收消息;
b.支持RDMA的网络接口卡,其被配备在所述发送主机节点与所述接收主机节点中的每个上,用于执行RDMA指令;
c.存储器,其位于所述发送主机节点与所述接收主机节点中的每个上,且适用于存储进程间消息,所述进程间消息被所述相互通信地耦合的所述发送主机节点与所述接收主机节点中的任何一个所调用;
d.第一内存映射文件,其位于所述发送主机节点,且配置成,将消息的静态循环队列同步到位于所述接收主机节点的第二内存映射文件,且所述第二内存映射文件配置成将消息的静态循环队列同步到所述第一内存映射文件;及
e.至少一个远程发送方进程,其在所述发送主机节点上运行,且构成至少一个消息批量,并且异步发送所述批量和相应的RDMA工作请求,其中,所述消息批量的构成包括所述发送主机节点的操作状态和集合变量之间的协调,以确定所述批量中的消息的数量,其中,在所述批量中的额外的消息的列入由预设的aclat参数进一步确定。
2.如权利要求1所述的系统,其中,在使用互联网的广域RDMA协议的以太网上或无限带宽网络上支持所述RDMA,以连接所述发送主机节点和所述接收主机节点。
3.如权利要求1所述的系统,其中,所述支持RDMA的网络接口卡提供用于在接收或远程主机节点上的直接内存访问的直接接口。
4.如权利要求1所述的系统,其中,所述内存映射文件包括所述发送主机节点和所述接收主机节点之间的消息的静态循环队列。
5.如权利要求1所述的系统,其中,所述内存映射文件包括:有效载荷节的序列,其中各有效载荷间歇性地由相应的节点计数器元素跟随,以构成连续的内存区域,并且所述有效载荷与公用队列数据和连续设置的标头耦合;RDMA自由指向元素,其指向消息缓冲区,在所述消息缓冲区中所述发送主机节点插入新的消息;RDMA插入计数器,其计数远程发送方进程插入的消息的数量;最后发送的消息节点指向元素,其指向从所述远程发送方进程发送到所述接收主机节点的最后一条消息;及最后接收的消息节点指向元素,其指向所述接收主机节点接收的最后一条消息。
6.如权利要求5所述的系统,其中,所述公用队列数据包括:数据指向元素,其适用于指向待由所述接收主机节点接收的下一条消息;自由指向元素,其适用于指向在所述发送主机节点上运行的所述远程发送方进程所写的消息;插入计数器,其用于计数所述发送主机节点发送的消息的数量;删除计数器,其用于计数从队列创建起所述接收主机节点读取的消息的数量;最后发送的消息节点指向元素;及最后接收的消息节点指向元素。
7.如权利要求6所述的系统,其中,所述内存映射文件的布局优化成,形成连续的内存区域,所述连续的内存区域适用于批处理多条消息并且组合所述公用队列数据,从而将RDMA工作请求的数量减少至一个。
8.如权利要求1所述的系统,其中,位于所述发送主机节点上的所述远程发送方进程,更新用于在所述循环队列中插入额外消息的所述节点计数器元素,使所述接收主机节点能够对其进行访问。
9.如权利要求1所述的系统,其中,所述发送主机节点的操作状态是指二进制状态,其中所述二进制状态对应于对一条或多条消息进行列队的繁忙状态或空闲状态,所述二进制状态由称为写入的变量指标进一步指示。
10.如权利要求1所述的系统,其中,当所述操作状态是繁忙时,所述发送主机节点触发所述集合变量指示所述远程发送方进程等待下一条消息列入所述至少一个消息批量中。
11.如权利要求1所述的系统,其中,当所述操作状态是空闲时,所述发送主机节点触发所述集合变量指示所述远程发送方进程为待列入所述至少一个消息批量中的下一条消息等待预设的aclat参数。
12.一种用于在至少一个发送主机节点和一个接收主机节点上运行的至少两个进程之间的进程间通信中的无锁的远程消息交换的方法,所述远程消息交换由支持RDMA的网络接口卡实现,所述网络接口卡配置成,通过位于所述发送主机节点和所述接收主机节点中的每个上的内存映射文件同步消息的队列,所述方法包括:
a.每当接收到待由所述接收主机节点从消息缓冲区读取的消息的指示,开始从所述发送主机节点传输消息到所述内存映射文件,并且相应地更新RDMA自由指向元素和RDMA插入计数器,以指示所述发送主机节点将下一条消息传输到所述消息缓冲区;
b.在远程发送方进程中执行至少一个消息批量的构成,其中,所述批量的构成是基于所述发送主机节点的操作状态和集合变量之间的协调,以确定所述批量中消息的数量,其中,构成的所述批量中的下一条消息的包含由预设的aclat参数进一步确定;
c.更新构成的所述批量的批量大小、用于检测任何新消息的到来的前一个节点的节点计数器结构、和用于指向待由所述接收主机读取的所述消息批量中的最后一条消息的最后发送的消息指向元素;
d.发布RDMA工作请求,所述RDMA工作请求用于传输与所述消息批量关联的连续的消息缓冲区;及
e.开始从所述内存映射文件传输所述消息批量到所述接收主机节点,并且更新最后接收的消息指向元素和数据指向元素,以指示待由所述接收主机读取的所述消息批量的到来。
13.如权利要求12所述的方法,其中,所述发送主机节点的所述内存映射文件优先寄存于所述接收主机节点,且所述接收主机节点的所述内存映射文件优先寄存于所述发送主机节点。
14.如权利要求12所述的方法,其中,所述发送主机节点的操作状态是指二进制状态,其中所述二进制状态对应于对一条或多条消息进行列队的繁忙状态或空闲状态,所述二进制状态由称为写入的变量指标进一步指示。
15.如权利要求12所述的方法,其中,所述RDMA自由指向元素适用于指向所述消息缓冲区,在所述消息缓冲区中所述发送主机节点插入新的消息。
16.如权利要求12所述的方法,其中,所述RDMA插入计数器计数所述发送主机节点插入的消息的数量。
17.如权利要求12所述的方法,其中,所述远程发送方进程的所述集合变量确定所述批量的消息的数量,并且指示批处理何时将终止。
18.如权利要求12所述的方法,其中,所述aclat参数是用户可配置的,用于指示所述远程发送方进程需要为从所述发送方进程待添加到所述批量的下一条消息等待多久。
19.如权利要求12所述的方法,其中,在所述发送主机节点的操作状态报告为繁忙的任何时候,所述远程发送方进程为将消息列入所述批量而等待。
20.如权利要求12所述的方法,其中,在所述发送主机节点的操作状态报告为空闲的任何时候,所述远程发送方进程为所述批量的消息的列入等待预设的aclat参数。
21.如权利要求12所述的方法,其中,所述前一个节点的节点结构是指从所述远程发送方进程发送到所述接收主机节点的最后一条消息的节点结构。
CN201110461040.2A 2011-06-15 2011-12-29 低延迟先进先出消息交换系统 Active CN102831018B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN1745MU2011 2011-06-15
IN1745/MUM/2011 2011-06-15

Publications (2)

Publication Number Publication Date
CN102831018A CN102831018A (zh) 2012-12-19
CN102831018B true CN102831018B (zh) 2015-06-24

Family

ID=47334167

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110461040.2A Active CN102831018B (zh) 2011-06-15 2011-12-29 低延迟先进先出消息交换系统

Country Status (2)

Country Link
CN (1) CN102831018B (zh)
AU (2) AU2011265444B2 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104424105B (zh) * 2013-08-26 2017-08-25 华为技术有限公司 一种内存数据的读写处理方法和装置
IN2013MU03527A (zh) * 2013-11-08 2015-07-31 Tata Consultancy Services Ltd
IN2013MU03528A (zh) * 2013-11-08 2015-07-31 Tata Consultancy Services Ltd
EP3155531A4 (en) * 2014-06-10 2018-01-31 Hewlett-Packard Enterprise Development LP Replicating data using remote direct memory access (rdma)
US10146721B2 (en) * 2016-02-24 2018-12-04 Mellanox Technologies, Ltd. Remote host management over a network
CN105786624B (zh) * 2016-04-01 2019-06-25 浪潮电子信息产业股份有限公司 一种基于redis与RDMA技术的调度平台
CN107819734A (zh) * 2016-09-14 2018-03-20 上海福赛特机器人有限公司 一种基于网络套接字的程序间通讯方法及通讯系统
US10587535B2 (en) 2017-02-22 2020-03-10 Mellanox Technologies, Ltd. Adding a network port to a network interface card via NC-SI embedded CPU
CN109002381B (zh) * 2018-06-29 2022-01-18 Oppo(重庆)智能科技有限公司 进程通信监控方法、电子装置及计算机可读存储介质
WO2023040683A1 (zh) * 2021-09-17 2023-03-23 华为技术有限公司 传输数据的方法和输入输出设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1722732A (zh) * 2004-07-16 2006-01-18 国际商业机器公司 节点之间进行通信的方法及系统
US7093147B2 (en) * 2003-04-25 2006-08-15 Hewlett-Packard Development Company, L.P. Dynamically selecting processor cores for overall power efficiency
CN101577716A (zh) * 2009-06-10 2009-11-11 中国科学院计算技术研究所 基于InfiniBand网络的分布式存储方法和系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8700724B2 (en) * 2002-08-19 2014-04-15 Broadcom Corporation System and method for transferring data over a remote direct memory access (RDMA) network
US20060075067A1 (en) * 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access with striping over an unreliable datagram transport
US7613813B2 (en) * 2004-09-10 2009-11-03 Cavium Networks, Inc. Method and apparatus for reducing host overhead in a socket server implementation
US7584327B2 (en) * 2005-12-30 2009-09-01 Intel Corporation Method and system for proximity caching in a multiple-core system
US7996583B2 (en) * 2006-08-31 2011-08-09 Cisco Technology, Inc. Multiple context single logic virtual host channel adapter supporting multiple transport protocols
US7949815B2 (en) * 2006-09-27 2011-05-24 Intel Corporation Virtual heterogeneous channel for message passing
US20090083392A1 (en) * 2007-09-25 2009-03-26 Sun Microsystems, Inc. Simple, efficient rdma mechanism

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7093147B2 (en) * 2003-04-25 2006-08-15 Hewlett-Packard Development Company, L.P. Dynamically selecting processor cores for overall power efficiency
CN1722732A (zh) * 2004-07-16 2006-01-18 国际商业机器公司 节点之间进行通信的方法及系统
CN101577716A (zh) * 2009-06-10 2009-11-11 中国科学院计算技术研究所 基于InfiniBand网络的分布式存储方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《基于InfiniBand的存储系统目标模拟器》;李小利等;《计算机工程与科学》;20080315;全文 *

Also Published As

Publication number Publication date
AU2016201513B2 (en) 2017-10-05
AU2016201513A1 (en) 2016-03-24
CN102831018A (zh) 2012-12-19
AU2011265444B2 (en) 2015-12-10
AU2011265444A1 (en) 2013-01-10

Similar Documents

Publication Publication Date Title
CN102831018B (zh) 低延迟先进先出消息交换系统
Liu et al. Design and evaluation of an rdma-aware data shuffling operator for parallel database systems
US8296490B2 (en) Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system
US7788334B2 (en) Multiple node remote messaging
CN108268208A (zh) 一种基于rdma的分布式内存文件系统
EP1289221A2 (en) Network communication method and system
Yi et al. Gpunfv: a gpu-accelerated nfv system
Laufer et al. Climb: Enabling network function composition with click middleboxes
US20200169616A1 (en) Method and system for synchronizing publication and subscription of message queues
WO2010105013A1 (en) Scalable interface for connecting multiple computer systems which performs parallel mpi header matching
CN102299843B (zh) 一种基于gpu和缓冲区的网络数据处理方法及系统
CN110535811B (zh) 远端内存管理方法及系统、服务端、客户端、存储介质
CN111211999A (zh) 一种基于ovs的实时虚拟网络的实现方法
US7552232B2 (en) Speculative method and system for rapid data communications
CN111459417A (zh) 一种面向NVMeoF存储网络的无锁传输方法及系统
CN102571580A (zh) 数据接收方法和计算机
CN102184157B (zh) 一种基于双处理器协作的信息显示装置
Yu et al. High performance and reliable NIC-based multicast over Myrinet/GM-2
Mamidala et al. Efficient SMP-aware MPI-level broadcast over InfiniBand's hardware multicast
CN107247631B (zh) 通用的gpon-olt系统板间通信中间件系统
EP1217517A1 (en) Synchronizing calls in a server and client system
US20070288646A1 (en) Communication interface device and communication method
WO2001016742A2 (en) Network shared memory
CN114186163A (zh) 一种应用层网络数据缓存方法
US11397625B2 (en) Lock manager for multi-core architectures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant