CN104639596A - 用于使用rdma的低等待时间fifo消息收发中支持多个发送器的系统和方法 - Google Patents
用于使用rdma的低等待时间fifo消息收发中支持多个发送器的系统和方法 Download PDFInfo
- Publication number
- CN104639596A CN104639596A CN201410035289.0A CN201410035289A CN104639596A CN 104639596 A CN104639596 A CN 104639596A CN 201410035289 A CN201410035289 A CN 201410035289A CN 104639596 A CN104639596 A CN 104639596A
- Authority
- CN
- China
- Prior art keywords
- message
- subqueue
- fifo
- node
- transmitter
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5682—Policies or rules for updating, deleting or replacing the stored data
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Mobile Radio Communication Systems (AREA)
- Communication Control (AREA)
Abstract
本发明公开一种用于使用RDMA的低等待时间FIFO消息收发中支持多个发送器的系统和方法。描述了用于在具有低等待时间和高吞吐量的进程间通信中、在多个发送器和至少一个接收器之间使用远程直接内存访问(RDMA)通过无限带宽verbs库来传送和接收多个消息的系统。该系统包括允许无锁方式的消息收发的消息队列库、启用RDMA的网络接口卡和基于RDMA的远程发送器进程以便同步子队列。传送系统将每个远程发送器进程映射到宿主节点的先进先出(FIFO)子队列和接收节点的相应FIFO子队列,将每个用户指派给子队列,接收消息并在每个用户的FIFO子队列中排列信息,并且将来自宿主节点的每个FIFO子队列的消息传送给接收器节点的相应FIFO子队列。接收系统接收消息并在每个用户的FIFO子队列中排列,并且在FIFO模式中通过循环技术从每个FIFO子队列读取消息。
Description
技术领域
本文描述的本主题通常涉及消息收发系统,且尤其涉及用于在使用RDMA的低等待时间消息收发中支持多个发送器的系统。
背景技术
消息收发系统的重要方面是消息的等待时间和吞吐量。随着网络速度的稳步提升,现在期望消息收发系统在几微秒内在多个发布器和订阅器之间传递数百万的消息。迄今为止所使用的各种消息收发系统都带有锁定机制,且忍受缓慢的处理速度。除此之外,它们仅仅支持从单个发送器到单个接收器的消息收发。
现有技术中的进程之一公开了,用于数据中心的消息收发应用中的消息总线提供通信机制,以便提供具有高吞吐量的低等待时间消息收发。然而,这种应用提供从单个发送器向单个接收器发送消息的机制,且不存在对多个发送器在无需知道其他发送器的存在的情况下同时发送消息的支持。
进一步,另一应用公开在公布节点和订阅器节点之间的动态订阅和消息路由,其中,在多个节点中,通过总线将订阅模块、公布模块和其他模块耦合在一起。尽管这种方法使用多个队列,但它不能提供无锁机制以及多个发送器同时向队列写入的解决方案。
现有技术中的进程之一公开用于低等待时间消息收发系统的无锁机制,其中,在队列中提供存储缓冲器,以便存储和检索由自由指针元件指向的消息。来自队列的存储缓冲器在循环链表中相互链接,且据此读取消息。然而,该方案不提供用于支持多个发布器的任何装置。
另一现有技术进程提供用于实现使用用于远程消息收发的RDMA技术的消息收发软件的系统和方法。但是它不提供对多个发布器的任何支持。因而现有技术进程无法以无缝方式提供多发布器支持。现有技术方法中,消息被存储 在队列中,多个发布器向队列写入,且当写入器中的一个正在向队列写入时,其他写入器被锁定以免写入。一旦第一写入器完成其写入,在此之后另一写入器可以向队列写入。这阻碍了消息收发系统的速度和性能。因此,有必要增强消息收发的速度而不管同时向系统写入的发布器的数量。
发明内容
提供本发明内容以便介绍与用于在进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法相关的多个方面,以及下面在具体实施方式中进一步描述的多个方面。本发明内容不旨在标识所要求保护的主题的必要特征,也不旨在用于确定或限制所要求保护的主题的范围。
在一种实现中,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的系统。该系统包括处理器、耦合到处理器的网络接口卡(NIC)、消息收发库以及存储器,其中,网络接口卡启用远程直接内存访问(RDMA)以便发送消息,消息收发库包括一个或多个消息发送和消息接收函数,这些消息发送和消息接收函数以无锁方式同时允许多个消息收发。其中,存储器被耦合到处理器。处理器能够执行被存储在存储器中的多个模块。所述多个模块进一步包括组织模块、映射模块和传送模块。映射模块被配置为将每个远程发送器进程映射到与宿主节点相关联的每个FIFO子队列,并通过使用一个或多个存储器映射文件,将远程发送器进程中的每一个和与接收节点相关联的相应FIFO子队列映射起来。组织模块被配置为从与宿主节点相关联的至少一个用户接收消息,并将从用户接收到的消息排列在与宿主节点相关联的一个或多个先进先出(FIFO)子队列中,其中,FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。传送模块被配置为使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应FIFO子队列。
在一种实现中,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的系统。该系统包括处理器、耦合到处理器的网络接口卡(NIC)、消息收发库和耦合到处理器的存储器,其中,网络接口卡启用远程直接内存访问(RDMA)以便接收消息,其中,消息收发库包括一个或多个消息发送和消息接收函数,这些消息发送和消息接收函数以无锁方式同时允许多个消息收发。处理器能够执行被存储在存储器中的多个模块。多个模块包括检索模块和 读取模块。检索模块被配置为接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,并将这样接收的消息排列在先进先出(FIFO)子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。读取模块被配置为通过在FIFO模式中使用循环技术从FIFO子队列中的每一个读取多个消息。
在一种实现中,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法。该方法包括执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数,并使用远程直接内存访问(RDMA)来传送多个用户消息。传送进一步包括将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件,将远程发送器进程中的每一个和与接收节点相关联的相应FIFO子队列映射起来。该方法进一步包括从至少一个用户接收消息,并将从至少一个用户这样接收的消息排列在与宿主节点相关联的先进先出(FIFO)子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。该方法进一步包括使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应FIFO子队列。借助于处理器执行排列、映射和传送的方法步骤。
在一种实现中,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法。该方法包括执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数,以及使用远程直接内存访问(RDMA)来接收多个用户消息。接收消息的方法进一步包括接收从具有至少一个用户的一个或多个宿主节点传送的多个消息并将这样接收的消息排列在先进先出(FIFO)子队列中,其中,FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。该方法进一步包括通过在FIFO模式中使用循环技术从FIFO子队列中的每一个读取多个消息。借助于处理器执行接收、排列和读取的方法步骤。
附图说明
参考附图描述具体实施方式。附图中,附图标记最左边数字标识首次出现该附图标记的附图。贯穿附图,使用相同的数字来指示相似的特征和组件。
图1示出根据本主题的实施方式用于在所示出的进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的系统的网络实现。
图2示出根据本主题的实施方式用于传送主宿在至少一个宿主节点上的多个消息的系统。
图3示出根据本主题的实施方式用于接收主宿在至少一个宿主节点上的多个消息的系统。
图4示出根据本主题的示例性实施方式用于传送和接收主宿在至少一个宿主节点上的多个消息的本发明的实现的配置1。
图5示出根据本主题的示例性实施方式用于传送和接收主宿在至少一个宿主节点上的多个消息的本发明的实现的配置2。
图6示出本发明中所使用的队列和子队列的结构。
图7示出根据本主题的实施方式用于传送主宿在至少一个宿主节点上的多个消息的方法。
图8示出根据本主题的实施方式用于接收主宿在至少一个宿主节点上的多个消息的方法。
图9示出用于多发布器吞吐量测试的测试设置。
图10示出用于多发布器吞吐量测试结果的最大吞吐量统计。
图11示出用于多发布器等待时间测试的测试设置。
图12示出用于多个发布器的平均往返等待时间统计的测试结果。
图13示出在无限带宽(InfiniBand)上使用RDMA的多个发布器的不同吞吐量率下的平均往返等待时间统计。
具体实施方式
公开了用于在进程间通信中传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法。本发明的系统和方法提供对多发布器同时向异步无锁消息队列写入的支持,本发明的系统和方法使用RDMA技术来将其远程订阅器连接到发布器。用于由多发布器的无锁消息收发的本系统和方法的实现机制包括通过收发系统内部地以无缝方式消息向每个发布器指派专用的子队列,无缝方式不需要手动干预来向所有发布器给出它们正在写入到相同的消息队列的通知。进一步,在RDMA握手进程时,在发布器和订阅器端处共享适当的子队列。具有多发布器的队列的订阅器将以循环方式从出现在系统中的所有子队列读取以便以接近FIFO方式获取消息。根据本发明,所有发布器向自身的子队列 写入,从而避免了对锁的需要,且订阅器按每个发布器将消息插入到自身的子队列中的顺序接收消息。
根据实施方式,在授让给本申请人的印度专利申请1745/MUM/2011中公开了运行在两个节点之间的支持RDMA的网络上的用于远程消息收发的系统和方法。申请1745/MUM/2011公开了主宿在第一宿主节点上的存储器映射文件,该第一宿主节点被配置为将消息的静态循环队列与主宿在第二宿主节点上的第二存储器映射文件进行同步;并且,运行在第一宿主节点上的至少一个远程发送器进程异步地将至少一批消息以及相应的RDMA工作请求从所述队列发送到第二宿主节点。申请1745/MUM/2011的全部内容通过引用合并于此,且为简洁起见不再重复。
尽管可以在任何数量的不同计算系统、环境和/或配置中实现所描述的用于传送和接收主宿在至少一个宿主节点上的多个消息的系统和方法的多个方面,但在下列示例性系统的上下文中描述各实施方式。
现在参见图1,根据本主题的实施方式,示出用于传送主宿在至少一个宿主节点上的多个消息的系统102的网络实现100。在一个实施方式中,系统102在进程间通信中从多个用户接收多个消息,并排列这样接收的消息。进一步,系统102将消息传送给接收器。进一步,根据本主题的一个实施方式,示出用于接收主宿在至少一个宿主节点上的多个消息的系统103的网络实现100。在一个实施方式中,系统103接收从具有至少一个用户的一个或多个宿主节点传送的多个消息。在另一实施方式中,系统103读取这样从一个或多个宿主节点接收到的多个消息。
尽管考虑到充当宿主节点的一个或多个服务器上实现系统102和系统103而解释本主题,但应理解,也可以在各种计算系统中实现系统102和系统103,诸如膝上型计算机、台式计算机、笔记本、工作站、大型计算机、服务器、网络服务器等等。应理解,系统102和系统103可由多个用户通过在下文中统称为用户104的一个或多个用户设备104-1、104-2…104-N或驻留在用户设备104上的应用来访问。用户设备104的示例可以包括但不限于便携式计算机、个人数字助理、手持式设备和工作站。用户设备104通过网络106通信地耦合到系统102和系统103。
在一个实现中,网络106可以是无线网络、有线网络或其组合。网络106可以被实现为不同类型的网络中的一种,例如内联网、局域网(LAN)、广域 网(WAN)、因特网等等。网络106可以是专用网络或共享网络。共享网络表示使用各种协议来相互通信的不同类型的网络的关联,这些协议例如超文本传输协议(HTTP)、传输控制协议/因特网协议(TCP/IP)、无线应用协议(WAP)、无限带宽协议、以太网协议等等。进一步,网络106可以包括各种网络设备,包括路由器、桥接器、服务器、计算设备、存储设备等等。
现在参见图2,根据本主题的实施方式示出系统102。在一个实施方式中,系统102可以包括至少一个处理器202、输入/输出(I/O)接口204、耦合到处理器的网络接口卡(NIC)206和存储器208。网络接口卡启用远程直接内存访问(RDMA)。进一步,网络接口卡可以启用远程直接内存访问(RDMA)以便传送或接收消息。至少一个处理器202可以被实现为一个或多个微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。连同其他能力一起,至少一个处理器202被配置为取出和执行被存储在存储器208中的计算机可读指令。
I/O接口204可以包括各种软件和硬件接口,例如,web接口、图形用户界面等等。I/O接口204可以允许系统102直接地或通过客户机设备104与用户交互。进一步,I/O接口204可以允许系统102与诸如web服务器和外部数据服务器(未示出)等的其他计算设备通信。I/O接口204可以促进在各种各样的网络和协议类型内的多种通信,这些网络和协议类型包括有线网络(例如,LAN、线缆等等)和无线网络(例如WLAN、蜂窝或卫星)。I/O接口204可以包括用于将多个设备相互连接起来或链路到另一服务器的一个或多个端口。
存储器208可以包括本领域中已知的任何计算机可读介质,包括例如易失性存储器和/或非易失性存储器,易失性存储器例如静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM),非易失性存储器例如只读存储器(ROM)、可擦除可编程ROM、闪存、硬盘、光盘和磁带。存储器208可以包括模块210和数据212。
模块210包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在一个实现中,模块210可以包括组织模块214、映射模块216、传送模块218和其他模块220。其他模块220可以包括补充系统102的应用和功能的程序或已编码指令。
其中,数据212充当存储由模块208中的一个或多个处理、接收和生成的数据的储存库。数据212也可以包括系统数据库222、消息收发库224和其他 数据226。其他数据130可以包括作为其他模块218中的一个或多个模块的执行结果而生成的数据。
现在参见图3,根据本主题的实施方式示出系统103。在一个实施方式中,系统103可以包括至少一个处理器302、输入/输出(I/O)接口304、耦合到处理器的网络接口卡(NIC)306和存储器308。至少一个处理器302可以被实现为一个或多个微处理器、微计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令操纵信号的任何设备。连同其他能力一起,至少一个处理器302被配置为取出和执行被存储在存储器308中的计算机可读指令。
I/O接口304可以包括各种软件和硬件接口,例如,web接口、图形用户界面等等。I/O接口304可以允许系统103直接地或通过客户机设备104与用户交互。进一步,I/O接口304可以允许系统103与诸如web服务器和外部数据服务器(未示出)等的其他计算设备通信。I/O接口304可以促进在各种各样的网络和协议类型内的多种通信,这些网络和协议类型包括有线网络(例如,LAN、线缆等等)和无线网络(例如WLAN、蜂窝或卫星)。I/O接口304可以包括用于将多个设备相互连接起来或链路到另一服务器的一个或多个端口。
存储器308可以包括本领域中已知的任何计算机可读介质,包括例如易失性存储器和/或非易失性存储器,易失性存储器例如静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM),非易失性存储器例如只读存储器(ROM)、可擦除可编程ROM、闪存、硬盘、光盘和磁带。存储器308可以包括模块310和数据312。
模块310包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在一个实现中,模块310可以包括检索模块(314)、读取模块(316)和其他模块318。其他模块318可以补充系统103的应用和功能的程序或已编码指令。
其中,数据312充当存储由模块208中的一个或多个处理、接收和生成的数据的储存库。数据312也可以包括系统数据库320、消息收发库(322)和其他数据132。其他数据130可以包括作为其他模块318中的一个或多个模块的执行结果而生成的数据。
在一个实现中,首先,用户可以使用客户机设备104经由I/O接口204来访问系统102。用户可以使用I/O接口204来注册他们以便使用系统102。可以 在下面解释的图2和图3中详细解释系统102的工作。系统102可以用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息。
根据一个实施方式,参见图2,系统102包括耦合到处理器的网络接口卡(NIC),以便启用远程直接内存访问(RDMA)。进一步,网络接口卡可以启用远程直接内存访问(RDMA)以便传送或接收消息。网络接口卡能够执行来自远程宿主的RDMA命令。在网络接口卡(NIC)上支持RDMA,使用iWARP或无限带宽网络来将充当发送器的至少一个宿主节点连接到充当接收器的宿主节点。RDMA协议被开发为将数据从一台计算机的存储器直接地移动到另一计算机的存储器中,且需要两台计算机的处理器的最小参与。RDMA协议包括允许系统将所传递数据直接地放置到其最终的存储器目的地中的信息,从而废除临时副本。因而,这种传递模式是在各系统之间的最有效的通信模式。RDMA适用于无限带宽和以太网。以太网或无限带宽交换机连接用户宿主节点和接收器宿主节点。
无限带宽是对以太网的高性能低等待时间替代。无限带宽架构使用交换结构的、基于信道的设计,该设计很好地适应分布式计算环境。类似于以太网,无限带宽使用多层处理来在各节点之间传递数据。每个无限带宽节点包含通过双向串行链路连接到无限带宽网络的主机信道适配器(HCA)。
由于RDMA使得处理器的作用最小化,并将数据直接地传递给最终的存储器目的地,连接的建立是最重要的部分。传输数据的两个进程数据注册存储器位置,该数据被传输到该存储器位置。在连接的两端,存储器位置的大小应该相同。
系统102进一步包括消息收发库(224)。消息收发库包括一个或多个消息发送和消息接收函数。进一步,消息发送和消息接收函数可以由消息传送和接收应用进程链接和调用。根据示例性的实施方式,在无限带宽架构上实现RDMA协议,无限带宽verbs库被用来传送消息并接收对消息传送的确认。
参见图2,系统102包括映射模块(214),其被配置为将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个。映射模块进一步被配置为通过使用一个或多个存储器映射文件,将每个远程发送器进程和与接收节点相关联的相应FIFO子队列映射起来。远程发送器进程运行在充当发射器或发送器的宿主节点。系统102中远程发送器进程的数量可以比用户数量多一。主远程发送器进程为每个子队列创建远程发送器进程线程并初始化它 们的状态。因而,可以存在比用户数量多一的远程发送器进程数量。远程发送器进程被配置用于批处理传入消息,并经由RDMA将来自传送宿主节点的存储器映射文件更新为接收宿主节点上的存储器映射文件。远程发送器进程被配置为经由RDMA用于将来自传送宿主节点的存储器映射文件的子队列更新为接收宿主节点上的存储器映射文件的子队列。
根据一个实施方式,参见图2,系统102包括被配置为排列从多个用户接收到的消息的组织模块(216)。组织模块也被配置为将这样接收的消息排列在与宿主节点相关联的一个或多个先进先出(FIFO)子队列中。进一步,组织模块具有专用于每个用户且被存储在存储器映射文件中的每个FIFO子队列。组织模块被配置为将来自每个用户的这样接收的消息排列在专用于每个用户的FIFO子队列。用户可以是发送器。用户可以是发布器。组织模块在接收消息之后调用消息收发库。存储器映射文件被存储在存储器208中。所创建的存储器映射文件的数量比用户数量多一。一个存储器映射文件用于主队列,且每个存储器映射文件用于为每个用户创建的子队列中。存储器映射文件包含用来发送和接收消息的FIFO子队列。
参见图2,系统102包括传送模块,其被配置为使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送到与接收节点相关联的相应每个FIFO子队列。系统中可以出现一个或多个用户。每个子队列可以专用于每个用户。一个或多个FIFO子队列与主队列相关联,其中,主队列的大小等于或大于出现在系统中的所有子队列的大小之和。远程发送器进程使用无限带宽verbs库传送消息数据。
根据另一实施方式,系统102进一步包括一个或多个接收节点,接收节点被配置为从一个或多个发送器宿主节点接收消息。系统102可以包括连接发射器/发送器宿主节点和接收器宿主节点的以太网或无限带宽交换机。
在一个实现中,用户可以使用客户机设备104来经由I/O接口304访问系统103。用户可以使用I/O接口304来注册他们以便使用系统103。可以在下面解释的图4和图5中详细解释系统103的工作。系统103可以在进程间通信中用来接收主宿在至少一个宿主节点上的多个消息。
根据一个实施方式,参见图3,系统103包括被耦合到处理器以便启用远程直接内存访问(RDMA)的网络接口卡(NIC)。进一步,网络接口卡可以启用远程直接内存访问(RDMA)以便传送或接收消息。网络接口卡能够执行 来自本地宿主或远程宿主的RDMA命令。在网络接口卡(NIC)上支持RDMA,使用iWARP或无限带宽网络,以便将充当发送器的至少一个宿主节点连接到充当接收器的宿主节点。
系统103进一步包括消息收发库(322)。消息收发库包括一个或多个消息发送和消息接收函数。进一步,可以由消息传送和接收应用进程链接和调用消息发送和消息接收函数。根据示例性的实施方式,在无限带宽架构上实现RDMA协议,无限带宽verbs库被用来接收消息并提供对消息接收的确认。
根据一个实施方式,参见图3,描述了在进程间通信中用于接收主宿在至少一个宿主节点上的多个消息的系统103。参见图3,系统103包括检索模块314,检索模块314被配置为接收从具有至少一个用户的一个或多个宿主节点传送的多个消息。检索模块314还被配置为将这样接收的消息排列在先进先出(FIFO)子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中。用户可以是发送器。用户可以是发布器。检索模块还被配置为在它接收消息时调用消息收发库。由一个或多个接收进程使用存储在消息收发库314中的无限带宽verbs库来执行消息的接收。存储器映射文件被存储在存储器308中。所创建的存储器映射文件的数量比用户数量多一。一个存储器映射文件用于主队列,且每个存储器映射文件用于为每个用户创建的子队列。存储器映射文件包含用来发送和接收消息的一个或多个FIFO子队列。存储在存储器映射文件中的一个或多个FIFO子队列与主队列相关联,其中,主队列的大小等于或大于出现在系统中的所有子队列的大小之和。
参见图3,系统103包括读取模块316,读取模块316被配置为通过在FIFO模式中使用循环技术从FIFO子队列中的每一个读取多个消息。读取模块促进系统的用户读取由发送器发送的消息。发送器可以是发布器,且用户可以是接收器或者可以是发布器。系统103进一步包括一个或多个传送节点,这些传送节点被配置为传送来自一个或多个宿主节点的消息。系统103还可以包括连接发送器宿主节点和接收器宿主节点的以太网或无限带宽交换机。
根据本发明的一个实施方式,参见图4和图5解释本发明的实现。传统上低等待时间消息收发系统支持单个发布器和一个或多个发布器。然而,在消息收发系统必须支持多个写入器时,本发明的框架以无缝和无锁方式实现这些。本发明的系统102包括主队列,主队列被分成与在系统配置时设置的最大用户 /发送器数量同样多的子队列。子队列的大小之和不超过主队列的大小。子队列的所有其他特性都从主队列继承。
当每个用户连接到主队列时,将子队列指派给每个用户以便写入。向子队列的消息写入或发送无缝地发生,如同向主队列写入的用户/发送器体验一样。因而,用户/发送器接口保持不变。用于队列的读取器的接收节点上的系统对所有子队列执行循环读取并读取数据,且读取器的接口也保持不变。
参见图4,根据示例性的实施方式,作为示例解释配置1中的本发明的实现。让我们考虑存在使用安装在相同的宿主节点上的系统102的多个发送器,发送器1、发送器2和发送器3。发送器将消息发送给安装在服务器1上的相同系统。在服务器1上创建向队列指定发送器数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。可以在开发时按照要求配置发送器的最大数量。出于解释目的,让我们取发送器的数量为3。通过指定消息的大小、队列的大小和接收器针对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,让我们考虑为300个消息的大小而创建队列。由于存在3个发送器,创建3个较小的子队列,每个大小为100个消息。指定接收器节点的IP地址以及接收器等待发送器连接并接收消息的端口号。
进一步,根据示例性的实施方式解释本发明在接收节点上的实现。让我们考虑接收服务器2上的接收器,其中安装了系统103。在服务器2上创建向队列指定发送器的数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。如上面所解释的,让我们取发送器的数量为3,与上面相同。通过指定消息的大小、队列的大小和接收器针对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,与上面解释的相同,让我们考虑为300个消息的大小而创建队列。由于存在3个发送器,创建3个较小的子队列,每个大小为100个消息。
参见图4,解释本发明在支持RDMA的网络上的实现。该实现可以涉及RDMA传递中的两个进程,即远程发送器进程(RS)和接收器进程(R)。作为存储器注册进程的一部分,远程发送器进程(RS)和接收器进程可以共享它们各自的队列文件。发送器进程(S)可以写入到本地存储器映射队列文件。远程发送器进程(RS)可以使用无限带宽verbs库传递数据(ibv_post_send())。
接收器宿主节点上的接收器进程可以等待,直到它接收到来自远程发送器进程的更新。在消息的接收之后,进一步,接收器进程可以读取消息并就它已 经读取的消息而更新远程发送器进程(使用ibv_post_send())。因而,发送器进程得到通知,接收器进程已经完成读取消息。通过将工作请求凑在一起并最小化完成传递所需要的步骤,远程发送器进程可以被用来优化在发送器和接收器之间的通信。
参见图5,可以存在使用安装在诸如服务器等的不同宿主节点上的系统102的多个发送器。参见图5,作为示例可以存在使用安装在不同宿主节点上的用于传送多个消息的系统的四个用户,例如服务器1和服务器2分别用于使用服务器1的发送器1和发送器2以及使用服务器2的发送器3和发送器4。远程发送器进程RS1、RS2和RS3和RS4可以直接与接收器进程S建立RDMA连接。接收器进程可以参与存储器注册且可以与连接例如如图5中所示出的RS1和RS2的所有远程发送器进程建立RDMA连接。
作为示例,参见图5,在配置2中,在服务器1和服务器2上创建向队列指定发送器的数量的配置文件。作为示例,发送器的最小序号可以是2,发送器的最大序号可以是10。通过指定消息的大小、队列的大小和接收器针对来自发送器的传入消息所侦听的端口来创建主队列。作为示例,让我们考虑,如上面所解释的在每个服务器上存在2个发送器,因此在每个服务器上创建大小为200个消息的主队列,其具有两个子队列,每个的大小为100个消息。在服务器3上的接收器节点上创建持有子队列的相似主队列结构,以便接收和排列消息。这是很重要的,这是由于,为了使得RDMA传递成功,任一端上的两个子队列必须具有相同大小。作为队列创建进程的一部分,指定接收器的IP地址以及接收器等待发送器连接的端口号。进一步,应注意,IP地址必须属于支持RDMA传递的NIC卡。进一步,如上面所解释的,消息的传递发生在支持RDMA的网络上,如上面的段落中所解释的。
参见图4和图5,根据示例性的实施方式,提供消息传输的实现的详尽解释。在开始发送器或远程发送器进程执行中的任何一个之前,首先在接收器端处开始进程执行。接收器侧进程知道为了其队列而准备连接到它的发送器的数量(如上面段落中提到的)。接收器在某种状态下初始化,并等待每个发送器的远程发送器进程与它连接。接收器在队列创建时指定的端口上侦听。在发送器的系统上,为多个发送器队列开始远程发送器进程。远程发送器进程为了队列而检查系统上的发送器数量并产生多个进程。
因此参见图4,对于配置1,在发送器的服务器1上,开始远程发送器进程,这又开始三个远程发送器进程。每个远程发送器进程拾取子队列并与接收器进程连接。在握手进程中,交换任一端上的每个子队列的数据区域的内存地址。也交换任一端上的队列的头部区域。参见图6,解释本发明中所使用的队列和子队列的结构。参见图5,对于配置2,所开始的远程发送器进程开始了每个发送器的服务器上的两个远程发送器进程,因此对于四个发送器,总共开始了四个远程发送器进程。
参见图4,发送器的进程S1和S2从它们想要发送或公布的队列的名称和消息的数量开始。当开始每个发送器时,向其指派子队列。发送器开始通过对应发送器进程将消息插入到子队列中,例如对于发送器1是发送器进程S1,且对于发送器2是发送器进程S2。进一步,远程发送器进程拾取对应所指派的子队列中的可用消息,并将其传递到接收器的系统上的相应子队列。当每次传递发生时,中断接收器进程以便完成数据传递。然后,接收器进程以循环方式从所有子队列读取,以便读取来自所有发送器的消息。如果比所配置的数量更多的发送器尝试向队列写入,则返回错误且额外的发送器退出。如果存在较少的发送器,那么,子队列的远程发送器进程继续等待发送器开始。接收器检查每个子队列,且如果在它里面不存在消息则转移。在接收器从子队列读取消息时,它更新子队列的头部区域,指示读取了多少消息。该信息又在相应子队列的头部区域中被传递给发送器的系统。以这种方式,发送器知道其消息已经被读取,且它继续在其子队列中写入新的消息。一旦发送器退出,子队列就变得可用于指派给另一发送器。
仍然参见图4和图5,根据本发明的实施方式,解释用于多个发送器在RDMA网络上在进程间通信中使用系统102和系统103发送消息的无锁机制。提供无锁机制以便允许多个发送器将消息写到它们的已指派子队列,而不需要知道彼此的存在。将消息写入或发送到子队列无缝地发生,如同向主队列写入的发送器体验一样。因而,发送器的接口保持不变。用于队列的接收器的接收节点上的系统103对所有子队列执行循环读取以便读取数据,且接收器的接口也保持不变。因而多个发送器的同时写入不需要向队列提供任何锁,且通过本发明的系统和方法实现接收器端上的消息的同时读取。
参见图6,根据实施方式描述主队列和子队列的概念。在队列创建时,检查配置文件以便标识队列是否是多发送器队列。配置文件也提及,队列可以支 持的发送器的最大数量。进一步,在创建队列时,也提及消息的最大大小、队列的长度、接收器的IP地址和端口以及其他参数。
借助于以上提到的参数创建主队列。从配置文件提取发送器的数量,且创建相同数量的子队列。子队列继承主队列的所有性质,但子队列的长度按下述计算:
子队列的长度=主队列的长度/发送器的数量
作为示例,在主队列的长度为300且存在3个发送器时,每个子队列的长度是100。作为示例,主队列被称为MULT_WRITE,且存在三个发送器,子队列被命名为MULT_WRITE_0、MULT_WRITE_1和MULT_WRITE_2。
进一步,主队列也维护结构数组,其中存储了每个子队列的名称及其状态(无论当前是被分配给发送器还是未经分配)。通过在主队列中维护上面提到的信息,维护子队列的踪迹,且可以在发送器加入系统和打开队列时将子队列分配给该发送器。进一步,在发送器完成插入消息且从队列断开时,适当的子队列被标记为未经分配。子队列也包含主队列的ID以方便访问。
在发送器想要使用队列时,它打开队列MULT_WRITE。系统102的组织模块查找可用的子队列,且如果可用,系统102的组织模块将其分配给发送器。举例来说,在上面的示例中,如果四个发送器尝试打开主队列,向发送器1分配MULT_WRITE_0,向发送器2分配MULT_WRITE_1,向发送器3分配MULT_WRITE_2,且第四个发送器得到错误消息,这是因为已经分配了全部三个子队列。发送器所写的所有消息被插入到其子队列中。因而,主队列不用于消息,而是主要用于预订保持。在发送器完成插入其消息之后,它从框架断开。此时,它所使用的子队列被标记为未经分配。
根据本发明的一个实施方式,参见图6,描述主队列和子队列的结构。主队列的结构包含头部。头部部分包含队列名称、队列ID、消息大小、队列大小和其他特性。头部还包含被称为RH的子结构,RH是接收器头部。接收器头部包含数据指针元件和删除计数器。数据指针元件指向要由接收器读取的下一消息。删除计数器是已经由接收器读取的元素或消息的数量。子结构RH对每个子队列很重要,这是由于该存储器与接收器共享,且接收器通过RDMAibv_post_send()命令在发送器的结构中直接地更新这一子结构。接收器更新属于不同发送器的子队列中的每一个的所有RH结构。进一步,SQ代表子队列。这是在主队列下创建的子队列的名称。O代表被占用。如果子队列已经被指派 给发布器,则其为真。NO代表不被占用。如果子队列还没有被分配给发布器,则其为假。
仍然参见图6,上面的段落提到的领域属于主队列和子队列的结构。队列包括结构数组。数组的大小等于要支持的发送器的最大数量。结构数组被填充在主队列中,且在子队列中保持为空。原因在于,主队列被用来跟踪子队列,并跟踪哪一子队列可以被分配给发送器。子队列的“w”部分包含自由指针元件和插入计数器。这两个变量由远程发送器进程更新,且被用来向接收器通知已经传递的消息数量。自由指针元件指向远程发送器从中已经传递由发送器写入的消息的消息位置,且插入计数器是由远程发送器从队列传递的消息数量。“w”结构主要是子主队列头部的结构。它由各个发送器复制,其连同消息一起被发送给接收器,以便指示有多少信息可用于读取。图6中所指示的子队列的“数据”部分是由发送器插入的消息。每个发送器将其消息插入到其自己的子队列中。
仍然参见图6,根据示例性的实施方式,作为示例,主队列被称为Q_TRANSFER。让我们假设存在主队列的三个发布器或发送器,因此创建三个子队列,且它们被称为Q_TRANSFER_0、Q_TRANSFER_1和Q_TRANSFER_2。用户发起命令以便按名称Q_TRANSFER创建队列。作为调用的一部分,创建主队列,且然后,创建子队列。每个子队列是主队列长度的三分之一。主队列的所有其他性质由子队列继承。
根据一个实施方式,与主队列(队列)的布局和工作、存储器映射文件、远程发送器进程以及在支持RDMA的网络上的消息传送和接收的细节信息可以参见申请1745/MUM/2012。子队列的布局和工作类似于主队列(队列)。
根据本发明的一个实施方式,系统102和系统103包括使用带有RDMA的框架的多个发送器和单个接收器。对于每个发送器进程,关联远程发送器进程。作为示例,对于单个系统上的三个发送器,将存在七个活动进程,包括三个发送器的进程、三个远程发送器进程和一个接收器进程。进一步,系统也包括休眠的远程发送器进程。根据本发明的系统102、103和方法700和800,首先开始接收器进程。进一步,在发送器的服务器上开始远程发送器进程。让我们将此作为主远程发送器进程而调用。主远程发送器进程为服务器上的每个发送器开始远程发送器进程。因而,如果在服务器上支持的发送器的数量为三,则主远程发送器进程开始三个远程发送器进程。然后,主远程发送器进程变为休眠。向三个远程发送器进程都分配它将传递消息的子队列。然后,每个远程 发送器进程联系接收器进程,创建信道以便相互通信并交换对应子队列的存储器位置。因而,接收器由三个远程发送器进程联系,且设置通信信道,并与所有三个远程发送器进程共享存储器位置。
进一步,通过检查各个子队列的RDMA自由指针元件和自由指针元件的位置以及RDMA插入计数器和插入计数器的值,每个远程发送器进程等待发送器的进程开始将消息插入到对应的子队列。如果值相等,那么,还没有插入新的消息。发送器进程插入消息并更新每个对应子队列的RDMA自由指针元件和RDMA插入计数器。当在RDMA自由指针元件和RDMA插入计数器中记录到改变时,远程发送器进程构造它们各自要传递的数据(即,由发送器插入到对应子队列的消息),并使用来自消息库(224)的ibv_post_send()调用来将其发送给对应的接收器子队列。在专利申请1745/MUM/2011中详细描述了传送的进程。进一步,作为该进程的一部分,远程发送器进程更新对应子队列的自由指针元件和插入计数器的值,并且作为数据传递的一部分,将经更新的值发送给对应接收器子队列的子队列“w”结构,如图6中所提到的。
根据本发明的另一实施方式,系统103上的接收器进程检查在发送器的系统102的每个子队列中其当前位置处的“w”结构的自由指针元件和插入计数器,并将其与其自己的终端即系统103的子队列的数据指针元件和删除计数器进行比较。在远程发送器进程中的任一个发起RDMA数据传递时,中断接收器进程以便完成传递。新的所传递的数据包含以子队列的“w”结构的自由指针元件和插入计数器的经更新的值。对自由指针元件和插入计数器的值的改变进行计数,接收器进程读取消息,并更新子队列的接收器结构(图6中表示为RH)中的数据指针元件和删除计数器。向发送器的服务器发起RDMA数据传递,以便更新发送器的子队列结构中的上述值。关于消息数据的接收的进一步细节可以参见先前文件申请1745/MUM/2011。
进一步,在发送器中的每一个接收到接收器结构RH的RDMA数据传递时,向发送器中的每个通知由接收器读取的消息的数量。然后,发送器可以进行到写入进一步的消息。如果RDMA自由指针指向的位置的下一位置等于数据指针元件,且如果RDMA插入计数器和删除计数器在值上相等,则发送器等待。这表示,接收器还没有读取先前插入的消息,且没有更多的有效载荷位置供发送器填充消息。一旦数据指针元件和删除计数器由接收器更新,且经由RDMA被传递到发送器的结构,发送器就可以进行写入。每个发送器检查对应的子队列 的RDMA自由指针元件和RDMA插入计数器,并将它们的值与它们各自的子队列的RH结构中的数据指针元件和删除计数器进行比较。一旦数据指针元件和删除计数器由接收器更新,且经由RDMA被传递到相应的发送器的结构中的每一个,发送器就可以进行写入。
现在参见图7,根据本主题的一个实施方式,示出在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法700。可以在计算机可执行指令的一般上下文中描述方法700。一般地,计算机可执行指令可以包括执行特定函数或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等等。方法700也可以在分布式计算环境中实践,分布式计算环境中,功能由通过通信网络链接的远程处理设备执行。在分布式计算环境中,计算机可执行指令可以位于包括存储器存储设备的本地和远程计算机存储介质。
描述方法700的次序不旨在被解释成限制,且任何数量的所描述的方法框可以以任何次序组合以便实现方法700或替代的方法。另外,可以在不偏离在此描述的本主题的精神和范围的前提下从方法700删除个别框。此外,可以以任何合适的硬件、软件、固件或其组合实现该方法。然而,为便于解释,下面描述的各实施方式中,可以考虑在上面所描述的介质系统102中实现方法700。
参见图7,根据本发明的一个实施方式,描述了用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法(700)。方法700包括通过使用远程直接内存访问(RDMA)来传送多个用户消息而执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数。在一个实现中,消息发送和消息接收函数可以被存储在消息收发库中,且可以由被存储在存储器中的模块调用并由处理器执行。远程直接内存访问(RDMA)得到了网络接口卡的支持。
在步骤702,可以将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个,且在步骤704,通过使用一个或多个存储器映射文件,可以将每个远程发送器进程和与接收节点相关联的相应FIFO子队列映射起来。在一个实现中,可以由映射模块214执行将远程发送器进程中的每一个映射到与宿主节点相关联的FIFO子队列中的每一个并且通过使用一个或多个存储器映射文件将每个远程发送器进程和与接收节点相关联的相应FIFO子队列关联起来。
在步骤706,可以将从至少一个用户接收到的消息排列在与宿主节点相关联的一个或多个先进先出(FIFO)子队列中,其中,每个FIFO子队列可以是 专用于每个用户的,且可以被存储在存储器映射文件中。在一个实现中,可以由组织模块216执行消息的接收并且将消息排列在与宿主节点相关联的先进先出(FIFO)子队列中。
在步骤708,通过使用相应远程发送器进程,可以将来自与宿主节点相关联的每个FIFO子队列的消息传送给与接收器节点相关联的相应FIFO子队列。在一个实现中,可以由传送模块218执行使用相应远程发送器进程将来自与宿主节点相关联的每个FIFO子队列的消息传送给与接收器节点相关联的相应每个FIFO子队列。借助于处理器202执行包括排列、映射和传送的诸如702、704、706和708等的方法700步骤。所创建的存储器映射文件的数量可以比用户数量多一,且远程发送器进程的数量可以比用户数量多一。方法700通过至少一个网络接口卡(NIC)在支持RDMA的网络上执行。
现在参见图8,根据本主题的一个实施方式,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法800。可以在计算机可执行指令的一般上下文中描述方法800。一般地,计算机可执行指令可以包括执行特定函数或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、过程、模块、函数等等。方法800也可以在分布式计算环境中实践,分布式计算环境中,功能由通过通信网络链接的远程处理设备执行。在分布式计算环境中,计算机可执行指令可以位于包括存储器存储设备的本地和远程计算机存储介质上。
描述方法800的次序不旨在被解释成限制,且任何数量的所描述的方法框可以以任何次序组合以便实现方法800或替代的方法。另外,可以在不偏离在此描述的本主题的精神和范围的前提下从方法800删除个别框。此外,可以以任何合适的硬件、软件、固件或其组合实现该方法。然而,为便于解释,下面描述的各实施方式中,可以考虑在上面所描述的介质系统103中实现方法800。
参见图8,根据本发明的一个实施方式,描述了用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法(800)。方法800包括通过使用远程直接内存访问(RDMA)来接收多个用户消息而执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数。在一个实现中,消息发送和消息接收函数可以被存储在消息收发库中,且可以由被存储在存储器中的模块调用并由处理器执行。远程直接内存访问(RDMA)受到网络接口卡的支持。
在步骤802,可以接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,且在步骤804可以将这样接收的消息排列在先进先出(FIFO)子队列中,其中,FIFO子队列可以是专用于每个用户的,且可以被存储在存储器映射文件中。在一个实现中,可以由检索模块314执行接收从具有至少一个用户的一个或多个宿主节点传送的多个消息并且将这样接收的消息排列在先进先出(FIFO)子队列中,其中,FIFO子队列可以是专用于每个用户的。
在步骤806,可以通过在FIFO模式中使用循环技术读取来自FIFO子队列中的每一个的多个消息。在一个实现中,通过在FIFO模式中使用循环技术读取来自FIFO子队列中的每一个的多个消息可以由读取模块316执行。借助于处理器执行包括接收、排列和读取的方法800步骤802、804、806。所创建的存储器映射文件的数量可以比用户数量多一。方法800可以由至少一个网络接口卡(NIC)在支持RDMA的网络上执行。
根据示例性的实施方式,提供了用于低等待时间FIFO消息收发中支持多个发送器的系统102和系统103的性能结果。该系统被称为定制队列(CBQ)。提供了吞吐量测试结果。吞吐量是在发布器和订阅器之间或发送器和接收器之间可以交换消息的最大速度。参见图9,示出了用于吞吐量测试的测试设置。作为示例,已经用C实现了定制队列(CBQ)。由于用Java实现了用于吞吐量测试的贸易应用,使用JNI(Java本地接口)来从Java应用调用本机的C代码函数。参见图10,提供了三个发布器的使用Java和C应用程序两者的多发布器定制队列(CBQ)的最大吞吐量性能。发布器可以是发送器。订阅器可以是接收器。
根据本发明的示例性实施方式且作为示例,在吞吐量测试中,在服务器1处的发布器将大小为512字节的消息插入到多发布器定制队列(CBQ)中。在同时消息之间不存在思考时间。在服务器2上用户端处的系统103计算接收一百万个消息的时间并以每秒钟的消息(msgs/sec)计算吞吐量。定制队列(CBQ)的大小是30个消息。用Java实现的发布器使用了ByteArray消息,且用C实现的发布器使用字符串消息。如图9中所示出的,通过相同的系统(IPC)上以所有进程(3个发布器+1个订阅器)实施测试,通过由1Gbps链路(TCP-1G)、10Gbps链路(TCP-10G)和RDMA链路链接的不同服务器上以发布器和订阅器(3个发布器+1个订阅器)实施测试。参见图10,提供了吞吐量测试结果。
根据示例性的实施方式,提供了用于低等待时间FIFO消息收发中支持多个发送器的系统102和系统103中的等待时间测试结果。等待时间是消息行进到接收器且响应回到发送器所花费的时间。参见图11,示出了等待时间测试的测试设置。作为示例,在服务器1上的三个发布器将消息插入到多发布器定制队列(CBQ)。发布器可以是消息的发送器。就在插入消息之前将时间戳嵌入到消息中。在服务器2上的订阅器从多发布器CBQ读取消息,且又在被连接到服务器1上的订阅器的点对点CBQ上发布它。这是回环。订阅器可以是消息的接收器。在服务器1上的订阅器读取消息,并计算在发送消息和接收消息之间的时差。这是消息的等待时间。参见图12,计算了所有四种部署的一百万个消息的往返等待时间的平均值并在图12中报告。以512字节消息50000msgs/sec的吞吐量发送消息。如先前说明的,CBQ大小是30。
根据另一示例性的实施方式,描述了各种RDMA吞吐量和相应的等待时间统计。参见图13,示出了使用RDMA在无限带宽上通过系统102和系统103的多发布器CBQ的平均往返等待时间统计。针对不同的发布器吞吐量率–20,000msgs/sec、50,000msgs/sec,100,000msgs/sec和最大的吞吐量,实施了等待时间测试。最大吞吐量指示其中在相继的消息之间发布器具有零思考时间的测试。对于最大吞吐量测试,图中提到了个体发布器的吞吐量的平均值。对于1、3、6和9个发布器,已经进行了测量。在对于六个和九个发布器的测试中,发布器跨越两个服务器而分布。已经用C实现发布器。发布器可以是消息的发送器。
仍然参见图13,观察到20,000msgs/sec和50,000msgs/sec的吞吐量率的平均往返等待时间为大约12μs,且随着用户数量的增加几乎是恒定的。如按照从图13所示出的指标,将在无限带宽上RDMA用作贸易应用的多发送器CBQ的传输机制受到支持且是高效的。
根据示例性的实施方式,下面提供在其上实施吞吐量、等待时间和RDMA测试的系统102和系统103上的服务器的硬件配置。
根据示例性的实施方式,下面提供用来吞吐量、等待时间和RDMA测试实施的网络接口卡信息。
优点
本发明中所描述的用于使用RDMA的低等待时间FIFO消息收发中支持多个发送器的系统和方法具有若干技术优点,包括但不限于实现了以下:
为在运行在至少两个节点上的至少两个进程之间的进程间通信提供多发送器支持。
为在运行在至少两个节点上的至少两个进程之间的进程间通信提供用于多个发送器发送消息的无锁机制。
支持多个同时用户的高吞吐量消息率。
以低平均等待时间投递消息,要求最小基础设施,且易于在现有系统上部署。
该书面说明描述了本文的主题,以使任何所属领域的技术人员能够制造和使用本发明的实施方式。本主题的实施方案的范围由权利要求限定,并且可包括本领域技术人员想到的其他修改。如果这样的其他修改具有不与权利要求的字面语言不同的类似元素,或者如果它们包括与权利要求的字面语言无实质差异的等效元素,则这样的其他修改预期是在权利要求的范围之内。
Claims (24)
1.一种用于在进程间通信中传送主宿在至少一个宿主节点中的多个消息的系统,所述系统包括:
处理器;
耦合到所述处理器的网络接口卡(NIC),其中所述网络接口卡启用远程直接内存访问(RDMA)以便发送消息;
包括一个或多个消息发送和消息接收函数的消息库,所述消息发送和消息接收函数以无锁方式同时允许多个消息收发;以及
耦合到所述处理器的存储器,其中所述处理器能够执行被存储在所述存储器中的多个模块,所述多个模块包括:
映射模块,所述映射模块被配置为将远程发送器进程中的每一个映射到与所述宿主节点相关联的FIFO子队列中的每一个,并通过使用一个或多个存储器映射文件,将每个远程发送器进程和与接收节点相关联的相应FIFO子队列映射起来;
组织模块,所述组织模块被配置为将从至少一个用户接收到的消息排列在所述与所述宿主节点相关联的一个或多个先进先出(FIFO)子队列中;其中,所述FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
传送模块,所述传送模块被配置为使用所述相应远程发送器进程将来自与所述宿主节点相关联的每个FIFO子队列的消息传送到与所述接收节点相关联的所述相应的每个FIFO子队列。
2.如权利要求1所述的系统,其特征在于,一个或多个FIFO子队列与主队列相关联,其中所述主队列的大小等于或大于出现在所述系统中的所有子队列的大小之和。
3.如权利要求1所述的系统,其特征在于,所述组织模块在接收所述消息之后调用消息收发库。
4.如权利要求1所述的系统,其特征在于,所述用户可以是发送器。
5.如权利要求1所述的系统,其特征在于,所述发送器进程使用无限带宽verbs库传送所述消息数据。
6.如权利要求1所述的系统,其特征在于,所创建的存储器映射文件的数量比用户数量多一,且远程发送器进程的数量比用户数量多一。
7.如权利要求1所述的系统,其特征在于,在使用iWARP或无限带宽网络的所述网络接口卡(NIC)上支持所述RDMA,以便将充当发送器的至少一个宿主节点连接到充当接收器的所述宿主节点。
8.如权利要求1所述的系统,进一步包括一个或多个接收节点,所述一个或多个接收节点被配置为接收来自一个或多个发送器宿主节点的消息。
9.如权利要求1所述的系统,进一步包括连接用户宿主节点和接收器宿主节点的以太网或无限带宽交换机。
10.一种用于在进程间通信中接收主宿在至少一个宿主节点中的多个消息的系统,所述系统包括:
处理器;
耦合到所述处理器的网络接口卡(NIC),其中所述网络接口卡启用远程直接内存访问(RDMA)以便接收消息;
消息收发库,所述消息收发库包括以无锁方式同时允许多个消息收发的一个或多个消息发送和消息接收函数;以及
耦合到所述处理器的存储器,其中所述处理器能够执行被存储在所述存储器中的多个模块,所述多个模块包括:
检索模块,所述检索模块被配置为接收从具有至少一个用户的一个或多个宿主节点传送的多个消息,这样接收的所述消息被排列在先进先出(FIFO)子队列中,其中,每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
读取模块,所述读取模块被配置为通过在FIFO模式中使用循环技术从所述FIFO子队列中的每一个读取所述多个消息。
11.如权利要求10所述的系统,其特征在于,一个或多个FIFO子队列与主队列相关联,其中所述主队列的大小等于或大于出现在所述系统中的所有子队列的大小之和。
12.如权利要求10所述的系统,其特征在于,所述检索模块在接收所述消息之后调用消息收发库。
13.如权利要求10所述的系统,其特征在于,由接收进程使用无限带宽verbs库来执行所述消息的接收。
14.如权利要求10所述的系统,其特征在于,所创建的存储器映射文件的数量比用户数量多一。
15.如权利要求10所述的系统,其特征在于,在使用iWARP或无限带宽网络的所述NIC上支持所述RDMA,以便将充当发送器的至少一个宿主节点连接到充当接收器的所述宿主节点。
16.如权利要求10所述的系统,进一步包括一个或多个传送节点,所述一个或多个传送节点被配置为传送来自一个或多个宿主节点的所述消息。
17.如权利要求10所述的系统,进一步包括以太网或无限带宽交换机,所述以太网或无限带宽交换机连接发送器宿主节点和接收器宿主节点。
18.一种用于在进程间通信中传送主宿在至少一个宿主节点上的多个消息的方法,所述方法包括:
执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数;
使用远程直接内存访问(RDMA)来传送多个用户消息;所述传送进一步包括:
将远程发送器进程中的每一个映射到与所述宿主节点相关联的FIFO子队列中的每一个,并使用一个或多个存储器映射文件将每个远程发送器进程和与接收节点相关联的相应FIFO子队列关联起来;以及
将从至少一个用户接收到的消息排列在所述与所述宿主节点相关联的一个或多个先进先出(FIFO)子队列中,其中每个FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中,以及
使用所述相应远程发送器进程,将来自与所述宿主节点相关联的每个FIFO子队列的消息传送到与所述接收节点相关联的所述相应的每个FIFO子队列;
其中,借助于处理器执行所述映射、所述排列和所述传送。
19.如权利要求18所述的方法,其特征在于,所创建的存储器映射文件的数量比所述用户数量多一,且所述远程发送器进程的数量比用户数量多一。
20.如权利要求18所述的方法,其特征在于,在所述支持RDMA的网络上通过至少一个网络接口卡(NIC)执行所述方法。
21.一种用于在进程间通信中接收主宿在至少一个宿主节点上的多个消息的方法,所述方法包括:
执行以无锁方式同时允许多个消息收发的消息发送和消息接收函数;
使用远程直接内存访问(RDMA)来接收多个用户消息;所述接收进一步包括:
接收从与至少一个用户相关联的一个或多个宿主节点传送的多个消息,这样接收的消息被排列在先进先出(FIFO)子队列中,其中所述FIFO子队列是专用于每个用户的,且被存储在存储器映射文件中;以及
通过在FIFO模式中使用循环技术读取来自所述FIFO子队列中的每一个的多个消息;
其中,借助于处理器执行所述接收、所述排列和所述读取。
22.如权利要求21所述的方法,其特征在于,所创建的存储器映射文件的数量比用户数量多一。
23.如权利要求21所述的方法,其特征在于,所述用户可以是发送器。
24.如权利要求21所述的方法,其特征在于,通过至少一个网络接口卡(NIC)在所述支持RDMA的网络上执行所述方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN3527/MUM/2013 | 2013-11-08 | ||
IN3527MU2013 IN2013MU03527A (zh) | 2013-11-08 | 2013-11-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104639596A true CN104639596A (zh) | 2015-05-20 |
CN104639596B CN104639596B (zh) | 2018-04-27 |
Family
ID=53217902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410035289.0A Active CN104639596B (zh) | 2013-11-08 | 2014-01-24 | 用于使用rdma的低等待时间fifo消息收发中支持多个发送器的系统和方法 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN104639596B (zh) |
AU (1) | AU2014200239B2 (zh) |
IN (1) | IN2013MU03527A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106100953A (zh) * | 2016-05-20 | 2016-11-09 | 北京百度网讯科技有限公司 | PCIe 设备共享网络的生成方法、装置及系统 |
CN106953797A (zh) * | 2017-04-05 | 2017-07-14 | 广东浪潮大数据研究有限公司 | 一种基于动态连接的rdma数据传输的方法与装置 |
WO2018077284A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
CN108351860A (zh) * | 2015-11-20 | 2018-07-31 | 微软技术许可有限责任公司 | 低延迟的基于rdma的分布式存储装置 |
CN110099093A (zh) * | 2018-01-31 | 2019-08-06 | 西门子股份公司 | 数据通信的方法、装置、计算机程序和计算机可读介质 |
CN110134439A (zh) * | 2019-03-30 | 2019-08-16 | 北京百卓网络技术有限公司 | 无锁化的数据结构构建方法和写入数据、读取数据的方法 |
CN111143079A (zh) * | 2019-12-24 | 2020-05-12 | 浪潮软件股份有限公司 | 一种多读多写无锁队列实现方法 |
CN113194045A (zh) * | 2020-01-14 | 2021-07-30 | 阿里巴巴集团控股有限公司 | 数据流量分析方法、装置、存储介质及处理器 |
CN113395359A (zh) * | 2021-08-17 | 2021-09-14 | 苏州浪潮智能科技有限公司 | 基于远程直接内存访问的文件币集群数据传输方法、系统 |
CN114979270A (zh) * | 2022-05-25 | 2022-08-30 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110113420B (zh) * | 2019-05-08 | 2020-06-05 | 重庆大学 | 基于nvm的分布式消息队列管理系统 |
CN114415969B (zh) * | 2022-02-09 | 2023-09-29 | 杭州云合智网技术有限公司 | 交换芯片报文动态存储方法 |
CN114979022B (zh) * | 2022-05-20 | 2023-07-28 | 北京百度网讯科技有限公司 | 远程直接数据存取的实现方法、装置、适配器和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320360A (zh) * | 2007-05-10 | 2008-12-10 | 辉达公司 | 用于并行集成电路结构的消息排队系统和相关操作方法 |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060075057A1 (en) * | 2004-08-30 | 2006-04-06 | International Business Machines Corporation | Remote direct memory access system and method |
US7529886B2 (en) * | 2004-11-03 | 2009-05-05 | International Business Machines Corporation | Method, system and storage medium for lockless InfiniBand™ poll for I/O completion |
US20130198419A1 (en) * | 2012-01-30 | 2013-08-01 | Stephen Jones | Lock-free fifo |
-
2013
- 2013-11-08 IN IN3527MU2013 patent/IN2013MU03527A/en unknown
-
2014
- 2014-01-15 AU AU2014200239A patent/AU2014200239B2/en active Active
- 2014-01-24 CN CN201410035289.0A patent/CN104639596B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101320360A (zh) * | 2007-05-10 | 2008-12-10 | 辉达公司 | 用于并行集成电路结构的消息排队系统和相关操作方法 |
US7627744B2 (en) * | 2007-05-10 | 2009-12-01 | Nvidia Corporation | External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换系统 |
AU2011265444A1 (en) * | 2011-06-15 | 2013-01-10 | Tata Consultancy Services Limited | Low latency FIFO messaging system |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108351860A (zh) * | 2015-11-20 | 2018-07-31 | 微软技术许可有限责任公司 | 低延迟的基于rdma的分布式存储装置 |
CN108351860B (zh) * | 2015-11-20 | 2022-02-25 | 微软技术许可有限责任公司 | 低延迟的基于rdma的分布式存储装置 |
CN106100953A (zh) * | 2016-05-20 | 2016-11-09 | 北京百度网讯科技有限公司 | PCIe 设备共享网络的生成方法、装置及系统 |
CN106100953B (zh) * | 2016-05-20 | 2019-10-18 | 北京百度网讯科技有限公司 | PCIe设备共享网络的生成方法、装置及系统 |
US10693816B2 (en) | 2016-10-28 | 2020-06-23 | Beijing Sensetime Technology Development Co., Ltd | Communication methods and systems, electronic devices, and computer clusters |
CN108011909A (zh) * | 2016-10-28 | 2018-05-08 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
WO2018077284A1 (zh) * | 2016-10-28 | 2018-05-03 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
CN108011909B (zh) * | 2016-10-28 | 2020-09-01 | 北京市商汤科技开发有限公司 | 通信方法和系统、电子设备和计算机集群 |
CN106953797A (zh) * | 2017-04-05 | 2017-07-14 | 广东浪潮大数据研究有限公司 | 一种基于动态连接的rdma数据传输的方法与装置 |
CN106953797B (zh) * | 2017-04-05 | 2020-05-26 | 苏州浪潮智能科技有限公司 | 一种基于动态连接的rdma数据传输的方法与装置 |
CN110099093A (zh) * | 2018-01-31 | 2019-08-06 | 西门子股份公司 | 数据通信的方法、装置、计算机程序和计算机可读介质 |
CN110099093B (zh) * | 2018-01-31 | 2022-07-15 | 西门子股份公司 | 数据通信的方法、装置、计算机程序和计算机可读介质 |
CN110134439B (zh) * | 2019-03-30 | 2021-09-28 | 北京百卓网络技术有限公司 | 无锁化的数据结构构建方法和写入数据、读取数据的方法 |
CN110134439A (zh) * | 2019-03-30 | 2019-08-16 | 北京百卓网络技术有限公司 | 无锁化的数据结构构建方法和写入数据、读取数据的方法 |
CN111143079A (zh) * | 2019-12-24 | 2020-05-12 | 浪潮软件股份有限公司 | 一种多读多写无锁队列实现方法 |
CN111143079B (zh) * | 2019-12-24 | 2024-04-16 | 浪潮软件股份有限公司 | 一种多读多写无锁队列实现方法 |
CN113194045A (zh) * | 2020-01-14 | 2021-07-30 | 阿里巴巴集团控股有限公司 | 数据流量分析方法、装置、存储介质及处理器 |
CN113194045B (zh) * | 2020-01-14 | 2023-11-17 | 阿里巴巴集团控股有限公司 | 数据流量分析方法、装置、存储介质及处理器 |
CN113395359A (zh) * | 2021-08-17 | 2021-09-14 | 苏州浪潮智能科技有限公司 | 基于远程直接内存访问的文件币集群数据传输方法、系统 |
CN114979270B (zh) * | 2022-05-25 | 2023-08-25 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
CN114979270A (zh) * | 2022-05-25 | 2022-08-30 | 上海交通大学 | 适用于rdma网络的消息发布方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104639596B (zh) | 2018-04-27 |
AU2014200239A1 (en) | 2015-05-28 |
IN2013MU03527A (zh) | 2015-07-31 |
AU2014200239B2 (en) | 2015-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104639596A (zh) | 用于使用rdma的低等待时间fifo消息收发中支持多个发送器的系统和方法 | |
EP4009593A1 (en) | Data transmission method and apparatus, network card and storage medium | |
EP3984201A1 (en) | Systems and methods providing a multi-cloud microservices gateway using a sidecar proxy | |
CN100375469C (zh) | 在物理端口上模拟多个逻辑端口的方法和装置 | |
CN102986171B (zh) | 分布式虚拟桥接器环境中的寄存器访问 | |
CN105981347B (zh) | 在网络环境中支持子网管理的系统、方法和计算机介质 | |
CN106663033B (zh) | 在事务中间件机器环境支持绕域和代理模型并更新服务信息以跨域消息传送的系统和方法 | |
CN104426800B (zh) | 用于在对等通信网络中管理消息队列的系统和方法 | |
US20080192648A1 (en) | Method and system to create a virtual topology | |
US20020198967A1 (en) | Configuration parameter sequencing and sequencer | |
US20080195756A1 (en) | Method and system to access a service utilizing a virtual communications device | |
US20040225805A1 (en) | Network based intra-system communications architecture | |
CN101964799A (zh) | 点到网隧道方式下地址冲突的解决方法 | |
CN107707557B (zh) | 匿名访问方法、装置、网络设备及可读存储介质 | |
CN108023953A (zh) | Ftp服务的高可用实现方法和装置 | |
CN111800441B (zh) | 数据处理方法、系统、装置、用户端服务器、用户端及管控服务器 | |
US12052173B2 (en) | Executing workloads across multiple cloud service providers | |
EP1589424A2 (en) | Vertical perimeter framework for providing application services in multi-CPU environments | |
CN103631652A (zh) | 虚拟机迁移的实现方法及系统 | |
CN109491887A (zh) | 测试环境部署方法、装置、计算机设备及存储介质 | |
TW202301118A (zh) | 動態微服務分配機制 | |
US9804907B2 (en) | Remote procedure call for a distributed system | |
CN110535959A (zh) | 一种传输数据的方法、装置和计算机可读存储介质 | |
CN114157455B (zh) | 一种数据传输方法、装置、设备以及存储介质 | |
CN115665026A (zh) | 一种集群组网的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |