CN115834660B - 一种非阻塞rdma连接建立方法及装置 - Google Patents

一种非阻塞rdma连接建立方法及装置 Download PDF

Info

Publication number
CN115834660B
CN115834660B CN202310152912.XA CN202310152912A CN115834660B CN 115834660 B CN115834660 B CN 115834660B CN 202310152912 A CN202310152912 A CN 202310152912A CN 115834660 B CN115834660 B CN 115834660B
Authority
CN
China
Prior art keywords
client
rdma
visocket
socket
subprocess
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
CN202310152912.XA
Other languages
English (en)
Other versions
CN115834660A (zh
Inventor
田万廷
刘运渠
官华伯
郭俊敏
王蒙
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.)
Jiangsu Weishi Technology Co ltd
Original Assignee
Jiangsu Weishi Technology Co 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 Jiangsu Weishi Technology Co ltd filed Critical Jiangsu Weishi Technology Co ltd
Priority to CN202310152912.XA priority Critical patent/CN115834660B/zh
Publication of CN115834660A publication Critical patent/CN115834660A/zh
Application granted granted Critical
Publication of CN115834660B publication Critical patent/CN115834660B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Communication Control (AREA)
  • Computer And Data Communications (AREA)

Abstract

一种非阻塞RDMA连接建立方法及装置,服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,ViSocket层由服务端控制进程调用预先建立的集成有TCP系统调用函数和RDMA信息传输函数的ViSocket函数库形成,ViSocket层用于将通用的TCP系统调用转换为RDMA可识别传输操作;通过TCP连接在轮询客户端数据接收或发送的过程中与至少一个客户端交换RDMA建链信息,并建立RDMA连接。本公开实施例能够把套接字自动转换为RDMA连接,带宽更高,延迟抖动更小,占用主机CPU算力接近于零,还能够使得单个服务端支持多个客户端的RDMA连接数,提高CPU效率。

Description

一种非阻塞RDMA连接建立方法及装置
技术领域
本公开实施例涉及信息处理领域,尤其是涉及一种非阻塞直接数据存取(RemoteDirect Memory Access,RDMA)连接建立方法及装置。
背景技术
RDMA 相对于传输控制协议(Transmission Control Protocol,TCP)具有旁路软件协议栈、卸载网络工作到硬件的特点,能有效增加网络带宽、降低网络时延与中央处理器(central processing unit,CPU)负载。因此如何将TCP与RDMA融合成为亟待解决的一个问题。
相关技术中,常用的包括Mellanox开源软件产品消息加速器或共享内存通信(Shared Memory Communication over RDMA,SMC-R)方法。
然而Mellanox并没有降低CPU处理传输协议的开销,与RDMA比较,延迟抖动还是大很多;而SMC-R则由于存在用户空间/内核空间切换,RDMA性能损耗大,且由于增加了AF_SMC地址族,需要修改应用涉及地址族的代码。
发明内容
本公开实施例提供了一种非阻塞RDMA连接建立方法及装置,无需修改代码,能够把套接字自动转换为RDMA连接,带宽更高,延迟抖动更小,占用主机CPU算力接近于零,并且能够使得单个服务端支持多个客户端的RDMA连接数,提高CPU效率。
一方面,本公开实施例提供了一种非阻塞RDMA连接建立方法,包括:
服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,其中,所述ViSocket层由所述服务端控制进程调用ViSocket函数库形成,所述ViSocket函数库是预先建立的集成有TCP系统调用函数和RDMA信息传输函数的函数库,所述ViSocket层用于将通用的TCP系统调用转换为RDMA可识别传输操作;
所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息;
所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接。
所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接之前还包括:
当所述服务端的应用程序对应的应用主进程运行时,所述应用主进程调用所述ViSocket函数库,形成所述应用主进程对应的ViSocket层;
当所述应用主进程调用侦听套接字的创建函数和套接字属性的设置函数时,所述应用主进程对应的ViSocket层拦截所述侦听套接字的创建函数的调用以及所述套接字属性的设置函数的调用,创建侦听套接字并设置所创建的侦听套接字的属性为非阻塞,得到非阻塞侦听套接字返回给所述应用主进程。
所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
所述应用主进程通过非阻塞侦听套接字调用轮询函数用以轮询至少一个客户端的TCP连接请求;
所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
每当所述应用主进程对应的ViSocket层轮询到一个客户端的TCP连接请求,所述应用主进程对应的ViSocket层将轮询到的客户端的TCP请求连接返回给所述应用主进程;
所述应用主进程调用TCP通信套接字的创建函数用以接收客户端的TCP连接请求时,所述应用主进程对应的ViSocket层拦截所述通信套接字的创建函数的调用,并接收所述客户端的TCP连接请求;
所述应用主进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,并创建TCP通信套接字返回给所述应用主进程。
所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
当所述应用主进程调用套接字属性的设置函数用以设置所述应用主进程的TCP通信套接字的属性时,所述应用主进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述应用主进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述应用主进程;
当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述应用主进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述应用主进程的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
所述服务端根据获得的RDMA建链信息,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述应用主进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
所述服务端通过ViSocket层的TCP连接,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
所述应用主进程调用进程复制函数复制自身得到工作子进程,并运行所述工作子进程;其中,所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字和TCP通信套接字进行复制得到的与所述工作子进程对应的非阻塞侦听套接字和TCP通信套接字;
当所述工作子进程运行时,所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层;
当工作子进程调用套接字属性的设置函数用以设置所述工作子进程的TCP通信套接字的属性时,所述工作子进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述工作子进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述工作子进程;
当工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述工作子进程对应的ViSocke层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层之后,还包括:
当所述工作子进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述工作子进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述工作子进程对应的非阻塞侦听套接字的引用。
所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述应用主进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞TCP通信套接字的引用。
所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程,并运行得到的所有工作子进程;其中,每个所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字进行复制得到的与该工作子进程对应的非阻塞侦听套接字;
当每一个所述工作子进程运行,该工作子进程调用ViSocket函数库运行,形成与该工作子进程对应的ViSocket层,且该工作子进程通过自身的非阻塞侦听套接字并调用轮询函数用以轮询至少一个客户端的TCP连接请求;
每个所述工作子进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
每当一个所述工作子进程对应的ViSocket层轮询到一个客户端的TCP连接请求,将轮询到TCP连接请求的ViSocket层对应的工作子进程作为目标工作子进程,所述目标工作子进程对应的ViSocket层将轮询到的客户端的TCP连接请求返回给相应的目标工作子进程;
所述目标工作子进程调用TCP通信套接字的创建函数和套接字属性的设置函数用以接收至少一个客户端的TCP连接请求时,所述目标工作子进程对应的ViSocket层拦截所述TCP通信套接字的创建函数的调用以及所述套接字属性的设置函数的调用,并接收所述客户端的TCP连接请求;
所述目标工作子进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,创建TCP通信套接字并设置所创建的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给相应的目标工作子进程。
所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程之后,还包括:
当应用主进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞侦听套接字的引用。
所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述目标工作子进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述目标工作子进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述目标工作子进程的非阻塞TCP通信套接字的引用。
再一方面,本公开实施例还提供了一种服务端,包括存储器和处理器,所述存储器用于保存可执行程序;
所述处理器用于读取执行所述可执行程序,以实现前述的非阻塞RDMA连接建立方法。
与相关技术相比,本公开实施例提供的非阻塞RDMA连接建立方法,在服务端的内核层与应用程序层之间增加ViSocket层,在ViSocket层感知TCP连接,并基于TCP连接交互RDMA建链信息进而建立RDMA连接,从而完成套接字自动转换为RDMA连接,因此在无需修改代码的前提下,提高了带宽,减少了延迟抖动,使得主机CPU算力占用接近于零,并且通过轮询的方式与多个客户端建立RDMA连接,从而能够使得单个服务端支持多个客户端的RDMA连接数,提高CPU效率。
本公开的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本公开而了解。本公开的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
附图用来提供对本公开技术方案的理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开的技术方案,并不构成对本公开技术方案的限制。
图1为本公开实施例一种非阻塞RDMA连接建立方法的流程示意图;
图2为本公开实施例一种服务端上软硬件协议栈层次的结构示意图;
图3为本公开实施例另一种非阻塞RDMA连接建立方法的流程示意图;
图4为本公开实施例一种非阻塞RDMA连接建立方法的函数调用过程的示意图;
图5为本公开实施例又一种非阻塞RDMA连接建立方法的流程示意图;
图6为本公开实施例另一种非阻塞RDMA连接建立方法的函数调用方法示意图。
具体实施方式
本公开描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本公开所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本公开包括并设想了与本领域普通技术人员已知的特征和元件的组合。本公开已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的方案。任何实施例的任何特征或元件也可以与来自其它方案的特征或元件组合,以形成另一个由权利要求限定的独特的方案。因此,应当理解,在本公开中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本公开实施例的精神和范围内。
本公开实施例提供了一种非阻塞RDMA连接建立方法,如图1所示,该方法包括:
步骤101、服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,其中,所述ViSocket层由所述服务端控制进程调用ViSocket函数库形成,所述ViSocket函数库是预先建立的集成有TCP系统调用函数和RDMA信息传输函数的函数库,所述ViSocket层用于将通用的TCP系统调用转换为RDMA可识别传输操作;
步骤102、所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息;
步骤103、所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接。
示例性的,所述ViSocket层位于所述服务端的内核层与应用程序层之间。
现代企业数据中心与云数据中心,部署了海量的普通服务端,用于完成计算/存储/网络/数据库等业务。这些服务端水平线性扩充,提供弹性算力,并通过高速网络连接到一起,构成一台巨型计算机。服务端内的多核处理器,遵循摩尔定律,释放半导体工艺的红利,处理器核数目突破100。为了保证这类数据中心的计算效率,有两个关键点:第一,高速低延迟的网络,降低跨服务端的消息通信延迟,物理上松耦合,性能上紧耦合,充分释放服务端集群的效率。第二,服务端上网络栈,高效传递数据到多核处理器上运行的各应用进程,减少沿途损耗,减少延迟与对主机CPU的占用,充分释放多核处理器的计算效率。数据中心一直用以太网互连服务端。服务端内,则通过linux内核中实现的TCP/IP网络栈传输消息,应用程序的编程接口为套接字(socket)。套接字(从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口)是一个逻辑概念,表示两个应用程序通过网络通信时,各自访问通信连接的端点。Unix/Linux/Windows等主机操作系统,已经把套接字相关的操作标准化为一套标准的API,以便支持各种需要网络通信的应用程序在操作系统之间的可移植性。数据中心的大量应用软件与系统,其网络通信层都是使用套接字完成跨网络的进程间消息收发。同时,为充分发挥服务端上多核处理器的处理能力,应用主/父进程会通过进程复制(fork)机制,产生多个工作/子进程,各子进程分别处理不同套接字上的TCP连接。
InfiniBand RDMA用于高性能计算(High Performance Computing,HPC)集群的服务端互连,具有极高的吞吐量和极低的延迟。服务端上的RDMA网卡结合网络栈,旁路操作系统与处理器,主机上应用程序收发消息零拷贝,主机处理器核用于网络通信的开销极低。应用程序使用的编程接口,已经标准化为verbs API。由于RDMA一直在高性能计算领域应用,基本上只有用于高性能计算的应用,其网络通信层/框架使用verb接口。
RoCEv2(RDMA over Converged Ethernet)是基于UDP/IP协议承载RDMA,可部署于三层网络,它的报文结构是在原有的IB架构的报文上增加用户数据报协议(User DatagramProtocol,UDP)头、IP头和二层以太网报文头,通过UDP目的端口号4791标 识RoCE报文。RoCE v1协议:基于以太网承载RDMA,只能部署于二层网络,它的报文结构是在原有的IB架构的报文上增加二层以太网的报文头,通过Ethertype 0x8915标识RoCE报文。RoCE(RDMAover Converaged Ethernet)v1是基于现有Ethernet网络实现RDMA的一项技术。RoCEv1允许在现有以太网基础上实现RDMA技术,实现接近InfiniBand的性能和延迟指标,但不需要将现有网络基础设施升级成昂贵的InfiniBand,节约了大量的支出。RoCEv2基于标准网络的以太网(Ethernet PHY/MAC)、网络层(IP)和传输层(UDP)协议,这可以使得RoCEv2的网络流量可以经过传统的网络路由器路由。)支持继续使用以太网互连数据中心的服务端,既兼容数据中心的现有网络基础架构,又能充分利用以太网链路带宽10G/25G/40G/100G/200G/400G/800G或更高速率的快速升级。业界领先公司Mellanox(Nvidia),Intel,Broadcom等,已经设计量产了一系列支持RoCEv2的RNIC(RDMA Network Interface Card,RDMA网卡),成熟稳定,逐步进入市场。数据中心服务端采用RoCEv2后,卸载网络层&传输层到RNIC网卡,解决了TCP/IP协议栈耗费主机CPU算力问题,及由此导致的通信延迟问题。服务端上跨网络的应用进程间通信数据包,直接送达应用程序进程。剩下最为关键的一步,产业界长期开发积累的海量成熟稳定的应用软件与系统,采用套接字(socket)接口,与RDMA的verbs完全不兼容。修改数量庞大的应用软件与系统,需要耗费巨大的人力物力。网络通信层是软件类基础设施,是大型/分布式应用软件的核心底层支撑,任何性能方面的损耗,功能方面的缺失,兼容性方面的问题,安全性方面的隐患,都会以海量服务端数量相等的倍数放大,最终影响到整个数据中心。
服务端上软硬件协议栈层次如图2所示,以太网结合TCP/IP包括:以太网连接层(Ethernet Link Layer)、互联网协议层(IP)、传输控制协议层(TCP/UDP)、套接字层(socket library)和应用层(Applications);RoCEv2包括:以太网连接层(Ethernet LinkLayer)、互联网协议层(IP)、传输控制协议层(TCP/UDP)、IB传输协议层(IB TransportProtocol)、接口层(verbs library)和应用层(Applications);InfiniBand包括:IB连接层(IB Link Layer)、IB网络层(IB Network Layer)、IB传输协议层(IB TransportProtocol)、接口层(verbs library)和应用层(Applications)。
相关技术中,Mellanox开源软件产品消息加速器(VMA),可以提高基于消息和流的应用程序的性能。不需要修改应用程序,自动拦截应用程序的套接字调用,透明转换到内嵌轻量级用户态协议栈,完全旁路内核的网络堆栈。减少了用户空间/内核空间切换,但是并没有降低CPU处理传输协议的开销,占用主机CPU的算力稍有下降。带宽有提高,伴随占用CPU算力的提升。对比内核网络栈,延迟抖动降低;但是与RDMA比较,延迟抖动还是大很多。而实现本发明的ViSocket,同样在用户空间做透明转换,不需要修改应用程序,而且支持更加复杂的进程池中套接字自动转换。对比VMA,本发明把套接字自动转换为RDMA连接,带宽更高,延迟抖动更小,占用主机CPU算力接近于零。
虽然 RDMA 技术能够带来可喜的网络性能提升,但是想使用 RDMA 透明提升现有TCP 应用的网络性能仍有困难,这是因为 RDMA 网络的使用依赖一系列新的语义接口,包括 ibverbs 接口与 rdmacm 接口 (后统称 verbs 接口)。相较于传统 POSIX socket 接口,verbs 接口数量多,且更接近硬件语义。对于已有的基于 POSIX socket 接口实现的TCP 网络应用,想要享受 RDMA 带来的性能红利就不得不对应用程序进行大量改造,成本巨大。因此,我们希望能够在使用 RDMA 网络的同时沿用 socket 接口,使现有 socket 应用程序透明的享受 RDMA 服务。
Shared Memory Communication over RDMA (SMC-R) 是一种基于 RDMA 技术、兼容 socket 接口的内核网络协议,由 IBM 提出并在 2017 年贡献至 Linux 内核。SMC-R能够帮助 TCP 网络应用程序透明使用 RDMA,获得高带宽、低时延的网络通信服务。IBM与阿里巴巴开源并实际产品环境部署的SMC-R已经进入Linux内核代码树。代码由IBM的Ursula Braun在2017年1月提交linux,约2万行代码。SMC-R 作为一套与 TCP/IP 协议平行,向上兼容 socket 接口,底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能,因此SMC-R在内核中实现TCP/IP套接字自动转换为RDMA连接,对TCP/IP兼容性最好,能充分发挥RDMA的性能优势。缺点在于,存在用户空间/内核空间切换,RDMA性能损耗大。另外,SMC-R在内核中与传统的TCP/IP网络栈并列,需要增加AF_SMC地址族。需要修改应用涉及地址族的代码。SMC-R代码在内核中运行,代码质量&异常处理等方面的问题,都会极大地影响整个主机系统的稳定性。对比SMC-R,实现本发明的ViSocket,完全不需要修改应用程序,故障域更小;带宽更高,延迟抖动更小,占用主机CPU算力接近于零。
本公开实施例提供的非阻塞RDMA连接建立方法旨在解决数据中心使用套接字通信的应用,与RDMA网卡结合软件栈的verbs接口不匹配的问题。在具体实现时,需要支持RDMA RoCEv2的网卡配合。
本公开实施例提供的非阻塞RDMA连接建立方法,在服务端的内核层与应用程序层之间增加ViSocket层,在ViSocket层感知TCP连接,并基于TCP连接交互RDMA建链信息进而建立RDMA连接,从而完成套接字自动转换为RDMA连接,因此在无需修改代码的前提下,提高了带宽,减少了延迟抖动,使得主机CPU算力占用接近于零;并且通过轮询的方式与多个客户端建立RDMA连接,从而能够使得单个服务端支持多个客户端的RDMA连接数,提高CPU效率。本公开实施例提供的非阻塞RDMA连接建立方法可适用于资源较为有限,且对报文处理速度要求不高的场景,能够在资源有效利用的前提下实现RDMA报文的处理。
在一种示例性实例中,所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接之前还包括:
首先,当所述服务端的应用程序对应的应用主进程运行时,所述应用主进程调用所述ViSocket函数库,形成所述应用主进程对应的ViSocket层;
其次,当所述应用主进程调用侦听套接字的创建函数和套接字属性的设置函数时,所述应用主进程对应的ViSocket层拦截所述侦听套接字的创建函数的调用以及所述套接字属性的设置函数的调用,并创建侦听套接字并设置所创建的侦听套接字的属性为非阻塞,得到非阻塞侦听套接字返回给所述应用主进程。
示例性的,所述侦听套接字的创建函数用于创建侦听套接字,侦听套接字的创建函数包括:socket/bind/listen函数,所创建的侦听套接字为socket_L。所述套接字属性的设置函数用于设置套接字的属性,所述套接字属性的设置函数包括:fcntl/ioctl函数。
在一种示例性实例中,所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
首先,所述应用主进程通过非阻塞侦听套接字调用轮询函数用以轮询至少一个客户端的TCP连接请求;
其次,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
再次,每当所述应用主进程对应的ViSocket层轮询到一个客户端的TCP连接请求,所述应用主进程对应的ViSocket层将轮询到的客户端的TCP请求连接返回给所述应用主进程;
接下来,所述应用主进程调用TCP通信套接字的创建函数用以接收客户端的TCP连接请求时,所述应用主进程对应的ViSocket层拦截所述通信套接字的创建函数的调用,并接收所述客户端的TCP连接请求;
最后,所述应用主进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,并创建TCP通信套接字返回给所述应用主进程。
示例性的,通信套接字的创建函数包括:accept函数。轮询函数包括:select/poll/epoll函数。
在一种示例性实例中,所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
首选,当所述应用主进程调用套接字属性的设置函数用以设置所述应用主进程的TCP通信套接字的属性时,所述应用主进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述应用主进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述应用主进程;
其次,当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
再次,当所述应用主进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
最后,所述应用主进程的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
示例性的,数据接收函数包括:receive函数,数据发送函数包括:send函数。
示例性的,在应用主进程首次调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求的过程中,当建立了RDMA连接并获得了非阻塞RDMA通信套接字后,应用主进程对应的ViSocket层直接通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述服务端根据获得的RDMA建链信息,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
首先,当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
其次,当所述应用主进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述服务端通过ViSocket层的TCP连接,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
首先,所述应用主进程调用进程复制函数复制自身得到工作子进程,并运行所述工作子进程;其中,所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字和TCP通信套接字进行复制得到的与所述工作子进程对应的非阻塞侦听套接字和TCP通信套接字;
其次,当所述工作子进程运行时,所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层;
再次,当工作子进程调用套接字属性的设置函数用以设置所述工作子进程的TCP通信套接字的属性时,所述工作子进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述工作子进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述工作子进程;
接下来,当工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
再接下来,当所述工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
最后,所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
示例性的,进程复制函数包括:fork函数。
示例性的,应用主进程调用进程复制函数复制自身可以得到一个或多个工作子进程,当复制得到多个工作子进程,每个工作子进程都执行上述操作。
示例性的,在工作子进程首次调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求的过程中,当建立了RDMA连接并获得了非阻塞RDMA通信套接字后,工作子进程对应的ViSocket层直接通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
首先,当所述工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
其次,当所述工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述工作子进程对应的ViSocke层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层之后,还包括:
当所述工作子进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述工作子进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述工作子进程对应的非阻塞侦听套接字的引用。
在一种示例性实例中,所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述应用主进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞TCP通信套接字的引用。
本公开实施例提供的非阻塞RDMA连接建立方法,由于fork了一个或多个工作子进程,因此可以并行服务多个客户端,与多个客户端之间建立多条RDMA,并且ViSocket层把主进程可建立的RDMA连接,延迟到子进程中建立,以此避免RDMA连接不能跨进程使用的问题。
在一种示例性实例中,所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
首先,所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程,并运行得到的所有工作子进程;其中,每个所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字进行复制得到的与该工作子进程对应的非阻塞侦听套接字;
其次,当每一个所述工作子进程运行,该工作子进程调用ViSocket函数库运行,形成与该工作子进程对应的ViSocket层,且该工作子进程通过自身的非阻塞侦听套接字并调用轮询函数用以轮询至少一个客户端的TCP连接请求;
再次,每个所述工作子进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
接下来,每当一个所述工作子进程对应的ViSocket层轮询到一个客户端的TCP连接请求,将轮询到TCP连接请求的ViSocket层对应的工作子进程作为目标工作子进程,所述目标工作子进程对应的ViSocket层将轮询到的客户端的TCP连接请求返回给相应的目标工作子进程;
再接下来,所述目标工作子进程调用TCP通信套接字的创建函数和套接字属性的设置函数用以接收至少一个客户端的TCP连接请求时,所述目标工作子进程对应的ViSocket层拦截所述TCP通信套接字的创建函数的调用以及所述套接字属性的设置函数的调用,并接收所述客户端的TCP连接请求;
最后,所述目标工作子进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,创建TCP通信套接字并设置所创建的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给相应的目标工作子进程。
在一种示例性实例中,所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
首先,当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
其次,当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
最后,所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
示例性的,在目标工作子进程首次调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求的过程中,当建立了RDMA连接并获得了非阻塞RDMA通信套接字后,目标工作子进程对应的ViSocket层直接通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
首先,当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
其次,当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
在一种示例性实例中,所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程之后,还包括:
当应用主进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞侦听套接字的引用。
在一种示例性实例中,所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述目标工作子进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述目标工作子进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述目标工作子进程的非阻塞TCP通信套接字的引用。
本公开实施例提供的非阻塞RDMA连接建立方法,由于提前fork出了一个或多个工作子进程,因此当接收到来自客户端的请求后,可以直接进行处理,因此缩短请求处理时间,提高请求处理速度。
本公开实施例还提供一种非阻塞RDMA连接建立方法,如图3所示,包括:
201、应用主进程调用socket/bind/listen创建侦听套接字socket_L,并调用fcntl(或者ioctl)设置套接字属性,而应用主进程对应的ViSocket层(以下简称为ViSocket)在底层拦截相关调用,给上层应用主进程返回所创建的socket_L侦听套接字。
202a、应用主进程调用select/poll/epoll等轮询客户端连接事件,ViSocket在底层拦截此调用,等待客户端连接请求。
203、客户端1给服务端异步发送连接请求。
202b 、ViSocket接收客户端连接请求,建立同步连接,连接事件触发轮询调用返回应用主进程。
204a、应用主进程调用accept获取通信套接字,ViSocket在底层拦截此调用。
204b、ViSocket获取204a步骤所产生通信套接字socket_W,返回给用主进程。
205、应用主进程调用fork复制一个工作子进程1,加入到进程池,工作子进程1关闭侦听套接字socket_L的引用,携带并维持通信套接字socket_W1。
206、随着工作子进程1运行,产生了工作子进程1对应的ViSocket层,(以下简称为ViSocket1),ViSocket1拦截此close调用,关闭侦听套接字socket_L的引用。
207、工作子进程调用fcntl(或者ioctl),设置socket_W1为非阻塞套接字。而ViSocket在底层拦截相关调用,完成相关设置。
208、应用主进程关闭通信套接字socket_W,ViSocket拦截此调用,关闭通信套接字socket_W的引用。
步骤206、207、208无先后顺序关系,根据操作系统调度,在各自进程中异步执行。
209、工作子进程1首次调用select/poll/epoll等轮询客户端连接事件,ViSocket1拦截此调用,触发延迟建链。
210、ViSocket1通过通信套接字socket_W1通知客户端,启动建链。
211、客户端的ViSocket与ViSocket1,通过三次握手REQ/REP/RTU等类似机制,交换RDMA建链信息,建立客户/服务端的RDMA连接。产生RDMA通信套接字socket_RDMA。
212、客户端1通过RDMA连接,使用通信套接字socket_RDMA,实际发送/接收首批消息数据。
213、ViSocket1首次poll,通过RDMA连接收发消息的IO事件,触发返回工作子进程1,实际完成工作子进程1首次select/poll/epoll等轮询调用。
214a、工作子进程1执行消息数据收发,ViSocket1拦截此调用,执行实际的消息收发。
214b、ViSocket1完成消息收发后,返回工作子进程1。
工作子进程1的后续消息收发,不再需要执行209、210、211这些延迟建链步骤,直接通过212、213、214a、214b步骤完成消息收发。
本公开实施例提供的非阻塞RDMA连接建立方法,应用主进程作为服务端,创建侦听套接字,持续侦听接收客户端请求。客户端发起到服务端的连接,触发应用主进程从事件轮询返回,此时客户/服务端TCP连接已经建立。服务端产生一个工作套接字socket_W,作为服务端进程访问TCP连接的通信端点。
为了充分利用服务端的多个处理器核,处理更多客户端的连接请求,应用主进程通过fork创建多个工作子进程,形成进程池。各工作子进程并行运行,负责在各非阻塞工作套接字socket_W1上,接收客户端通过此TCP连接发送的请求消息,处理完成应用特定任务后,发送相应的响应消息。子进程的非阻塞工作套接字socket_W1,在应用主进程调用fork时,由操作系统复制socket_W而来,指向同一TCP连接。
ViSocket拦截应用主进程的accept调用,并不实际启动RDMA建链流程,而是直接返回一个同步套接字给应用,并在ViSocket内部记录socket_W指向此同步套接字。
应用主进程fork产生的任何一个工作子进程,携带的工作套接字socket_W1,转换为非阻塞套接字,实际上是不能用于工作子进程收发数据的同步套接字,因为此套接字对应的RDMA连接并未建立。ViSocket把主进程可建立的RDMA连接,延迟到子进程中建立,以此避免RDMA连接不能跨进程使用的问题。
工作子进程调用fcntl/ioctl,设置socket_W1为非阻塞模式。ViSocket拦截工作子进程的首次select/poll/epoll类调用,轮询IO事件,检查发现套接字为同步套接字,立即启动建立RDMA连接的流程。等待RDMA建链成功,ViSocket内部记录此套接字为可以正常工作的套接字socket_RDMA,指向RDMA连接;并通过RDMA正常收发数据。ViSocket拦截工作子进程的后续select/poll/epoll轮询类调用,轮询IO事件,通过socket_W1指向的socket_RDMA正常收发数据。
ViSocket拦截工作子进程的close类调用,启动释放RDMA连接的流程。等待RDMA拆链成功,清除内部socket_W1相关记录,返回工作子进程的close类调用。
相应的,这种非阻塞RDMA连接建立方法的函数调用过程如图4所示,应用主进程调用侦听套接字创建函数socket_L,调用套接字属性设置函数O_NONBLOCK@socket_L设置为非阻塞套接字,调用绑定函数bind,然后再调用套接字用途设置函数listen,并利用绑定函数以绑定所创建的套接字的用途用于侦听,接下来应用主进程调用轮询函数select/poll/epoll轮询至少一个客户端的TCP连接请求,调用TCP通信套接字的创建函数accept用以接收客户端的TCP连接请求,应用主进程调用进程复制函数fork复制自身得到至少一个工作子进程,调用套接字关闭函数close@ socket_W用以关闭自身的TCP通信套接字。
每个工作子进程调用套接字关闭函数close@socket_L用以关闭自身的非阻塞侦听套接字,调用套接字属性的设置函数O_NONBLOCK@socke_W用以设置所述工作子进程的TCP通信套接字的属性,调用轮询函数select/poll/epoll轮询至少一个客户端的数据接收请求或数据发送请求,调用数据接收或数据发送函数send/rev进行数据接收或发送,调用进程关闭函数close结束工作子进程。
本公开实施例还提供一种非阻塞RDMA连接建立方法,如图5所示,包括:
301、应用主进程调用socket/bind/listen创建侦听套接字socket_L,并调用fcntl(或者ioctl)设置套接字属性,而应用主进程对应的ViSocket层(以下简称为ViSocket)在底层拦截相关调用,给上层应用主进程返回所创建的socket_L侦听套接字。
302、应用主进程调用fork复制一个工作子进程1,加入到进程池,工作子进程1携带侦听套接字的引用socket_L1,开始运行,随着工作子进程1运行,产生了工作子进程1对应的ViSocket层,(以下简称为ViSocket1)。
303a、工作子进程1调用select/poll/epoll等轮询客户端连接事件,ViSocket1在底层拦截此调用,等待客户端连接请求。
304、客户端1给服务端异步发送连接请求。
303b、ViSocket1接收客户端连接请求,建立同步连接,产生通信套接字socket_W,返回应用主进程。
305a、工作子进程1调用accept获取通信套接字,ViSocket 在底层拦截此调用。
305b、ViSocket获取305a步骤所产生通信套接字socket_W,返回给工作子进程1。
306、工作子进程1调用fcntl (或者ioctl),设置socket_W为非阻塞套接字,而ViSocket1 在底层拦截相关调用,完成相关设置。
307、应用主进程关闭侦听套接字socket_L,ViSocket1拦截此调用,关闭侦听套接字socket_L的引用。
308、工作子进程1首次调用select/poll/epoll 等轮询客户端连接事件,ViSocket1 在底层拦截此调用,触发延迟建链。
309、ViSocket1通过通信套接字socket_W通知客户端,启动建链。
310、ViSocket1与客户端的ViSocket,通过三次握手REQ/REP/RTU等类似机制,交换RDMA建链信息,建立客户/服务端的RDMA连接。产生RDMA通信套接字socket_RDMA。
311、客户端1通过RDMA连接,实际发送/接收首批消息数据。
312、ViSocket1首次poll,通过RDMA连接收发消息的IO事件,触发返回工作子进程1,实际完成工作子进程1首次select/poll/epoll等轮询调用。
313、工作子进程1实际接收/发送首批消息数据,ViSocket1拦截此调用并执行收发。
314、ViSocket1完成消息收发后,返回工作子进程1。
工作子进程1的后续消息收发,不再需要执行308、309、310这些延迟建链步骤,直接通过311、312、313、314步骤完成消息收发。
本公开实施例提供的非阻塞RDMA连接建立方法,应用主进程作为服务端,创建侦听套接字,客户端发起到服务端的连接,触发工作子进程从事件轮询返回,此时客户/服务端TCP连接已经建立。服务端工作子进程产生一个工作套接字socket_W,作为工作子进程访问TCP连接的通信端点。
为了充分利用服务端的多个处理器核,处理更多客户端的连接请求,应用主进程通过fork创建多个工作子进程,形成进程池。各工作子进程并行运行,负责在各非阻塞侦听套接字socket_L1上,接收客户端的请求,产生工作套接字socket_W。通过非阻塞工作套接字socket_W,接收客户端通过此TCP连接发送的请求消息,处理完成应用特定任务后,发送相应的响应消息。子进程的侦听套接字socket_L1,在应用主进程调用fork时,由操作系统复制socket_L而来,指向同一侦听端口。
工作子进程调用fcntl/ioctl,设置socket_W1为非阻塞模式。客户端发起到服务端的连接,触发工作子进程从select/poll/epoll类轮询调用返回,此时客户端/服务端TCP连接已经建立。服务端工作子进程产生一个工作套接字socket_W,作为工作子进程访问TCP连接的通信端点。
ViSocket拦截工作子进程的accept调用,并不实际启动RDMA建链流程,而是直接返回一个同步套接字给应用,并在ViSocket内部记录socket_W指向此同步套接字。
应用主进程fork产生的任何一个工作子进程,通过accept获得的工作套接字socket_W,实际上是不能用于工作子进程收发数据的同步套接字,因为此套接字对应的RDMA连接并未建立。ViSocket把工作子进程可建立的RDMA连接,延迟到首次使用此连接收发数据时再建立。绝大多数应用进程,都不会在使用某一连接收发过数据后,fork产生工作子进程的子进程,工作子进程继续/共享使用此连接收发数据。基于这种情况,加上RDMA连接本身也不能跨进程使用的问题,首次使用连接是最佳延迟建链的时间点。
ViSocket拦截工作子进程的首次select/poll/epoll轮询类调用,轮询IO事件,通过socket_W指向的socket_RDMA正常收发数据。
ViSocket拦截工作子进程的后续select/poll/epoll轮询类调用,轮询IO事件,通过socket_W1指向的socket_RDMA正常收发数据。
ViSocket拦截工作子进程的close类调用,启动释放RDMA连接的流程。等待RDMA拆链成功,清除内部socket_W相关记录,返回工作子进程的close类调用。
相应的,这种非阻塞RDMA连接建立方法的函数调用过程如图6所示,应用主进程调用侦听套接字创建函数socket_L,调用套接字属性设置函数O_NONBLOCK@socket_L设置为非阻塞套接字,调用绑定函数bind,然后再调用套接字用途设置函数listen,并利用绑定函数以绑定所创建的套接字的用途用于侦听,接下来调用进程复制函数fork,产生了至少一个工作子进程,应用主进程调用close结束进程。
每个工作子进程调用轮询函数poll@socket_L轮询至少一个客户端的数据接收请求或数据发送请求,每个目标工作子进程调用TCP通信套接字的创建函数accept用以接收客户端的TCP连接请求,调用套接字属性设置函数O_NONBLOCK@socket_W设置为非阻塞套接字,调用轮询函数poll@socket_W轮询至少一个客户端的数据接收请求或数据发送请求,调用数据接收或数据发送函数send/rev进行数据接收或发送,调用进程关闭函数close结束工作子进程,调用套接字关闭函数close@socket_L用以关闭自身的非阻塞侦听套接字。
本公开实施例还提供了一种服务端,包括存储器和处理器,所述存储器用于保存可执行程序;
所述处理器用于读取执行所述可执行程序,以实现如上述任一实施例的非阻塞RDMA连接建立方法。
应理解,处理器可以是中央处理单元(Central Processing Unit,简称为“CPU”),处理器还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。
在实现过程中,终端设备所执行的处理可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。即本公开实施例所公开的方法的步骤可以体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。

Claims (14)

1.一种非阻塞RDMA连接建立方法,其特征在于,包括:
服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,其中,所述ViSocket层由所述服务端控制进程调用ViSocket函数库形成,所述ViSocket函数库是预先建立的集成有TCP系统调用函数和RDMA信息传输函数的函数库,所述ViSocket层用于将通用的TCP系统调用转换为RDMA可识别传输操作;
所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息;
所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接;
所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接之前还包括:
当所述服务端的应用程序对应的应用主进程运行时,所述应用主进程调用所述ViSocket函数库,形成所述应用主进程对应的ViSocket层;
当所述应用主进程调用侦听套接字的创建函数和套接字属性的设置函数时,所述应用主进程对应的ViSocket层拦截所述侦听套接字的创建函数的调用以及所述套接字属性的设置函数的调用,创建侦听套接字并设置所创建的侦听套接字的属性为非阻塞,得到非阻塞侦听套接字返回给所述应用主进程。
2.根据权利要求1所述的方法,其特征在于,所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
所述应用主进程通过非阻塞侦听套接字调用轮询函数用以轮询至少一个客户端的TCP连接请求;
所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
每当所述应用主进程对应的ViSocket层轮询到一个客户端的TCP连接请求,所述应用主进程对应的ViSocket层将轮询到的客户端的TCP请求连接返回给所述应用主进程;
所述应用主进程调用TCP通信套接字的创建函数用以接收客户端的TCP连接请求时,所述应用主进程对应的ViSocket层拦截所述通信套接字的创建函数的调用,并接收所述客户端的TCP连接请求;
所述应用主进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,并创建TCP通信套接字返回给所述应用主进程。
3.根据权利要求2所述的方法,其特征在于,所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
当所述应用主进程调用套接字属性的设置函数用以设置所述应用主进程的TCP通信套接字的属性时,所述应用主进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述应用主进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述应用主进程;
当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述应用主进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述应用主进程的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
4.根据权利要求2或3所述的方法,其特征在于,所述服务端根据获得的RDMA建链信息,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述应用主进程通过自身的非阻塞TCP通信套接字调用轮询函数用以轮询至少一个客户端的数据接收请求或数据发送请求时,所述应用主进程对应的ViSocket层拦截所述用以轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述应用主进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述应用主进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
5.根据权利要求2所述的方法,其特征在于,所述服务端通过ViSocket层的TCP连接,并在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
所述应用主进程调用进程复制函数复制自身得到工作子进程,并运行所述工作子进程;其中,所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字和TCP通信套接字进行复制得到的与所述工作子进程对应的非阻塞侦听套接字和TCP通信套接字;
当所述工作子进程运行时,所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层;
当工作子进程调用套接字属性的设置函数用以设置所述工作子进程的TCP通信套接字的属性时,所述工作子进程对应的ViSocket层拦截所述套接字属性的设置函数的调用,并设置所述工作子进程的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给所述工作子进程;
当工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
6.根据权利要求5所述的方法,其特征在于,所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述工作子进程对应的ViSocke层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
7.根据权利要求5所述的方法,其特征在于,所述工作子进程调用ViSocket函数库运行,形成所述工作子进程对应的ViSocket层之后,还包括:
当所述工作子进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述工作子进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述工作子进程对应的非阻塞侦听套接字的引用。
8.根据权利要求5所述的方法,其特征在于,所述工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述应用主进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞TCP通信套接字的引用。
9.根据权利要求1所述的方法,其特征在于,所述服务端通过轮询客户端的TCP连接请求在ViSocket层与至少一个客户端建立TCP连接,包括:
所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程,并运行得到的所有工作子进程;其中,每个所述工作子进程包括:对所述应用主进程对应的非阻塞侦听套接字进行复制得到的与该工作子进程对应的非阻塞侦听套接字;
当每一个所述工作子进程运行,该工作子进程调用ViSocket函数库运行,形成与该工作子进程对应的ViSocket层,且该工作子进程通过自身的非阻塞侦听套接字并调用轮询函数用以轮询至少一个客户端的TCP连接请求;
每个所述工作子进程对应的ViSocket层拦截所述用以轮询至少一个客户端的TCP连接请求的轮询函数的调用,并轮询是否接收到所述至少一个客户端的TCP连接请求;
每当一个所述工作子进程对应的ViSocket层轮询到一个客户端的TCP连接请求,将轮询到TCP连接请求的ViSocket层对应的工作子进程作为目标工作子进程,所述目标工作子进程对应的ViSocket层将轮询到的客户端的TCP连接请求返回给相应的目标工作子进程;
所述目标工作子进程调用TCP通信套接字的创建函数和套接字属性的设置函数用以接收至少一个客户端的TCP连接请求时,所述目标工作子进程对应的ViSocket层拦截所述TCP通信套接字的创建函数的调用以及所述套接字属性的设置函数的调用,并接收所述客户端的TCP连接请求;
所述目标工作子进程对应的ViSocket层根据所述TCP连接请求与所述客户端建立TCP连接,创建TCP通信套接字并设置所创建的TCP通信套接字的属性为非阻塞,得到非阻塞TCP通信套接字返回给相应的目标工作子进程。
10.根据权利要求9所述的方法,其特征在于,所述服务端通过ViSocket层的TCP连接,在轮询客户端数据接收或发送的过程中与所述至少一个客户端交换RDMA建链信息,并根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接,包括:
当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间未建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞TCP通信套接字通知所述客户端发送RDMA建链请求;
所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接,创建RDMA通信套接字并设置所创建的RDMA通信套接字的属性为非阻塞,得到非阻塞RDMA通信套接字。
11.根据权利要求10所述的方法,其特征在于,所述服务端根据获得的RDMA建链信息,在轮询客户端数据接收或发送的过程中与所述至少一个客户端建立RDMA连接之后,还包括:
当所述目标工作子进程通过自身的非阻塞TCP通信套接字调用轮询函数轮询至少一个客户端的数据接收请求或数据发送请求时,所述目标工作子进程对应的ViSocket层拦截所述轮询至少一个客户端的数据接收请求或数据发送请求的轮询函数的调用;
当所述目标工作子进程对应的ViSocket层判断自身与所述客户端之间已建立RDMA连接时,所述目标工作子进程对应的ViSocket层通过自身的非阻塞RDMA通信套接字并通过建立的RDMA连接进行数据接收或发送。
12.根据权利要求9所述的方法,其特征在于,所述应用主进程调用进程复制函数复制自身得到至少一个工作子进程之后,还包括:
当应用主进程调用套接字关闭函数用以关闭自身的非阻塞侦听套接字时,所述应用主进程对应的ViSocket层拦截用以关闭非阻塞侦听套接字的套接字关闭函数的调用,并关闭所述应用主进程的非阻塞侦听套接字的引用。
13.根据权利要求10所述的方法,其特征在于,所述目标工作子进程对应的ViSocket层通过TCP连接接收来自所述客户端的与所述RDMA建链请求对应的RDMA建链信息,并根据所述RDMA建链信息与所述客户端建立RDMA连接之后,还包括:
当所述目标工作子进程调用套接字关闭函数用以关闭自身的非阻塞TCP通信套接字时,所述目标工作子进程对应的ViSocket层拦截用以关闭非阻塞TCP通信套接字的套接字关闭函数的调用,并关闭所述目标工作子进程的非阻塞TCP通信套接字的引用。
14.一种服务端,其特征在于,包括存储器和处理器,所述存储器用于保存可执行程序;
所述处理器用于读取执行所述可执行程序,以实现如权利要求1-13任一项所述的非阻塞RDMA连接建立方法。
CN202310152912.XA 2023-02-22 2023-02-22 一种非阻塞rdma连接建立方法及装置 Active CN115834660B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310152912.XA CN115834660B (zh) 2023-02-22 2023-02-22 一种非阻塞rdma连接建立方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310152912.XA CN115834660B (zh) 2023-02-22 2023-02-22 一种非阻塞rdma连接建立方法及装置

Publications (2)

Publication Number Publication Date
CN115834660A CN115834660A (zh) 2023-03-21
CN115834660B true CN115834660B (zh) 2023-05-26

Family

ID=85522146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310152912.XA Active CN115834660B (zh) 2023-02-22 2023-02-22 一种非阻塞rdma连接建立方法及装置

Country Status (1)

Country Link
CN (1) CN115834660B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116257327B (zh) * 2023-05-15 2023-09-15 浙江保融科技股份有限公司 一种在jvm非阻塞系统中调用阻塞式客户端库的方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106850829A (zh) * 2017-02-28 2017-06-13 苏州星熙数据科技有限公司 一种基于非阻塞通信的微服务系统设计方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8769036B2 (en) * 2009-10-30 2014-07-01 International Business Machines Corporation Direct sending and asynchronous transmission for RDMA software implementations
CN108494817B (zh) * 2018-02-08 2022-03-04 华为技术有限公司 数据传输方法、相关装置及系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106850829A (zh) * 2017-02-28 2017-06-13 苏州星熙数据科技有限公司 一种基于非阻塞通信的微服务系统设计方法

Also Published As

Publication number Publication date
CN115834660A (zh) 2023-03-21

Similar Documents

Publication Publication Date Title
US7274706B1 (en) Methods and systems for processing network data
CN111277616B (zh) 一种基于rdma的数据传输方法和分布式共享内存系统
WO2020077680A1 (zh) 数据传输方法、系统以及代理服务器
CN111614631B (zh) 一种用户态流水线架构防火墙系统
US20020099827A1 (en) Filtering calls in system area networks
CN112291293B (zh) 任务处理方法、相关设备及计算机存储介质
WO2022148363A1 (zh) 数据传输方法及数据传输服务器
EP2838243B1 (en) Capability aggregation and exposure method and system
US10609125B2 (en) Method and system for transmitting communication data
CN115834660B (zh) 一种非阻塞rdma连接建立方法及装置
US8527661B1 (en) Gateway for connecting clients and servers utilizing remote direct memory access controls to separate data path from control path
WO2024037296A1 (zh) 基于协议族的quic数据传输方法及装置
WO2022032984A1 (zh) 一种mqtt协议仿真方法及仿真设备
WO2022068756A1 (zh) 基于微服务的服务网格系统及服务治理方法
US20230350825A1 (en) Communications for field programmable gate array device
WO2013120325A1 (zh) 浏览器与浏览器直通的方法、装置和通信系统
CN106131162B (zh) 一种基于iocp机制实现网络服务代理的方法
CN114024910A (zh) 一种用于金融交易系统的极低延时可靠通讯系统及方法
CN115866010B (zh) 一种rdma连接建立方法及装置
Riddoch et al. Distributed computing with the CLAN network
Qi et al. X-IO: A high-performance unified I/O interface using lock-free shared memory processing
CN115509435A (zh) 一种数据读写方法、装置、设备、介质
Liu et al. L 2 5GC+: An Improved, 3GPP-compliant 5G Core for Low-latency Control Plane Operations
WO2022222553A1 (zh) 一种容器间的通信方法及相关产品
WO2024113776A1 (zh) 数据传输方法以及相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant