CN111586040B - 高性能网络数据接收方法及其系统 - Google Patents
高性能网络数据接收方法及其系统 Download PDFInfo
- Publication number
- CN111586040B CN111586040B CN202010373674.1A CN202010373674A CN111586040B CN 111586040 B CN111586040 B CN 111586040B CN 202010373674 A CN202010373674 A CN 202010373674A CN 111586040 B CN111586040 B CN 111586040B
- Authority
- CN
- China
- Prior art keywords
- descriptor
- network packet
- network
- packet
- application
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Abstract
提供了高性能网络数据接收方法及其系统。所提供的高性能网络接收网络包的方法,包括:获取网络包描述符;若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到所述应用接收缓存;若不存在同网络包描述符对应的套接字描述符关联的应用接收缓存,根据网络包描述符与套接字描述符生成PNode节点并添加到PNode链表。
Description
技术领域
本申请涉及通信技术,具体地,涉及在嵌入式设备中的网络协议栈高速接收网络数据的方法及其系统。
背景技术
信息处理设备通常通过接入网络来同其他设备通信。IP(InternetProtocol)协议被广泛应用于网络通信中。网络协议是分层的,IP协议之上承载了诸如TCP(TransmissionControlProtocol,传输控制协议)、UDP(UserDatagramProtocol,用户数据报协议)等多种协议。
图1展示了信息处理设备处理网络数据的软件示意图。
诸如计算机、服务器、基于DSP(DigitalSignalProcessor)的计算设备通过例如网络适配器或集成于处理器芯片的网络加速器(以下统称为网络适配器)连接到网络。处理器运行网络适配器驱动程序将网络适配器接收的数据包提供网络协议栈。网络协议栈包括例如IP层、协议层和/或套接字层,并作为程序模块由操作系统提供或被操作系统加载。IP层根据IP协议向上层交付IP协议数据包。协议层从IP协议数据包中提取各自上层协议的数据包,并根据各自协议处理。套接字是应用程序访问网络的标准接口,套接字层向应用程序提供套接字(Socket)。
NDK(Network Developer’s Kit,网络开发者工具包)包括TI公司为其DSP提供的网络协议栈。IwIP是用于嵌入式设备的开源的网络协议栈。这些协议栈使用自己的缓存处理多种网络包。
在使用高速网络(例如千兆或万兆以太网、光纤)等场合,网络适配器将向协议栈提供高频且整体上大带宽的数据包,而处理器、特别是嵌入式处理器的处理能力有限,传统的网络协议栈会因无法及时处理网络适配器交付的数据包而出现丢包。一些具有强实时和/或高可靠的应用场景下,对丢包率有严格的要求,因而现有技术的网络协议栈不能满足应用要求。
中国专利CN101340574B提供了“实现零拷贝发送流媒体数据的方法及系统”,应用程序使用经重定义的sendmsg系统调用,向网络协议栈描述用户数据缓存,由网络协议栈将用户数据缓存搬移到网卡的发送缓存区。中国专利申请CN101873337A提供了“基于rt8169千兆网卡和Linux操作系统的零拷贝数据捕获技术”,通过在内核中提供VCDM模块让用户空间与内核空间数据共享。然而这些方法都需要改变应用程序访问网络的接口,引入了新的复杂度。并且都基于Linux操作系统,不能直接应用于非运行Linux操作系统的嵌入式设备。
发明内容
一些嵌入式设备包括多个计算节点。计算节点间由高速网络耦合。计算节点包括一个或多个DSP处理器核。DSP理器核上运行的应用通过UDP协议交换消息。需要解决用尽可能低的处理器资源在高速网络上通过标准套接字编程接口可靠地接收UDP数据包的问题。进一步地,本申请的技术方案还特别应用于具有下列一种或多种特征的计算环境,多个计算节点之间的网络拓扑简单,网络上承载同一UDP包的多个IP包几乎不发生乱序到达目的端设备,网络上承载的协议简单,例如在IP包中仅承载UDP数据包或少数上层协议的数据包。实现了高效率的高速网络数据接收,解决高速网络中,传统网络协议栈无法满足性能要求的问题,降低了网络协议栈对处理器的占用率,减少了中断中的数据处理对应用程序的影响。
根据本申请的第一方面,提供了根据本申请第一方面的第一接收网络包的方法,包括:获取网络包描述符;若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到所述应用接收缓存;若不存在同网络包描述符对应的套接字描述符关联的应用接收缓存,根据网络包描述符与套接字描述符生成PNode节点并添加到PNode链表。
根据本申请第一方面的第一接收网络包的方法,提供了根据本申请第一方面的第二接收网络包的方法,其中所述网络包描述符对应的网络包承载UDP包。
根据本申请第一方面的第二接收网络包的方法,提供了根据本申请第一方面的第三接收网络包的方法,还包括:响应于已接收了完整的UDP包,向要接收所述UDP包的应用程序发送信号。
根据本申请第一方面的第一至第三接收网络包的方法之一,提供了根据本申请第一方面的第四接收网络包的方法,还包括:响应于调用了Recvfrom()方法,遍历所述PNode链表,从所述PNode链表中获取同所述Recvfrom()方法指示的套接字描述符对应的一个或多个PNode节点;将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存。
根据本申请第一方面的第四接收网络包的方法,提供了根据本申请第一方面的第五接收网络包的方法,还包括:响应于将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,若已向所述应用接收缓存搬移了完整的UDP包,向要接收所述UDP包的应用程序发送信号。
根据本申请第一方面的第四或第五接收网络包的方法,提供了根据本申请第一方面的第六接收网络包的方法,还包括:响应于将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,若尚未向所述应用接收缓存搬移完整的UDP包,中止对所述Recvfrom()方法的处理。
根据本申请第一方面的第四至第六接收网络包的方法之一,提供了根据本申请第一方面的第七接收网络包的方法,还包括:响应于调用了Recvfrom()方法,在所述Recvfrom()方法指示的套接字描述符中记录所述Recvfrom()方法指示的应用接收缓存。
根据本申请第一方面的第一至第七接收网络包的方法之一,提供了根据本申请第一方面的第八接收网络包的方法,其中若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到由所述套接字描述符记录的用于所述应用接收缓存的偏移值所指示的所述应用接收缓存的位置;以及还更新所述套接字描述符记录的用于所述应用接收缓存的偏移值。
根据本申请第一方面的第四至第八接收网络包的方法之一,提供了根据本申请第一方面的第九接收网络包的方法,其中所述将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,是将所述一个或多个PNode节点对应的网络包搬移到该网络包在UDP包中的偏移值所指示的应用接收缓存的位置。
根据本申请第一方面的第一至第九接收网络包的方法之一,提供了根据本申请第一方面的第十接收网络包的方法,还包括:响应于根据网络包描述符与套接字描述符生成PNode节点并添加到PNode链表,还在所述套接字描述符中记录游标,游标指示了为所述套接字描述符已经添加到PNode链表中的PNode节点所对应的网络包的数据量。
根据本申请第一方面的第十接收网络包的方法,提供了根据本申请第一方面的第十一接收网络包的方法,还包括:响应于调用了Recvfrom()方法,若所述游标指示为所述套接字描述符有PNode节点存在于所述PNode链表中,而遍历所述PNode链表。
根据本申请第一方面的第十或第十一接收网络包的方法,提供了根据本申请第一方面的第十二接收网络包的方法,还包括:响应于调用了Recvfrom()方法,若所述游标指示为所述套接字描述符没有PNode节点存在于所述PNode链表中,则不遍历所述PNode链表,并中止对所述Recvfrom()方法的处理。
根据本申请第一方面的第一至第十二接收网络包的方法之一,提供了根据本申请第一方面的第十三接收网络包的方法,还包括:若所述网络包描述符指示的网络包承载了UDP包的首包,且若不存在同所述网络包描述符对应的套接字描述符,为所述网络包描述符分配套接字描述符,在分配的套接字描述符中记录所述网络包描述符的网络地址。
根据本申请第一方面的第一至第十三接收网络包的方法之一,提供了根据本申请第一方面的第十四接收网络包的方法,还包括:响应于调用了Socket()方法,将同调用Socket()方法提供的参数对应的套接字描述符或其索引作为所述调用了Socket()方法的返回值。
根据本申请第一方面的第一至第十四接收网络包的方法之一,提供了根据本申请第一方面的第十五接收网络包的方法,还包括:若存在同所述网络包描述符对应的套接字描述符关联的应用接收缓存,且若所述网络包描述符对应的网络包同用于所述应用接收缓存的偏移值“失配”,从所述PNode链表中清除同所述套接字描述符对应的一个或多个PNode节点;以及还清空所述应用接收缓存。
根据本申请第一方面的第一至第十五接收网络包的方法之一,提供了根据本申请第一方面的第十六接收网络包的方法,还包括:若所述网络包描述符指示的网络包承载了UDP包的尾包,且若存在同所述网络包描述符对应的套接字描述符关联的应用接收缓存,还遍历所述PNode链表,从所述PNode链表中获取同所述套接字描述符对应的一个或多个PNode节点;将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存;以及向要接收所述UDP包的应用程序发送信号。
根据本申请第一方面的第一至第十六接收网络包的方法之一,提供了根据本申请第一方面的第十七接收网络包的方法,还包括:响应于接收了承载组播UDP包或广播UDP包的网络包,向多核处理器的指定处理器核发送指示了所述网络包的网络包描述符,并向所述指定处理器发送中断。
根据本申请的第二方面,提供了根据本申请第二方面的第一信息处理设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现根据本申请第一方面的第一至第十七的接收网络包的方法之一。
根据本申请的第三方面,提供了根据本申请第三方面的第一接收网络包的系统,包括:获取网络包描述符的模块;网络包搬移模块,用于若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到所述应用接收缓存;以及PNode链表管理模块,用于若不存在同网络包描述符对应的套接字描述符关联的应用接收缓存,根据网络包描述符与套接字描述符生成PNode节点并添加到PNode链表。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1展示了信息处理设备处理网络数据的软件示意图;
图2展示了根据本申请实施例的信息处理设备的框图;
图3展示了根据本申请实施例的接收网络数据的流程图;
图4A-4C展示了根据本申请实施例的接收UDP数据包过程的示意图;
图5A展示了根据本申请实施例的高性能UDP处理单元响应于接收网络包的流程图;
图5B展示了根据本申请实施例的高性能UDP处理单元响应于调用Recvfrom()方法的流程图;
图6展示了根据本申请又一实施例的高性能UDP处理单元响应于接收网络包的流程图;以及
图7展示了根据本申请再一实施例的信息处理设备的框图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图2展示了根据本申请实施例的信息处理设备的框图。
信息处理设备包括处理器(未示出)、存储器(未示出)与网络适配器210。处理器运行应用程序240、网络适配器驱动程序260以及作为网络协议栈的高性能UDP处理单元280。
网络适配器210耦合到网络,将从网络收到的例如IP数据包存储到网络包缓存212。网络包缓存212由信息处理设备的存储器提供,或者由网络适配器210提供。网络适配器驱动260响应于网络适配器210收到数据包,生成网络包描述符并提供给高性能UDP处理单元280。网络包描述符指示了对应的数据包在网络包缓存212中的存储地址、诸如IP地址、UDP地址与端口的网络包地址。作为举例,网络适配器驱动260以中断方式向高性能UDP处理单元280提供网络包描述符。可选地,高性能UDP处理单元280以轮询方式从网络适配器驱动260获取网络包描述符。
高性能UDP处理单元280还向应用程序240提供标准套接字接口,例如,允许应用程序通过Socket()和Recvfrom()方法通过套接字获取UDP数据包。为提供标准套接字接口,高性能UDP处理单元280维护一个或多个套接字描述符。套接字描述符可被绑定到源IP地址、UDP协议与端口号。从而响应于应用程序240调用Socket()方法,高性能UDP处理单元280将同调用Socket()方法提供的参数对应的套接字描述符或其索引提供给应用程序240。响应于应用程序240调用Recvfrom(socket,buffer)方法,高性能UDP处理单元280在Recvfrom(socket,buffer)方法的参数“socket”所指示的套接字描述符中记录应用程序240为其分配的应用接收缓存242。应用程序240获取应用接收缓存242,向UDP处理单元280指示将要接收的UDP数据包填充到应用接收缓存242。响应于应用程序240调用Recvfrom(socket,buffer)方法,应用程序240被挂起,以等待Recvfrom(socket,buffer)方法获取所需要的UDP数据包。
高性能UDP处理单元280将从网络适配器驱动260获取的网络包描述符根据其指示的网络地址同套接字描述符之一关联,以及根据网络包描述符向PNode链表添加节点或者从网络包缓存212向应用接收缓存242搬移网络包对应的数据。DMA单元270用于用网络包缓存212向应用接收缓存242搬移数据。
PNode链表包括多个节点,每个节点被称为PNode。PNode指示了例如网络包描述符与套接字描述符。
作为举例,高性能UDP处理单元280根据同获取的网络包描述符关联的套接字描述符,知晓该套接字描述符是否被绑定到应用接收缓存242。如果该套接字描述符被绑定到应用接收缓存242,高性能UDP处理单元280根据获取的网络包描述符将网络包对应的数据通过DMA单元270搬移到应用接收缓存242。如果该套接字描述符未被绑定到应用接收缓存242,高性能UDP处理单元280根据获取的网络包描述符生成PNode作为节点添加到PNode链表。
高性能UDP处理单元280还响应于向应用接收缓存242提供了完整的UDP数据包而向应用程序242发信号,以指示其调用的Recvfrom(socket,buffer)方法处理完成。
可选地,高性能UDP处理单元280及其维护的套接字描述符与PNode链表,以及网络适配器驱动260运行在内核态,而应用程序240运行在用户态。
图3展示了根据本申请实施例的接收网络数据的流程图。
应用程序240通多调用socket()与Recvfrom()方法接收UDP数据包。网络适配器驱动程序260交付网络适配器接收的数据包。但是,网络适配器接收数据包的时间与应用程序240调用Recvfrom()方法的时间点都是随机的。因而在应用程序240调用Recvfrom()方法时,网络适配器驱动260可能尚未交付数据包,或者尚未交付组成UDP数据包的所有数据包。而在网络适配器驱动260交付数据包时,应用程序240可能尚未调用Recvfrom()方法来接受数据包。
根据本申请实施例的高性能UDP处理单元280将网络适配器驱动260交付的数据包组装为UDP数据包并按标准的套接字接口提供给应用程序240。
参看图3,应用程序240调用Socket()方法(340)。现有技术中,协议栈的套接字层提供Socket()方法的实现。根据本申请的实施例,高性能UDP处理单元280提供Socket()方法的实现,响应于应用程序240调用Socket()方法并根据Socket()方法指示的网络地址等参数,将自身维护的套接字描述符之一或其索引作为Socket()方法的返回值提供给应用程序240(380)。在一个例子中,若高性能UDP处理单元280自身维护的套接字描述符之一具有Socket()方法指示的网络地址,将该套接字描述符作为Socket()方法的返回值提供给应用程序240。依然作为举例,若高性能UDP处理单元280自身维护的套接字描述符没有任何一个具有Socket()方法指示的网络地址,则分配未被使用套接字描述符,在分配的套接字描述符中记录Socket()方法指示的网络地址,并将该套接字描述符作为返回值提供给应用程序240。
应用程序240调用Recefrom()方法(342)。Recefrom()方法指示了应用接收缓存242与所使用的套接字描述符。高性能UDP处理单元280提供Recefrom()方法的实现,响应于应用程序240调用Recefrom()方法,将所指示的套接字描述符与应用接收缓存242关联(384)。从而高性能UDP处理单元280知晓应用程序240已为该套接字描述符提供了应用接收缓存242,并在该套接字描述符中记录应用接收缓存242的索引。对于指定的套接字描述符,其可能被提供了应用接收缓存,也可能因应用程序240尚未调用同其关联的Recvfrom()方法而未被提供应用接收缓存。
网络适配器驱动260从网络适配器获取网络包描述符(360)并提供给高性能UDP处理单元280。作为一个例子,网络适配器驱动260仅将承载UDP数据包的网络包描述符360提供给高性能UDP处理单元280。作为又一个例子,网络适配器驱动260将代表多种或所有网络包的网络包描述符提供给高性能UDP处理单元280,并由高性能UDP处理单元280从接收的网络包描述符中识别出代表UDP数据包的网络包描述符并继续处理,而丢弃非代表UDP数据包的网络包描述符。
高性能UDP处理单元280处理接收的网络包描述符(382)。高性能UDP处理单元280从接收的网络包描述符中获取网络地址(以及UDP端口),并根据获取的网络地址获取对应的套接字描述符。从获取的套接字描述符中,识别该套接字描述符是否有对应的应用接收缓存。若该套接字描述符已经被提供了应用接收缓存242,高性能UDP处理单元280根据接收的网络包描述符将网络包描述符对应的网络包数据搬移到应用接收缓存242。进一步地,套接字描述符中还记录了用于应用接收缓存242的偏移值,将网络包数据搬移到应用接收缓存242时,用套接字描述符记录的用于应用接收缓存242的偏移值代表的地址作为数据搬移的目的地址。
若该套接字描述符尚未被提供应用接收缓存242,高性能UDP处理单元280根据接收的网络包描述符与其对应的套接字生成PNode节点,并将生成的节点添加到PNode链表。而网络包描述符对应的网络包依然留在网络包缓存212(也参看图2)中,而不被搬移。可选地,PNode链表包括多个链表,具有相同套接字描述符或网络地址的PNode被添加到相同的链表。进一步地,套接字描述符中还记录游标,游标记录为该套接字描述符已经添加到PNode链表中的PNode所对应的网络包的数据量。游标被更新时,也用游标更新套接字描述符中记录的用于应用接收缓存的偏移值。
返回步骤342,应用程序240调用Recefrom()方法。作为响应,高性能UDP处理单元280,在步骤384,还遍历PNode链表。可选地,高性能UDP处理单元280根据Recefrom()方法指示的套接字描述符的游标来确定是否遍历PNode链表。若游标值大于0,意味着一个或多个同该套接字关联的PNode已被添加到PNode链表,高性能UDP处理单元280遍历PNode链表,从PNode链表找到同该套接字关联的一个或多个PNode,根据这些一个或多个PNode的数据包描述符将对应的数据包搬移到Recefrom()方法指示的应用接收缓存242。以及还将完成了数据搬移的PNode从PNode链表删除。根据PNode的数据包描述符指示的数据包在UDP包中的偏移,将数据包搬移到应用接收缓存的对应位置。
从而,对于要接收的UDP数据包,若在应用程序240调用Recvfrom()方法之前,网络适配器驱动260已交付了一个或多个网络包描述符,这些网络包描述符会被记录在PNode链表中,在应用程序240调用Recvfrom()方法时,高性能UDP处理单元280会遍历PNode链表根据缓存的网络包描述符将网络包搬移到应用接收缓存242。此后,再收到用于要接收的UDP数据包的网络包描述符时,由于应用接收缓存242已存在,高性能UDP处理单元280根据接收的网络包描述符将网络包搬移到应用接收缓存242。根据本申请的实施例,在套接字描述符尚未得到应用接收缓存242前,高性能UDP处理单元280将接收的网络包描述符缓存在PNode链表,将网络适配器210(也参看图2)提供的网络包留在网络包缓存212,而无须由高性能UDP处理单元280提供额外的存储空间缓存网络包。从而还省去了搬移网络包的操作,加快了对网络包描述符的处理速度。
对于要接收的UDP数据包,若在应用程序240调用Recvfrom()方法之前,网络适配器驱动260尚未交付任何网络包描述符,由于已获得了应用接收缓存242,之后响应于网络适配器驱动260交付网络包描述符,高性能UDP处理单元280根据接收的网络包描述符将对应的网络包搬移到应用接收缓存242,而不生成PNode,也不向PNode链表添加节点。从而网络包缓存212中的网络包被尽早移除,进而网络包缓存212的更多可用存储空间得以被提供给网络适配器210(也参看图2)。
高性能UDP处理单元280还识别已经接收了完整的UDP数据包,并向应用程序240发信号以唤醒应用程序240(386)。Recvfrom()方法是阻塞函数,应用程序240在调用该方法后被挂起,而响应于高性能UDP处理单元280向其发送信号而被唤醒并继续执行。被唤醒的应用程序240从应用接收缓存242获取收到的完整UDP数据包。至此接收完整UDP数据包的操作完成。
图4A-4C展示了根据本申请实施例的接收UDP数据包过程的示意图。
参看图4A,应用程序240尚未调用Socket()方法与Recvfrom()方法,网络适配器210已接收了网络包,接收的网络包被添加到网络包缓存212(图4A中由标记“(1)”指示)。网络适配器驱动260将同接收的网络包对应的网络包描述符提供给高性能UDP处理单元280(图4A中由标记“(2)”指示)。
高性能UDP处理单元280已接收的多个网络包描述符对应网络地址IP1与端口1,以及网络地址IP3与端口3,因而两个套接字描述符(462与466)被分别绑定了网络地址IP1与端口1,以及网络地址IP3与端口3。但这些套接字描述符都未被绑定应用接收缓存。因而高性能UDP处理单元280根据收到的网络包描述符生成PNode,并添加到PNode链表(图4A中由标记“(3)”指示)。图4A的PNode链表展示了3个对应于套接字描述符462的PNode(具有网络地址IP1与端口1)以及1个对应于套接字描述符466的PNode(具有网络地址IP3与端口3)。
可选地,若高性能UDP处理单元280收到了对应网络地址IP2与端口2的网络包描述符,而当前尚没有具有网络地址IP2与端口2的套接字描述符,则高性能UDP处理单元280获取一个未被使用的套接字描述符,将其同网络地址IP2与端口2绑定,并根据该套接字描述符与网络包描述符生成PNode添加到PNode链表。
继续参看图4B,应用程序240调用了Socket()与Recvfrom()方法,作为举例,为网络地址IP1与端口1提供了应用接收缓存242。作为响应,高性能UDP处理单元280根据网络地址IP1与端口1将套接字描述符462提供了应用程序240,并在套接字描述符462中记录应用接收缓存242(图4B中由标记“(4)”指示)。响应于应用程序240调用了Recvfrom()方法,高性能UDP处理单元280还遍历PNode链表(图4B中由标记“(5)”与“(6)”指示),从中找到关联于套接字描述符262的PNode,根据根据找到的PNode的网络包描述符将对应的网络包通过DMA单元270从网络包缓存212搬移到应用接收缓存242(图4B中由标记“(7)”指示)。
可选地,若遍历完PNode链表,已向应用缓存242搬移了完整的UDP包,高性能UDP处理单元280还向应用程序240发信号将其唤醒。作为举例,高性能UDP处理单元280根据网络包描述符中指示的数据包在UDP包中的偏移来识别是否向应用缓存242搬移了完整的UDP包。
在图4B的例子中,遍历完PNode链表,高性能UDP处理单元280识别出尚未向应用缓存242搬移完整的UDP包。作为响应,暂不唤醒应用程序240。
可以理解地,高性能UDP处理单元280可服务于多个应用程序,以及并发处理多个应用程序调用的Recvfrom()方法。
继续参看图4C,网络适配器210又接收了网络包,接收的网络包被添加到网络包缓存212。网络适配器驱动260将同接收的网络包对应的网络包描述符提供给高性能UDP处理单元280(图4A中由标记“(8)”指示)。接收的网络包对应网络地址IP1与端口1。
高性能UDP处理单元280根据网络包描述符的网络地址获取对应的套接字描述符462,并识别出套接字描述符462已被提供了应用接收缓存242。之后高性能UDP处理单元280根据接收的网络包描述符将对应的网络包通过DMA单元270搬移到应用接收缓存242,而不生成PNode(图4A中由标记“(9)”与“(10)”指示)。
作为举例,响应于当前的网络包描述符指示对应的网络包是当前套接字描述符对应的UDP包的最后一个网络包而识别已经接收了完整的UDP数据包,继而向应用程序240发信号以唤醒应用程序240。续执行。被唤醒的应用程序240从应用接收缓存242获取收到的完整UDP数据包。至此接收完整UDP数据包的操作完成。
图5A展示了根据本申请实施例的高性能UDP处理单元响应于接收网络包的流程图。
高性能UDP处理单元280(也参看图2)响应于从网络适配器驱动260获取了网络包描述符(510),识别是否有同该网络包描述符关联的应用接收缓存(520)。作为举例,网络适配器驱动260提供给高性能UDP处理单元280的网络包描述符指示的网络包是承载了UDP包的IP包,网络适配器驱动260对收到的IP包进行筛选,仅将承载了UDP包的IP包提供了高性能UDP处理单元280。在另一个例子中,网络适配器驱动260将收到的所有IP包提供给高性能UDP处理单元280,后者从收到的IP包中选取承载了UDP包的IP包再进行根据本申请实施例的处理。
高性能UDP处理单元280从网络包描述符获取网络包的网络地址(例如IP地址与端口号),并获取关联于该网络地址的套接字描述符。可选地,若当前没有关联于该网络地址的套接字描述符,高性能UDP处理单元280还分配未使用的套接字描述符,将分配的套接字描述符关联于该网络地址。高性能UDP处理单元280识别同网络包描述符关联的套接字描述符是否有关联的应用接收缓存。例如,若套接字描述符中记录了应用接收缓存的地址,则识别出套接字描述符有关联的应用接收缓存;反之,若套接字描述符中未记录应用接收缓存的地址,则识别出套接字描述符没有关联的应用接收缓存。
若接收的网络包描述符没有关联的应用接收缓存(520),高性能UDP处理单元280根据接收的网络包描述符与同其关联的套接字描述符生成PNode,并将生成的PNode插入PNode链表(540)。
若接收的网络包描述符有关联的应用接收缓存(520),高性能UDP处理单元280根据接收的网络包描述符将对应的网络包从网络包缓存搬移到应用接收缓存(522)。
以及高性能UDP处理单元280还识别应用接收缓存是否已存储了完整的UDP包。例如,通过网络包描述符记录的该IP包是否是UDP包的最后包来识别是否已向应用接收缓存发送了完整的UDP包(524)。若应用接收缓存已存储了完整的UDP包,高性能UDP处理单元280还发信号通知调用Recvfrom()方法的应用程序(526),继而应用程序调用的Recvfrom()方法返回,应用程序继续执行,在Recvfrom()方法所指示的应用接收缓存中已存储了完整的UDP包,应用程序后续得以使用该UDP包。
可选地,网络包描述符指示了网络包是否是UDP包的最后包。高性能UDP处理单元280仅在网络包描述符指示获取的网络包是UDP包的最后包时,才识别是否已向应用接收缓存发送了完整UDP包。若获取的网络包描述符指示获取的网络包不是UDP包的最后包,高性能UDP处理单元280完成对当前网络包描述符的处理而无须其他操作。
可选地或进一步地,根据本申请的实施例,高性能UDP处理单元280依据网络包描述符指示获取的网络包是UDP包的最后包而识别已向应用接收缓存发送了完整UDP包。在现有技术的网络协议栈中,这样的处理是不可靠的。因而承载UDP包的IP包可能乱序到达高性能UDP处理单元280,例如,承载UDP包的最后包的IP包,可能在承载该UDP包的其他包之前到达高性能UDP处理单元280。在根据本申请的实施例中,UDP包的发送方与接收方之间的网络路径单一,极少或不会发生承载同一UDP包的多个IP包乱序到达接收方的情形,据此根据本申请实施例的高性能UDP处理单元280用简化的方式仅通过识别获取的网络包是UDP包的最后包而识别已向应用接收缓存发送了完整UDP包,进而进一步简化了接收网络包的处理流程,有利于进一步提升网络数据接收的性能。
图5B展示了根据本申请实施例的高性能UDP处理单元响应于调用Recvfrom()方法的流程图。
高性能UDP处理单元280(也参看图2)响应于应用程序调用了Recvfrom()方法(550),将Recvfrom()方法提供的应用接收缓存的索引记录在Recvfrom()方法指示的套接字描述符中。
高性能UDP处理单元280还遍历PNode链表,从PNode链表中获取关联于Recvfrom()方法指示的套接字描述符的一个或多个PNode,根据获取的PNode得到网络包描述符,并根据网络包描述符将对应的网络包数据从网络包缓存搬移到应用接收缓存(560)。可选地,高性能UDP处理单元280还更新套接字描述符中记录的游标,游标记录为该套接字描述符已经添加到PNode链表中的PNode所对应的网络包的数据量。进一步地,响应于Recvfrom()方法被调用,高性能UDP处理单元280先获取对应的套接字描述符中的游标,以识别是否有同套接字关联的PNode被记录在PNode链表中,以及仅在PNode链表中存在同套接字关联的PNode时,才遍历PNode链表。
可选地或进一步地,根据本申请的实施例,高性能UDP处理单元280依据从PNode链表获取的PNode对应的网络包描述符指示获取的网络包是UDP包的最后包而识别应用接收缓存是否已存储了完整的UDP包(570)。若应用接收缓存已存储了完整的UDP包,高性能UDP处理单元280还发信号通知调用Recvfrom()方法的应用程序(580),继而应用程序调用的Recvfrom()方法返回,应用程序继续执行,在Recvfrom()方法所指示的应用接收缓存中已存储了完整的UDP包,应用程序后续得以使用该UDP包。
图5B的流程,在遍历完PNode链表,以及可选地发信号通知调用Recvfrom()方法的应用程序后结束,而不处理从网络适配器驱动获取的网络包描述符。换句话说,图5A与图5B展示的流程被并发处理。并且,高性能UDP处理单元280可响应多个应用程序并发地调用Socket()方法与Recvfrom()方法。
图6展示了根据本申请又一实施例的高性能UDP处理单元响应于接收网络包的流程图。
高性能UDP处理单元280(也参看图2)响应于从网络适配器驱动260获取了网络包描述符(610),识别该网络包描述符是否承载了UDP包的首包(首个IP包)或尾包(最尾的IP包)(615)。
若接收的网络包描述符承载了UDP包的首包(615),进一步识别是否有同该网络包描述符关联的应用接收缓存(620)。对于UDP包的首包,若因应用程序已调用了Recvfrom()方法而提供了同该接收的网络包描述符关联的应用接收缓存,高性能UDP处理单元280还识别该接收的网络包描述符对应的网络包同应用接收缓存的偏移值是否失配(622)。网络包描述符指示了IP包在UDP包中的偏移值,该偏移值应当同套接字描述符中记录的用于应用接收缓存的偏移值一致,从而将IP包承载的数据从网络包缓存搬移到应用接收缓存的由偏移值指示的位置。如果网络包描述符中指示的IP包在UDP包中的偏移值同套接字描述符中记录的用于应用接收缓存的偏移值不一致,称为网络包描述符对应的网络包同应用接收缓存的偏移值“失配”。根据本申请的实施例,发生“失配”,意味着当前应用接收缓存正在接收的UDP包接收失败,新收到的UDP包对应的IP包不是预期的IP包,因而要清除当前该正在接收的UDP包。响应于发生失配,根据同网络包描述符关联的套接字描述符遍历PNode链表,将PNode链表中同该套接字描述关联的PNode全部删除;以及还清空应用接收缓存,并将应用接收缓存对应套接字描述符中的用于应用接收缓存的偏移值重置为0。可选地,若套接字描述符中设置了用于PNode链表的游标,将该游标也重置为0。继而,将当前接收的网络包描述符对应的数据包,作为UDP包的首包搬移到应用接收缓存(624),也相应地更新套接字描述符的用于应用接收缓存的偏移值。
若接收的网络包描述符承载了UDP包的首包(615),但同该网络包描述符关联的应用接收缓存尚未被分配(620),则高性能UDP处理单元280分配套接字描述符(626),在分配的套接字描述符中记录当前网络包描述符的网络地址(IP地址与UDP端口),并根据当前网络包描述符与分配的套接字描述符生成PNode,并将生成的PNode插入PNode链表(628)。可选地,若套接字描述符中设置了用于PNode链表的游标,还相应地更新该游标。
回到步骤615,若当前接收的网络包承载的既非UDP包的首包,也非UDP包的尾包,进一步识别是否有同该网络包描述符关联的应用接收缓存(640)。若存在同该接收的网络包描述符关联的应用接收缓存,高性能UDP处理单元280还识别该接收的网络包描述符对应的网络包同应用接收缓存的偏移值是否失配(642)。响应于发生失配,根据同网络包描述符关联的套接字描述符遍历PNode链表,将PNode链表中同该套接字描述关联的PNode全部删除(642);以及还清空应用接收缓存,并将应用接收缓存对应套接字描述符中的用于应用接收缓存的偏移值重置为0;以及还丢弃当前接收的网络包。响应于未发生失配,将网络包承载的数据从网络包缓存搬移到应用接收缓存的由偏移值指示的位置(644)。
若不存在同该接收的网络包描述符关联的应用接收缓存(640),高性能UDP处理单元280根据当前网络包描述符与其对应的套接字描述符生成PNode,并将生成的PNode插入PNode链表(648)。
回到步骤615,若当前接收的网络包承载是UDP包的尾包,进一步识别是否有同该网络包描述符关联的应用接收缓存(660)。若存在同该接收的网络包描述符关联的应用接收缓存(660),高性能UDP处理单元280还识别该接收的网络包描述符对应的网络包同应用接收缓存的偏移值是否失配(662)。响应于发生失配,根据同网络包描述符关联的套接字描述符遍历PNode链表,将PNode链表中同该套接字描述关联的PNode全部删除(662);以及还清空应用接收缓存,并将应用接收缓存对应套接字描述符中的用于应用接收缓存的偏移值重置为0;以及还丢弃当前接收的网络包。响应于未发生失配,将网络包承载的数据从网络包缓存搬移到由用于应用接收缓存的偏移值指示的位置(664)。
以及由于当前接收的网络包描述符承载是UDP包的尾包,还根据当前接收的网络包描述符关联的套接字描述符遍历PNode链表,从PNode链表中获取关联于该套接字描述符的一个或多个PNode,根据获取的每个PNode得到网络包描述符,并根据网络包描述符将对应的网络包数据从网络包缓存搬移到应用接收缓存的由该网络包在UDP包中的偏移值所对应的位置(665)。可选地,高性能UDP处理单元280先获取对应的套接字描述符中的游标,以识别是否有同套接字关联的PNode被记录在PNode链表中,以及仅在PNode链表中存在同套接字关联的PNode时,才遍历PNode链表。
以及高性能UDP处理单元280还发信号通知应用程序(667),继而该应用程序被唤醒并继续执行,在应用接收缓存中已存储了完整的UDP包,应用程序后续得以使用该UDP包。
若不存在同该接收的网络包描述符关联的应用接收缓存(660),高性能UDP处理单元280根据当前网络包描述符与其对应的套接字描述符生成PNode,并将生成的PNode插入PNode链表(668)。
图7展示了根据本申请再一实施例的信息处理设备的框图。
信息处理设备包括多个处理器核(CPU 0、CPU 1、CPU 2、CPU 3与CPU 4)、存储器(未示出)与网络适配器710。
网络适配器710耦合到网络,将从网络收到的例如IP数据包存储到网络包缓存212。网络适配器驱动程序760响应于网络适配器710收到网络数据包,生成网络包描述符并提供给高性能UDP处理单元780。
CPU 0运行作为网络协议栈的高性能UDP处理单元780。根据图7的实施例,多个处理器核各自运行程序。高性能UDP处理单元780运行于CPU 0,因而网络适配器驱动程序760将网络适配器710收到的网络数据包中承载了UDP数据包的网络数据包仅提供给运行于CPU0的高性能UDP处理单元780,而不将承载了UDP数据包的网络数据包提供给其他处理器核(CPU 1、CPU 2、CPU 3与CPU 4),以减轻其他处理器核的负担。作为举例,网络适配器驱动760仅将对应UDP数据包的网络包描述符提供给运行于CPU 0的高性能UDP处理单元780,以及仅向CPU 0产生中断,从而仅运行于CPU 0的高性能UDP处理单元780响应于中断而处理网络包描述符。
进一步地,根据本申请的实施例,信息处理设备使用组播UDP包或广播UDP包通信。信息处理设备的该多个处理器核(CPU 0、CPU 1、CPU 2、CPU 3与CPU 4)作为网络的一个节点,由单一处理器核(CPU 0)代表该信息处理设备同网络交换数据。即使对于组播UDP包或广播UDP包,网络适配器驱动程序760也仅将对应承载了组播UDP包或广播UDP包的网络数据包的网络包描述符发送给高性能UDP处理单元780,并且仅向高性能UDP处理单元780发送中断。从而信息处理设备的其他处理器核(CPU 1、CPU 2、CPU 3与CPU 4)不会网络适配器710被从网络接收的组播UDP包或广播UDP包所干扰。
高性能UDP处理单元780向应用程序740提供标准套接字接口。在图7的例子中,应用程序740也运行于CPU 0,用于通过高性能UDP处理单元780获取UDP包,并向其他处理器核(CPU 1、CPU 2、CPU 3与CPU 4)提供从UDP包获取的数据。可选地,应用程序740也运行于其他处理器核(CPU 1、CPU 2、CPU 3与CPU 4),而非运行于CPU 0。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (9)
1.一种接收网络包的方法,包括:
获取网络包描述符;
若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到所述应用接收缓存;
若不存在同网络包描述符对应的套接字描述符关联的应用接收缓存,根据网络包描述符与套接字描述符生成PNode节点并添加到PNode链表;
若存在同网络包描述符对应的套接字描述符关联的应用接收缓存,将网络包描述符对应的网络包搬移到由所述套接字描述符记录的用于所述应用接收缓存的偏移值所指示的所述应用接收缓存的位置;以及还更新所述套接字描述符记录的用于所述应用接收缓存的偏移值。
2.根据权利要求1所述的方法,还包括:
响应于调用了Recvfrom()方法,遍历所述PNode链表,从所述PNode链表中获取同所述Recvfrom()方法指示的套接字描述符对应的一个或多个PNode节点;
将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存。
3.根据权利要求2所述的方法,还包括:
响应于将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,若已向所述应用接收缓存搬移了完整的UDP包,向要接收所述UDP包的应用程序发送信号;
响应于将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,若尚未向所述应用接收缓存搬移完整的UDP包,中止对所述Recvfrom()方法的处理。
4.根据权利要求3所述的方法,其中
所述将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存,是将所述一个或多个PNode节点对应的网络包搬移到该网络包在UDP包中的偏移值所指示的应用接收缓存的位置。
5.根据权利要求4所述的方法,还包括:
若所述网络包描述符指示的网络包承载了UDP包的首包,且若不存在同所述网络包描述符对应的套接字描述符,为所述网络包描述符分配套接字描述符,在分配的套接字描述符中记录所述网络包描述符的网络地址。
6.根据权利要求5所述的方法,还包括:
若存在同所述网络包描述符对应的套接字描述符关联的应用接收缓存,且若所述网络包描述符对应的网络包同用于所述应用接收缓存的偏移值“失配”,从所述PNode链表中清除同所述套接字描述符对应的一个或多个PNode节点;以及还清空所述应用接收缓存;
其中,如果网络包描述符中指示的IP包在UDP包中的偏移值同套接字描述符中记录的用于应用接收缓存的偏移值不一致,称为网络包描述符对应的网络包同应用接收缓存的偏移值“失配”。
7.根据权利要求6所述的方法,还包括:
若所述网络包描述符指示的网络包承载了UDP包的尾包,且若存在同所述网络包描述符对应的套接字描述符关联的应用接收缓存,还遍历所述PNode链表,从所述PNode链表中获取同所述套接字描述符对应的一个或多个PNode节点;
将所述一个或多个PNode节点对应的网络包搬移到应用接收缓存;以及
向要接收所述UDP包的应用程序发送信号。
8.根据权利要求7所述的方法,还包括:
响应于接收了承载组播UDP包或广播UDP包的网络包,向多核处理器的指定处理器核发送指示了所述网络包的网络包描述符,并向所述指定处理器发送中断。
9.一种信息处理设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现根据权利要求1-8之一所述的接收网络包的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010373674.1A CN111586040B (zh) | 2020-05-06 | 2020-05-06 | 高性能网络数据接收方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010373674.1A CN111586040B (zh) | 2020-05-06 | 2020-05-06 | 高性能网络数据接收方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111586040A CN111586040A (zh) | 2020-08-25 |
CN111586040B true CN111586040B (zh) | 2021-02-09 |
Family
ID=72111950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010373674.1A Active CN111586040B (zh) | 2020-05-06 | 2020-05-06 | 高性能网络数据接收方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111586040B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905357A (zh) * | 2021-01-27 | 2021-06-04 | 清华大学 | 一种数据读取方法、系统、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1652543A (zh) * | 2004-02-06 | 2005-08-10 | 三星电子株式会社 | 用于连接异类协议节点的方法和设备 |
US7742429B1 (en) * | 2004-01-15 | 2010-06-22 | Zte Corporation | Method and system of promptly processing real-time media stream data packet |
CN102739443A (zh) * | 2012-06-11 | 2012-10-17 | 烽火通信科技股份有限公司 | Pon系统中olt通信模块及olt间通信实现方法 |
CN108156172A (zh) * | 2018-01-09 | 2018-06-12 | 四川九洲电器集团有限责任公司 | 一种高速接收tcp数据的方法 |
CN108712459A (zh) * | 2018-03-30 | 2018-10-26 | 深圳市风云实业有限公司 | 协议报文跨层通信方法、装置及电子设备 |
CN110049133A (zh) * | 2019-04-22 | 2019-07-23 | 中国互联网络信息中心 | 一种dns区文件全量下发的方法和装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101222430B (zh) * | 2008-01-24 | 2011-01-19 | 中兴通讯股份有限公司 | 一种高速多协议数据传输系统和方法 |
US20090217030A1 (en) * | 2008-02-26 | 2009-08-27 | Premkumar J | Adaptive server performance adjustment |
CN101814971A (zh) * | 2009-02-24 | 2010-08-25 | 肖宏声 | 一种手机文件传输方法 |
CN103945456B (zh) * | 2014-05-12 | 2017-06-27 | 武汉邮电科学研究院 | 一种基于Linux系统的LTE基站用户面高效UDP数据发送优化方法 |
CN106059936B (zh) * | 2016-08-10 | 2019-09-27 | 北京海誉动想科技股份有限公司 | 云系统组播文件的方法及装置 |
CN106506253B (zh) * | 2016-09-08 | 2020-04-14 | 深圳先进技术研究院 | 一种基于tcp/ip通信协议的在线客户端数量的统计系统及方法 |
US11115504B2 (en) * | 2018-06-26 | 2021-09-07 | Microsoft Technology Licensing, Llc | Batch processing for QUIC |
-
2020
- 2020-05-06 CN CN202010373674.1A patent/CN111586040B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7742429B1 (en) * | 2004-01-15 | 2010-06-22 | Zte Corporation | Method and system of promptly processing real-time media stream data packet |
CN1652543A (zh) * | 2004-02-06 | 2005-08-10 | 三星电子株式会社 | 用于连接异类协议节点的方法和设备 |
CN102739443A (zh) * | 2012-06-11 | 2012-10-17 | 烽火通信科技股份有限公司 | Pon系统中olt通信模块及olt间通信实现方法 |
CN108156172A (zh) * | 2018-01-09 | 2018-06-12 | 四川九洲电器集团有限责任公司 | 一种高速接收tcp数据的方法 |
CN108712459A (zh) * | 2018-03-30 | 2018-10-26 | 深圳市风云实业有限公司 | 协议报文跨层通信方法、装置及电子设备 |
CN110049133A (zh) * | 2019-04-22 | 2019-07-23 | 中国互联网络信息中心 | 一种dns区文件全量下发的方法和装置 |
Non-Patent Citations (2)
Title |
---|
基于Netlink 机制的1553B 协议通用接口设计;顾燕飞等;《计算机系统应用》;20180928;第27卷(第10期);第279-283页 * |
基于VxWorks 的RapidIO 网络通用接口设计;张南等;《信息技术》;20170930;第159-163页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111586040A (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11899596B2 (en) | System and method for facilitating dynamic command management in a network interface controller (NIC) | |
CN108536543B (zh) | 具有基于跨步的数据分散的接收队列 | |
US9965441B2 (en) | Adaptive coalescing of remote direct memory access acknowledgements based on I/O characteristics | |
US9836431B2 (en) | Secure handle for intra-and inter-processor communications | |
CN110535813B (zh) | 内核态协议栈与用户态协议栈并存处理方法和装置 | |
EP2406723B1 (en) | Scalable interface for connecting multiple computer systems which performs parallel mpi header matching | |
US6895590B2 (en) | Method and system enabling both legacy and new applications to access an InfiniBand fabric via a socket API | |
JP5282115B2 (ja) | ユーザーレベルスタック | |
EP2312807B1 (en) | Method and system for enabling zero-copy transmission of streaming media data | |
US9143467B2 (en) | Network interface controller with circular receive buffer | |
García-Dorado et al. | High-performance network traffic processing systems using commodity hardware | |
US9356844B2 (en) | Efficient application recognition in network traffic | |
WO2000041365A1 (en) | Method and system for credit-based data flow control | |
US7457845B2 (en) | Method and system for TCP/IP using generic buffers for non-posting TCP applications | |
CN112631788B (zh) | 数据传输方法及数据传输服务器 | |
US10609125B2 (en) | Method and system for transmitting communication data | |
Lo et al. | The implementation of a high-performance ORB over multiple network transports | |
US7428730B2 (en) | Software development environment | |
JP3214454B2 (ja) | プログラム内蔵方式パケット処理装置 | |
CN111586040B (zh) | 高性能网络数据接收方法及其系统 | |
US7769905B1 (en) | Adapting network communication to asynchronous interfaces and methods | |
US7502870B1 (en) | Method for receiving network communication and apparatus for performing the same | |
WO2023221990A1 (zh) | Udp报文的分发方法、设备及可读存储介质 | |
Hartkopp et al. | The CAN networking subsystem of the Linux kernel | |
US9338219B2 (en) | Direct push operations and gather operations |
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 |