CN114615347A - 基于udp gso的数据传输方法和装置 - Google Patents
基于udp gso的数据传输方法和装置 Download PDFInfo
- Publication number
- CN114615347A CN114615347A CN202210220228.6A CN202210220228A CN114615347A CN 114615347 A CN114615347 A CN 114615347A CN 202210220228 A CN202210220228 A CN 202210220228A CN 114615347 A CN114615347 A CN 114615347A
- Authority
- CN
- China
- Prior art keywords
- data packets
- sent
- packet
- udp
- gso
- 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
- 230000005540 biological transmission Effects 0.000 title claims abstract description 58
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000012546 transfer Methods 0.000 claims abstract description 5
- 230000015654 memory Effects 0.000 claims description 30
- 238000013467 fragmentation Methods 0.000 claims description 22
- 238000006062 fragmentation reaction Methods 0.000 claims description 22
- 230000006870 function Effects 0.000 claims description 16
- 239000012634 fragment Substances 0.000 claims description 15
- 238000012163 sequencing technique Methods 0.000 claims description 13
- 239000000872 buffer Substances 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 9
- 230000036961 partial effect Effects 0.000 claims description 8
- 230000008901 benefit Effects 0.000 abstract description 13
- 230000002829 reductive effect Effects 0.000 description 14
- 238000012856 packing Methods 0.000 description 11
- 230000006798 recombination Effects 0.000 description 11
- 238000005215 recombination Methods 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 230000011218 segmentation Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 230000008521 reorganization Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
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
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9057—Arrangements for supporting packet reassembly or resequencing
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种基于UDP GSO的数据传输方法,所述方法包括:获取多个待发送数据包;对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;对排序后的多个目标数据包进行组合,得到一个或多个包组合;及将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。本申请还提供了基于UDP GSO的数据传输装置、计算机设备和计算机可读存储介质。本申请提供的技术方案可以充分发挥UDP GSO的性能优势。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种基于UDP GSO的数据传输方法、装置、设备及计算机可读存储介质。
背景技术
随着计算机网络的发展,数据传输量越来越大。为适应这一发展,提出了分片/分段技术,即:对超过预设长度的数据包进行分片或分段,使每一分片、分段的长度小于或等于预设长度,然后进一步封装为数据包形式,以便在网络中进行传输。
GSO(Generic Segmentation Offload,通用分段延后处理)为一种延后卸载技术,用于将分片/分段延后到网卡或送给驱动前一刻,以降低CPU压力。其中,UDP(UserDatagram Protocol,用户数据报协议)下的GSO又称之为UDP GSO。当内核支持UDP GSO功能,其可以接受应用程序发来的大数据包,之后在网卡中或送给驱动前一刻将大数据包拆分为若干块,并为每个块加上UDP报头以封装成UDP数据包。
其中,大数据包是多个相邻且大小相同的数据包(最后一个数据包除外)组合而成。以大数据包形式将应用数据提供给内核,可以提高数据处理性能。然而,本发明人发现:有些大数据包的长度比较短,从而无法充分发挥UDP GSO的性能优势。
发明内容
本申请实施例的目的是提供一种基于UDP GSO的数据传输方法、装置、计算机设备及计算机可读存储介质,用于解决上述缺陷。
本申请实施例的一个方面提供了一种基于UDP GSO的数据传输方法,所述方法包括:
获取多个待发送数据包;
对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;
调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;
对排序后的多个目标数据包进行组合,得到一个或多个包组合;及
将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。
可选地,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
确定所述多个待发送数据包的数据包个数达到预设数量;及
在所述数据包个数达到所述预设数量的情况下,对所述部分待发送数据包进行重组。
可选地,还包括:在所述数据包个数未达到所述预设数量的情况下,继续获取新的待发送数据包。
可选地,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
根据每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;及
在所述最大时间间隔大于时间间隔阈值的情形下,对所述部分待发送数据包进行重组。
可选地,还包括:动态生成所述时间间隔阈值;
其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的CPU负载、UDP带宽、接收端的CPU负载,以及所述接收端对UDP乱序的容忍度。
可选地,还包括:在所述最大时间间隔不大于时间间隔阈值的情形下,继续获取新的待发送数据包。
可选地,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
通过多个队列缓存所述多个待发送数据包,同一个队列中的各个待发送数据包的大小相同;
对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包。
可选地,所述至少部分队列包括目标队列,所述部分待发送数据包包括所述目标队列的待发送数据包;
所述对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包,包括:
从所述多个队列中选取所述目标队列,其中,所述目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
对所述目标队列内的各个待发送数据包进行队列内的数据包重组,以得到所述多个重组数据包。
可选地,所述至少部分队列包括多个目标队列,所述部分待发送数据包包括所述多个目标队列的待发送数据包;
所述对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包,包括:
从所述多个队列中选取所述多个目标队列,其中,各目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
将不同目标队列中的待发送数据包进行队列间的数据包组合,以得到所述多个重组数据包。
可选地,所述调整多个目标数据包之间的排序,包括:
根据所述多个目标数据包中各个目标数据包的大小,对所述多个目标数据包进行排序;及
根据排序结果,将所述排序后的多个目标数据包依次写入到待发送缓存包队列中。
可选地,所述对排序后的多个目标数据包进行组合,得到一个或多个包组合,包括:
组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,其中,该包组合包括连续的若干个目标数据包,该连续的若干个目标数据包依次包括对头、与对头大小相同的后续目标数据包,及一个与对头大小不相同的目标数据包;
在所述待发送缓存包队列还包括未组合的目标数据包的情形下,对未组合的目标数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的目标数据包。
可选地,所述将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输,包括:
根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
通过所述内核对所述一个或多个包组合分别执行UDP GSO,以得到多个分片并对所述多个分片进行传输;
其中,所述内核对接收到的包组合执行UDP GSO,包括:
在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
本申请实施例的再一个方面提供了一种基于UDP GSO的数据传输装置,包括:
获取模块,用于获取多个待发送数据包;
重组模块,用于对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;
调整模块,用于调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;
组合模块,用于对排序后的多个目标数据包进行组合,得到一个或多个包组合;及
提供模块,用于将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。
本申请实施例的再一个方面提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现如上任一项所述的基于UDP GSO的数据传输方法的步骤。
本申请实施例的又一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上任一项所述的基于UDP GSO的数据传输方法的步骤。
本申请实施例提供的基于UDP GSO的数据传输方法、装置、设备及计算机可读存储介质,可以包括以优点:
(1)针对相邻的待发送数据包的大小可能经常不同,而导致包组合的大小受限制的问题,本实施例提供了待发送数据包的重组、排序机制,将大小较小的部分待发送数据包进行重组以得到多个重组数据包,然后对多个重组数据包和未参数重组的待发送数据包进行数据包的排序和组合,使得大小相同的数据包排序在一起。因此,大小相同的数据包可以组合在一个包组合(大数据包)中,避免在各个待发送数据包乱序情形下生成的包组合较小的问题(由于相邻的待发送数据包的大小不同即触发组合的结束),从而降低应用程序间隔生成的待发送数据包大小不确定而导致发包系统调用(如sendmsg)被频繁调用的概率,从而可以有效地发挥内核UDP GSO的能力,提升UDP的发包效率,降低硬件负载等效果。
(2)由于对部分待发送数据包的重组,使得最终参与排序的数据包(目标数据包)的大小类别进一步减少,从而减少了包组合的数量,从而减少系统调用的频次,进一步地有效地发挥内核UDP GSO的性能优势,提升UDP的发包效率。
因此,本申请可以在被允许的范围内,尽可能地生成较大的包组合(大数据包),尽量提供较大的包组合给内核,充分发挥UDP GSO的性能优势,通过UDP GSO和socket编程等技术手段将组合后的大数据包发送出去,提高UDP GSO的发包性能和吞吐。
附图说明
图1示意性示出了根据本申请实施例一的基于UDP GSO的数据传输方法的应用环境图;
图2示意性示出了根据本申请实施例一的基于UDP GSO的数据传输方法的流程图;
图3示意性示出了根据本申请实施例一的数据流向图;
图4示意性示出了图2中步骤S202的子流程图;
图5示意性示出了图2中步骤S202的另一子流程图;
图6示意性示出了根据本申请实施例一的基于UDP GSO的数据传输方法的新增步骤流程图;
图7示意性示出了图2中步骤S202的另一子流程图;
图8示意性示出了图7中步骤S702的子流程图;
图9示意性示出了图7中步骤S702的子流程图;
图10示意性示出了图2中步骤S204的子流程图;
图11示意性示出了图2中步骤S206的子流程图;
图12示意性示出了一个示例性应用中的流程操作图;
图13示意性示出了根据本申请实施例二的基于UDP GSO的数据传输装置的框图;以及
图14示意性示出了根据本申请实施例三的适于实现基于UDP GSO的数据传输方法的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限制本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限制有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本申请所要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
本发明人了解到,在以太网通信中,MTU(maximum transmission unit,最大传输单元)规定了以太网数据帧的最大长度,如1500个字节。为此,当应用程序提供的数据包的长度超过MTU值时,则IP层需要对该数据包进行分片,使每一片的长度小于或等于MTU值。这种分片机制,很大程度上减轻了解决低速网络传输的不可靠性问题。但是,随着计算机网络的发展,数据传输量越来越大,因此,需要进行大量的分片的拆分,从而极大地消耗CPU计算资源。
为降低CPU计算资源消耗,提供了GSO(Generic Segmentation Offload,通用分段延后处理)技术。其中,UDP(User Datagram Protocol,用户数据报协议)下的GSO又称之为UDP GSO(UDP GSO with hardware offload)。当内核支持并开始UDP GSO功能时,其可以接受应用程序发来的大数据包(长度大于MTU值),之后将大数据包拆分为若干块,并为每个块加上UDP报头以封装成UDP数据包。
具体的,在开启UDP GSO的情况下,内核可以将大数据包的分片操作从IP层下移到网卡或数据发送给网卡驱动之前。对网卡的硬件特性进行判断,如果支持TSO等机制,就直接把大数据包发送给网卡,由网卡代替CPU进行分片操作以降低CPU负载。若网卡不支持TSO等机制,则在大数据包发送给网卡之前再去进行分片操作,这样即使不依靠网卡硬件,也最大幅度地减少协议栈处理的次数,提高数据处理和传输效率。
本发明人发现,UDP GSO的使用具有一定的限制。比如一个UDP数据报文的理论最大长度是64KB,所以组合在一起的数据包的数量一般最多到45个。而且,不同的数据包组合在一起也有限制。这里的限制主要包括:第一,在组合中,除组合中的最后一个数据包之外,组合中的相邻的数据包的大小必须是一致的。第二,一旦遇到一个最后那个数据包(大小与之前的数据包不同),那么数据包组合阶段就结束。因此,现实情况下,少量的数据包组合在一起的情况会很大概率地出现,这就无法充分发挥UDP GSO的性能优势,达不到所期望的结果。
也就是说,大数据包是多个相邻且大小相同的数据包(最后一个数据包除外)组合而成。以大数据包形式将应用数据提供给内核,可以提高数据处理性能。然而,由于上述限制,有些大数据包的长度比较短,无法充分发挥UDP GSO的性能优势。
有鉴于此,本申请提供了一种基于UDP GSO的数据传输技术,以充分发挥UDP GSO的性能优势。
在申请提供的技术方案中,相对于仅考虑将应用程序发过来的相邻且大小的包组合在一起交付给内核,本申请是在应用程序和内核之间提供一个大小分类组包器,利用计算机数据结构缓存,计算机TCP/IP技术,将包序号相近且大小相同的数据包组合成固定大小的包,然后再通过大小重组等手段重新进行组合,再使用socket编程等技术手段将组合后的大数据包发送出去,提高UDP GSO的发包性能和吞吐。
以下为本申请的名词解释:
UDP(User Datagram Protocol,用户数据报协议),是一种传输层协议,处于IP(Internet Protocol,网际互连)协议的上一层,用于提供面向事务的简单不可靠信息传送服务。具体的,应用程序访问UDP层然后使用IP层传送数据包。IP数据包的数据部分即为UDP数据包。IP层的报头指明源主机和目的主机地址,而UDP层的报头指明主机上的源端口和目的端口。UDP传输的段(segment)由多个字节的报头(header)和有效载荷字段(payload)构成。UDP报头由多个个域组成,其中每个域各占用多个字节,具体包括源端口号、目标端口号、数据包长度、校验值。
GSO(Generic Segmentation Offload,通用分段延后处理),是协议栈是否推迟分段。对于支持分片/分段功能的网卡,则使用网卡的硬件分片/分段能力执行分片/分段;对于不支持分片/分段功能的网卡,将数据交给驱动的前一刻以软件方式分片/分段。
内核,为操作系统的核心。具体的,所述内核是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。例如,Linux Kernel。
图1所示,以下提供本申请实施例的应用环境图。
发送端2可以通过网络和接收端4建立网络连接。
发送端2可以向接收端4提供内容服务。其中,内容服务可以被配置为提供诸如视频,音频,文本数据,其组合等的内容。内容可以包括内容流(如,视频流、音频流、信息流),内容文件(如,视频文件、音频文件、文本文件)和/或其他数据。
发送端2,可以由单个或多个计算设备组成,例如,机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。所述一个或多个计算机设备可以包括虚拟化计算实例。计算机设备可以基于定义用于仿真的特定软件(例如,操作系统,专用应用程序,服务器)的虚拟映像和/或其他数据来加载虚拟机。随着对不同类型的处理服务的需求改变,可以在所述一个或多个计算机设备上加载和/或终止不同的虚拟机。在另一些实施例中,发送端2也可以智能手机、平板电脑、个人电脑等。
网络,可以包括各种网络设备,例如路由器、交换机、多路复用器、集线器、调制解调器、网桥、中继器、防火墙、代理设备和/或等等。网络可以包括物理链路,例如同轴电缆链路,双绞线电缆链路,光纤链路,它们的组合和/或类似物。网络可以包括无线链路,例如蜂窝链路,卫星链路,Wi-Fi链路和/或类似物。
接收端4可以被配置为与发送端2建立UDP连接。其中,接收端4可以包括任何类型的计算机设备,例如智能手机、平板电脑、智能电视、投影仪、个人电脑等。接收端4可以内置浏览器或专门程序,通过浏览器或专门程序接收媒体流并向用户输出内容。其中,所述内容可以包括视频流、音频流、信息流、评论或其他数据。接收端4可以包括接口,该接口可以包括输入元件。例如,输入元件可以被配置为接收用户指令,所述用户指令可以使接收端4执行各类操作,如访问发送端2等。
需要说明的是,图1中的发送端、接收端的数量仅是示例性的,并不用于限制本申请。基于图1所示的架构,以下将通过多个实施例来描述的UDP GSO的数据传输方案。
实施例一
图2示意性示出了根据本申请实施例一的基于UDP GSO的数据传输方法的流程图。如图2所示,该基于UDP GSO的数据传输方法可以包括步骤S200~S208,其中:
步骤S200,获取多个待发送数据包。
步骤S202,对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包。需说明,部分待发送数据包可以指代所述多个待发送数据包中的若干个或全部。
步骤S204,调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包。
步骤S206,对排序后的多个目标数据包进行组合,得到一个或多个包组合。
步骤S208,将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。
以下结合图3对本实施例进行示例性描述。
如图3所示,发送端2中包括用户空间(urser space)和内核空间(kernel space)。其中:
用户空间,主要用于运行应用程序,如即时通讯程序、P2P程序等。
内核空间,主要用于运行内核。其中,所述内核包括各类通信协议栈,如UDP协议栈、IP协议栈等。
当一个应用程序产生待发送应用数据时,其需要调用sendmsg函数将该待发送应用数据传递到内核。之后,内核通过UDP协议栈、IP协议栈等对该待发送应用数据进行封装等。例如,UDP协议栈的操作如下:将应用数据作为payload,添加UDP header,生成UDP数据包。
所述待发送应用数据是以待发送数据包为单位,如HTTP数据包。
在本实施例中,在应用程序和内核之间提供了一个大小(长度)分类组包器,提供缓存和组包服务。
在应用程序产生一个一个的待发送数据包之后,不会将各个待发送数据包单独提供给内核,而是以缓存的形式聚集得到多个待发送数据包,对较小的待发送数据包进行重组,并将重组后得到的重组数据包也进行缓存,然后将重组数据包和未参与重组的待发送数据包进行重排序和组合。具体的,将大小相同的目标数据包(包括重组数据包、未参与重组的待发送数据包)放置在相邻的位置后再组合。
举例而言:
假设应用程序产生的多个待发送数据包的大小分为a、b、c、d,原始的各个待发送数据包:abcbacdadab…。
将大小为a的待发送数据包和大小为b的待发送数据包进行两两重组,形成大小为a+b的多个重组数据包。
将将大小为c的待发送数据包和大小为d的待发送数据包进行两两重组,形成大小为c+d的多个重组数据包。
确定用于排序的多个目标数据包,该多个目标数据包包括:上述重组后得到的多个重组数据包。需要说明的是,本应用性示例中,没有未参与重组的待发送数据包。
排序结果为:a+b,a+b,…,a+b,c+d,c+d,…,c+d,即相邻的目标数据包的大小相同。
基于排序后的各个目标数据包,得到如下组合:
第一包组合:a+b,a+b,…,c+d(最后一个目标数据包的大小为c+d,前面的每个目标数据包的大小均为a+b);
第二包组合:c+d,c+d,c+d,…。
之后,将第一包组合、第二包组合分别作为大数据包,即得到2个大数据包,然后,调用sendmsg函数将这两个大数据包依次传递给内核,由内核进行相关的处理操作。
在接收到上述包组合(如,第一包组合)之后,内核执行如下操作:
(1)在开启UDP GSO的情形下,所述第一包组合作为payload,依次经过UDP层、IP层、数据链路层(Data-Link layer),从而最终得到包括第一包组合的以太网数据帧。
(2)对以太网数据帧执行UDP GSO的功能逻辑。示例性的:(2.1)如果网卡支持分片功能,则将以太网数据帧传递给网卡,由网卡执行分片操作。(2.2)如果网卡不支持分片功能,则在以太网数据帧传递到驱动前一刻,通过软件方式执行分片操作。
之后,得到的各个分片(UDP GSO segment)分别作为单独的数据包,从发送端2传输到接收端4中。
本申请实施例提供的基于UDP GSO的数据传输方法,优势如下:
(1)针对相邻的待发送数据包的大小可能经常不同,而导致包组合的大小受限制的问题,本实施例提供了待发送数据包的重组、排序机制,将较小的部分待发送数据包进行重组以得到多个重组数据包,然后对多个重组数据包和未参数重组的待发送数据包进行数据包的排序和组合,使得大小相同的数据包排序在一起。因此,大小相同的数据包可以组合在一个包组合(大数据包)中,避免在各个待发送数据包乱序情形下生成的包组合较小的问题(由于相邻的待发送数据包的大小不同即触发组合的结束),从而降低应用程序间隔生成的待发送数据包大小不确定而导致发包系统调用(如sendmsg)被频繁调用的概率,从而可以有效地发挥内核UDP GSO的能力,提升UDP的发包效率,降低硬件负载等效果。
(2)由于对部分待发送数据包的重组,使得最终参与排序的数据包(目标数据包)的大小类别进一步减少,从而减少了包组合的数量,从而减少系统调用的频次,进一步有效地发挥内核UDP GSO的性能优势,提升UDP的发包效率。
即,本实施例在被允许的范围内,尽可能地生成较大的包组合(大数据包),尽量提供较大的包组合给内核,充分发挥UDP GSO的性能优势,通过UDP GSO和socket编程等技术手段将组合后的大数据包发送出去,提高UDP GSO的发包性能和吞吐。
下面提供本申请实施例的若干个可选实施例,以进一步优化技术效果。
随着应用程序一个一个数据包的产生,重组和排序的时机显得尤为重要,其涉及到发包效率和系统调度频次之间的平衡和优化。为此,下面提供几个示例性的触发排序的方案。
方案一:
作为可选的实施例,如图4所示,所述步骤S202“对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包”可以包括:步骤S400,确定所述多个待发送数据包的数据包个数达到预设数量;步骤S402,在所述数据包个数达到所述预设数量的情况下,对所述部分待发送数据包进行重组。在本可选的实施例中,可以通过大小分类组包器缓存所述多个待发送数据包,基于大小分类组包器中的所述多个待发送数据包的数据包个数和所述预设数量的比较结果,来判定是否触发重组操作。即,通过设置所述预设数量来取得发包效率和系统调度频次之间的平衡和优化。需要说明的是,该预设数量可以用户根据数据传输偏好设置。在另一些实施例中,也可以根据发送端2的CPU负载、UDP带宽、接收端4的CPU负载,以及所述接收端4对UDP乱序的容忍度来动态设置。
作为可选的实施例,继续参考图4,所述方法还包括:步骤S404,在所述数据包个数未达到所述预设数量的情况下,继续获取新的待发送数据包。在本可选的实施例中,在未达到所述预设数量的情况下,可以暂不重组和排序,而是继续缓存新的待发送数据包,使得后续组合的大数据包足够大,降低系统调度的频次。
方案二:
作为可选的实施例,如图5所示,所述步骤S202“对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包”可以包括:步骤S500,根据每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;步骤S502,在所述最大时间间隔大于时间间隔阈值的情形下,对所述部分待发送数据包进行重组。需要说明的是,可以通过大小分类组包器缓存所述多个待发送数据包。所述大小分类组包器可以提供队列式的缓存,时间信息可以是待发送数据包进入所述大小分类组包器的时间。产生时间较接近的各个待发送数据包进入所述大小分类组包器的时间也较接近。若各待发送数据包进入大小分类组包器的时间差过大,而且后续排序的时候会一定程度上打乱待发送数据包的顺序,导致发包乱序。如果一个包组合中的各个待发送数据包的时间差过大过大,会显著放大发包乱序效应。为此,当所述大小分类组包器中的多个待发送数据包之间的最大时间间隔大于时间间隔阈值时,则判定触发重组,防止发包严重乱序。因此,本可选的实施例提供的技术方案,在尽量维持发包效率和系统调度频次的同时,确保待发送数据包不会出现发包严重乱序的问题,确保数据传输质量。
在另外一些实施例中,确定所述多个待发送数据包之间的最大时间间隔的实施步骤可以为:计算每两个待发送数据包的时间间隔,取最大值作为最大时间间隔。
在另外一些实施例中,所述各个待发送数据包的时间信息亦可以转换为数据包序号,通过数据包序号的差值来判定:是否触发调整所述多个待发送数据包的重组。
在另外一些实施例中,如图6所示,所述方法还包括:步骤S600,动态生成所述时间间隔阈值;其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的CPU负载、UDP带宽、接收端的CPU负载,以及所述接收端对UDP乱序的容忍度。在本可选的实施例中,所述时间间隔阈值可以实时情况动态生成,优化了发包效率、系统调度频次、数据传输质量的动态平衡。在示例性应用中,可以通过标准时间间隔阈值和各个参数的权重值等动态计算出所述时间间隔阈值,也可以将上述多个参数输入训练好的机器学习模型中,得到所述时间间隔阈值。
在另外一些实施例中,所述时间间隔阈值为一个固定值,该固定值由用户进行设置。
作为可选的实施例,继续参考图5,所述方法还包括:步骤S504,在所述最大时间间隔不大于时间间隔阈值的情形下,继续获取新的待发送数据包。在本可选的实施例中,在所述最大时间间隔不大于所述时间间隔阈值的情形下,说明此时所述多个待发送数据包在产生时间上比较接近,可以暂不重组,而是继续缓存新的待发送数据包,使得后续组合的大数据包足够大,降低系统调度的频次。
以上示例性地提供了基于“待发送数据包个数”和“待发送数据包之间的最大时间间隔”触发排序的机制。需要说明的是,还可以根据需要提供其他的触发排序的机制,本申请不做限定。另外,上述触发排序的机制可以单独使用,也可以同时使用。
以上介绍了对所述多个待发送数据包的重组触发机制,接下来介绍示例性重组方案。
作为可选的实施例,如图7所示,所述步骤S202“对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包”可以包括:步骤S700,通过多个队列缓存所述多个待发送数据包,同一个队列中的各个待发送数据包的大小相同;步骤S702,对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包。在本可选的实施例中,提供多个队列。当应用程序产生一个待发送数据包并进行缓存时,会根据该待发送数据包的长度(大小)缓存到相应的队列中。若没有相应的队列,则产生一个新的队列用于缓存该待发送数据包。也就是说,同一个队列中的各个待发送数据包的大小相同。
基于各个待发送数据包的大小,通过所述多个队列对所述多个待发送数据包进行分类缓存。由于每个队列中的待发送数据包的大小是相同的,可以进行同一队列内和队列间的数据包重组,从而快速得到大小相同的多个重组数据包,提高重组效率。
在一些实施例中,所述至少部分队列包括目标队列,所述部分待发送数据包包括所述目标队列的待发送数据包。如图8所示,所述步骤S702可以包括:步骤S800,从所述多个队列中选取所述目标队列,其中,所述目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及步骤S802,对所述目标队列内的各个待发送数据包进行队列内的数据包重组,以得到所述多个重组数据包。举例而言,目标队列用于存储大小为32个字节的待发送数据包。可以对目标队列中的待发送数据包进行两两重组或三三重组等。以两两重组为例,可以将形成大小为64个字节的多个重组数据包。该大小为64个字节的多个重组数据包可以存储接到相应的其他队列中。若没有相应的其他队列,则生成一个新的队列用于存储该大小为64个字节的多个重组数据包。在本实施例中,通过队列内的数据包重组,可以快速得到大小相同的多个重组数据包,提高重组效率。
在另一些实施例中,所述至少部分队列包括多个目标队列,所述部分待发送数据包包括所述多个目标队列的待发送数据包。如图9所示,所述步骤S702可以包括:步骤S900,从所述多个队列中选取所述多个目标队列,其中,各目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;步骤S902,将不同目标队列中的待发送数据包进行队列间的数据包组合,以得到所述多个重组数据包。举例而言,目标队列L1用于存储大小为32个字节的待发送数据包,目标队列L2用于存储大小为16个字节的待发送数据包。可以对目标队列L1、L2中的待发送数据包进行队列间的两两重组等。例如,可以将目标队列L1中的待发送数据包和目标队列L2中的待发送数据包进行重组,从而多个重组数据包,每个重组数据包的大小为48个字节。该大小为48个字节的多个重组数据包可以存储接到相应的其他队列中。若没有相应的其他队列,则生成一个新的队列用于存储该大小为48个字节的多个重组数据包。在本实施例中,通过队列间的数据包重组,可以快速得到大小相同的多个重组数据包,提高重组效率。
以上通过多个队列的缓存方式来实现大量待发送数据包的重组方案,上述重组数据包亦可以进一步重组。需要说明的是,还可以通过其他方式实现待发送数据包的重组,例如,利用递归算法技术手段将大小相同的小待发送数据包进行重组。
作为可选的实施例,如图10所示,所述步骤S204“调整多个目标数据包之间的排序”可以包括:步骤S1000,根据所述多个目标数据包中各个目标数据包的大小,对所述多个目标数据包进行排序;步骤S1002,根据排序结果,将所述排序后的多个目标数据包依次写入到待发送缓存包队列中。所述排序,可以根据各个目标数据包的(长度)大小从大到小进行排序,也可以从小到大进行排序。所述排序算法,可以采用快速排序、归并排序等算法,也可以采用其他排序算法。在本可选的实施例中,通过高效地将大小相同的各个目标数据包聚合到相邻的位置。
作为可选的实施例,如图11所示,所述步骤S206“对排序后的多个目标数据包进行组合,得到一个或多个包组合”可以包括:步骤S1100,组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,其中,该包组合包括连续的若干个目标数据包,该连续的若干个目标数据包依次包括对头、与对头大小相同的后续目标数据包,及一个与对头大小不相同的目标数据包;步骤S1102,在所述待发送缓存包队列还包括未组合的目标数据包的情形下,对未组合的目标数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的目标数据包。举例来说,待发送缓存包队列从对头到队尾的目标数据包的大小依次为:a+b,a+b,…,a+b,c+d,c+d,…,c+d,则可以生成一个包组合“a+b,a+b,…,c+d”,接下来待发送缓存包队列更新为“c+d,…,c+d”,然后,可以生成下一个包组合“c+d,…,c+d”,将各个包组合依次发送到内核中,以供内核执行UDP GSO的功能逻辑。在本可选的实施例中,可以通过上述组合出尽可能大的包组合,降低系统调用频次。
作为可选的实施例,为了充分发挥UDP GSO的性能优势,通过UDP GSO和socket编程等技术手段将组合后的大数据包发送出去,所述步骤S208可以包括如下步骤:
根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
通过所述内核对所述一个或多个包组合分别执行UDP GSO,以得到多个分片并对所述多个分片进行传输;
其中,所述内核对接收到的包组合执行UDP GSO,包括:
在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
在上述可选的实施例中,先得到的包组合,先发送到所述内核中,进而先分片和传输。
为了使得本申请实施例更易于理解,以下结合图12提供一个示例性应用。
S1:应用程序产生一个待发送数据包A1。
S2:判断大小分类组包器中的待发送数据包是否触发预设条件。
举例该预设条件可以包括:(1)待发送数据包的数据包个数是否达到数量阈值;(2)在该大小分类组包器中,最后进入该大小分类组包器的待发送数据包和最后键入该大小分类组包器的待发送数据包的时间间隔是否大于时间间隔阈值:(3)定时器是否超时。如果触发上述任何一个预设条件,则进入步骤S3,否则将步骤S1提供的待发送数据包A1缓存到大小分类组包器中。本次发包流程结束。
S3:对大小分类组包器中的部分待发送数据包进行重组,得到多个重组数据包。
所述长度分类组合包提供多个队列,按各待发送数据包的大小分类缓存。
具体的,所述多个队列用于存储待发送数据包,同一队列用于存储相同大小的待发送数据包。
其中,所述重组包括:
(1)对同一个队列中的两个以上的待发送数据包合并;和/或
(2)队列间的待发送数据包的合并,如一个队列中的待发送数据包和另一个队列中的待发送数据包合并。
重组后得到的重组数据包加入已有的队列中,或加入新建的队列中。
需要说明的是,重组数据包的大小不能超过当前MTU设定下的单个UDP payload的最大值。
S4:调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包。
S5:对排序后的多个目标数据包进行组合,得到一个或多个包组合(大数据包)。
S6:调用sendmsg函数将包组合逐个提供给内核,以使内核对该包组合执行UDPGSO和发送操作。
实施例二
图13示意性示出了根据本申请实施例二的基于UDP GSO的数据传输装置的框图,该基于UDP GSO的数据传输装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例各程序模块的功能。如图13所示,该基于UDP GSO的数据传输装置1300可以包括获取模块1310、重组模块1320、调整模块1330、组合模块1340和提供模块1350,其中:
获取模块1310,用于获取多个待发送数据包;
重组模块1320,用于对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;
调整模块1330,用于调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;
组合模块1340,用于对排序后的多个目标数据包进行组合,得到一个或多个包组合;及
提供模块1350,用于将所述一个或多个包组合提供给内核,以供所述内核执行UDPGSO和数据传输。
在可选的实施例中,所述重组模块1320还用于:
确定所述多个待发送数据包的数据包个数达到预设数量;及
在所述数据包个数达到所述预设数量的情况下,对所述部分待发送数据包进行重组。
在可选的实施例中,所述重组模块1320还用于:
在所述数据包个数未达到所述预设数量的情况下,继续获取新的待发送数据包。
在可选的实施例中,所述重组模块1320还用于:
根据每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;及
在所述最大时间间隔大于时间间隔阈值的情形下,对所述部分待发送数据包进行重组。
在可选的实施例中,所述装置还包括动态生成模块(未标识),用于:
动态生成所述时间间隔阈值;
其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的CPU负载、UDP带宽、接收端的CPU负载,以及所述接收端对UDP乱序的容忍度。
在可选的实施例中,所述重组模块1320还用于:
在所述最大时间间隔不大于时间间隔阈值的情形下,继续获取新的待发送数据包。
在可选的实施例中,所述重组模块1320还用于:
通过多个队列缓存所述多个待发送数据包,同一个队列中的各个待发送数据包的大小相同;
对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包。
在可选的实施例中,所述至少部分队列包括目标队列,所述部分待发送数据包包括所述目标队列的待发送数据包;
所述重组模块1320还用于:
从所述多个队列中选取所述目标队列,其中,所述目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
对所述目标队列内的各个待发送数据包进行队列内的数据包重组,以得到所述多个重组数据包。
在可选的实施例中,所述至少部分队列包括多个目标队列,所述部分待发送数据包包括所述多个目标队列的待发送数据包;
所述重组模块1320还用于:
从所述多个队列中选取所述多个目标队列,其中,各目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
将不同目标队列中的待发送数据包进行队列间的数据包组合,以得到所述多个重组数据包。
在可选的实施例中,所述调整模块1330还用于:
根据所述多个目标数据包中各个目标数据包的大小,对所述多个目标数据包进行排序;及
根据排序结果,将所述排序后的多个目标数据包依次写入到待发送缓存包队列中。
在可选的实施例中,所述组合模块1340还用于:
组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,其中,该包组合包括连续的若干个目标数据包,该连续的若干个目标数据包依次包括对头、与对头大小相同的后续目标数据包,及一个与对头大小不相同的目标数据包;
在所述待发送缓存包队列还包括未组合的目标数据包的情形下,对未组合的目标数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的目标数据包。
在可选的实施例中,所述提供模块1350还用于:
根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
通过所述内核对所述一个或多个包组合分别执行UDP GSO,以得到多个分片并对所述多个分片进行传输;
其中,所述内核对接收到的包组合执行UDP GSO,包括:
在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
实施例三
图14示意性示出了根据本申请实施例三的适于实现基于UDP GSO的数据传输方法的计算机设备的硬件架构示意图。计算机设备10000可以作为发送端2或其组成部分,也可以作为接收端4或其组成部分。本实施例中,计算机设备10000是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备,例如,可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等,或是智能手机、平板电脑、笔记本电脑等电子装置等。如图14所示,计算机设备10000至少包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备10000的内部存储模块,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如,基于UDP GSO的数据传输方法的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器10020在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信链接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code Division Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图14仅示出了具有部件10010-10030的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器10010中的基于UDP GSO的数据传输方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器10020)所执行,以完成本申请。
实施例四
本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例一中的基于UDP GSO的数据传输方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例一、三中的基于UDP GSO的数据传输方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (15)
1.一种基于UDP GSO的数据传输方法,其特征在于,所述方法包括:
获取多个待发送数据包;
对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;
调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;
对排序后的多个目标数据包进行组合,得到一个或多个包组合;及
将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。
2.根据权利要求1所述的基于UDP GSO的数据传输方法,其特征在于,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
确定所述多个待发送数据包的数据包个数达到预设数量;及
在所述数据包个数达到所述预设数量的情况下,对所述部分待发送数据包进行重组。
3.根据权利要求2所述的基于UDP GSO的数据传输方法,其特征在于,还包括:
在所述数据包个数未达到所述预设数量的情况下,继续获取新的待发送数据包。
4.根据权利要求3所述的基于UDP GSO的数据传输方法,其特征在于,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
根据每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;及
在所述最大时间间隔大于时间间隔阈值的情形下,对所述部分待发送数据包进行重组。
5.根据权利要求4所述的基于UDP GSO的数据传输方法,其特征在于,还包括:
动态生成所述时间间隔阈值;
其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的CPU负载、UDP带宽、接收端的CPU负载,以及所述接收端对UDP乱序的容忍度。
6.根据权利要求4所述的基于UDP GSO的数据传输方法,其特征在于,还包括:
在所述最大时间间隔不大于时间间隔阈值的情形下,继续获取新的待发送数据包。
7.根据权利要求1至6任意一项所述的基于UDP GSO的数据传输方法,其特征在于,所述对所述多个待发送数据包的部分待发送数据包进行重组,以得到多个重组数据包,包括:
通过多个队列缓存所述多个待发送数据包,同一个队列中的各个待发送数据包的大小相同;
对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包。
8.根据权利要求7所述的基于UDP GSO的数据传输方法,其特征在于,所述至少部分队列包括目标队列,所述部分待发送数据包包括所述目标队列的待发送数据包;
所述对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包,包括:
从所述多个队列中选取所述目标队列,其中,所述目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
对所述目标队列内的各个待发送数据包进行队列内的数据包重组,以得到所述多个重组数据包。
9.根据权利要求7所述的基于UDP GSO的数据传输方法,其特征在于,所述至少部分队列包括多个目标队列,所述部分待发送数据包包括所述多个目标队列的待发送数据包;
所述对所述多个队列的至少部分队列中的待发送数据包进行重组,以得到多个重组数据包,包括:
从所述多个队列中选取所述多个目标队列,其中,各目标队列中的待发送数据包的大小小于预设值,或小于所述多个队列的部分其他队列中的待发送数据包的大小;及
将不同目标队列中的待发送数据包进行队列间的数据包组合,以得到所述多个重组数据包。
10.根据权利要求1至6任意一项所述的基于UDP GSO的数据传输方法,其特征在于,所述调整多个目标数据包之间的排序,包括:
根据所述多个目标数据包中各个目标数据包的大小,对所述多个目标数据包进行排序;及
根据排序结果,将所述排序后的多个目标数据包依次写入到待发送缓存包队列中。
11.根据权利要求10所述的基于UDP GSO的数据传输方法,其特征在于,所述对排序后的多个目标数据包进行组合,得到一个或多个包组合,包括:
组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,其中,该包组合包括连续的若干个目标数据包,该连续的若干个目标数据包依次包括对头、与对头大小相同的后续目标数据包,及一个与对头大小不相同的目标数据包;
在所述待发送缓存包队列还包括未组合的目标数据包的情形下,对未组合的目标数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的目标数据包。
12.根据权利要求1至6任意一项所述的基于UDP GSO的数据传输方法,所述将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输,包括:
根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
通过所述内核对所述一个或多个包组合分别执行UDP GSO,以得到多个分片并对所述多个分片进行传输;
其中,所述内核对接收到的包组合执行UDP GSO,包括:
在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
13.一种基于UDP GSO的数据传输装置,其特征在于,包括:
获取模块,用于获取多个待发送数据包;
重组模块,用于对所述多个待发送数据包中的部分待发送数据包进行重组,以得到多个重组数据包;
调整模块,用于调整多个目标数据包之间的排序,其中,大小相同的目标数据包相邻放置,所述多个目标数据包包括所述多个重组数据包以及未参与所述重组的待发送数据包;
组合模块,用于对排序后的多个目标数据包进行组合,得到一个或多个包组合;及
提供模块,用于将所述一个或多个包组合提供给内核,以供所述内核执行UDP GSO和数据传输。
14.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现权利要求1至12任一项所述的基于UDP GSO的数据传输方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行权利要求1至12中任一项所述的基于UDP GSO的数据传输方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210220228.6A CN114615347B (zh) | 2022-03-08 | 2022-03-08 | 基于udp gso的数据传输方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210220228.6A CN114615347B (zh) | 2022-03-08 | 2022-03-08 | 基于udp gso的数据传输方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114615347A true CN114615347A (zh) | 2022-06-10 |
CN114615347B CN114615347B (zh) | 2024-03-12 |
Family
ID=81861053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210220228.6A Active CN114615347B (zh) | 2022-03-08 | 2022-03-08 | 基于udp gso的数据传输方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114615347B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117372210A (zh) * | 2023-10-10 | 2024-01-09 | 广东海洋大学 | 一种法律服务咨询系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110222557A1 (en) * | 2010-03-11 | 2011-09-15 | Microsoft Corporation | Multi-stage large send offload |
US9641435B1 (en) * | 2014-03-28 | 2017-05-02 | Juniper Neworks, Inc. | Packet segmentation offload for virtual networks |
US20200120190A1 (en) * | 2019-12-12 | 2020-04-16 | Linden Cornett | Semi-flexible packet coalescing control path |
US20210029587A1 (en) * | 2019-07-26 | 2021-01-28 | Qualcomm Incorporated | Transmission control protocol (tcp) and/or user datagram protocol (udp) receive offloading |
US20210234798A1 (en) * | 2019-01-03 | 2021-07-29 | Tencent Technology (Shenzhen) Company Limited | Data transmission method and apparatus, computer readable medium, and electronic device |
-
2022
- 2022-03-08 CN CN202210220228.6A patent/CN114615347B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110222557A1 (en) * | 2010-03-11 | 2011-09-15 | Microsoft Corporation | Multi-stage large send offload |
US9641435B1 (en) * | 2014-03-28 | 2017-05-02 | Juniper Neworks, Inc. | Packet segmentation offload for virtual networks |
US20210234798A1 (en) * | 2019-01-03 | 2021-07-29 | Tencent Technology (Shenzhen) Company Limited | Data transmission method and apparatus, computer readable medium, and electronic device |
US20210029587A1 (en) * | 2019-07-26 | 2021-01-28 | Qualcomm Incorporated | Transmission control protocol (tcp) and/or user datagram protocol (udp) receive offloading |
US20200120190A1 (en) * | 2019-12-12 | 2020-04-16 | Linden Cornett | Semi-flexible packet coalescing control path |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117372210A (zh) * | 2023-10-10 | 2024-01-09 | 广东海洋大学 | 一种法律服务咨询系统 |
CN117372210B (zh) * | 2023-10-10 | 2024-03-26 | 广东海洋大学 | 一种法律服务咨询系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114615347B (zh) | 2024-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7286476B2 (en) | Accelerating network performance by striping and parallelization of TCP connections | |
US8526441B2 (en) | System and method for handling out-of-order frames | |
US8660137B2 (en) | Method and system for quality of service and congestion management for converged network interface devices | |
US8416788B2 (en) | Compression of data packets while maintaining endpoint-to-endpoint authentication | |
US11012367B2 (en) | Technologies for managing TCP/IP packet delivery | |
TWI411279B (zh) | 封包聚合的方法與系統 | |
US8121148B2 (en) | Protocol stack using shared memory | |
US8255567B2 (en) | Efficient IP datagram reassembly | |
US20130094501A1 (en) | Processing data packets in performance enhancing proxy (pep) environment | |
US8139482B1 (en) | Method to implement an L4-L7 switch using split connections and an offloading NIC | |
US9185033B2 (en) | Communication path selection | |
US8341244B2 (en) | Data distribution communication apparatus and data distribution system | |
US8711689B1 (en) | Dynamic trunk distribution on egress | |
US20210359952A1 (en) | Technologies for protocol-agnostic network packet segmentation | |
CN107231269B (zh) | 一种集群精确限速方法和装置 | |
US20070291782A1 (en) | Acknowledgement filtering | |
CN104170349A (zh) | 在分组网关上的策略控制实施 | |
KR20220006606A (ko) | 메시지 처리 방법 및 관련 장치 | |
CN114615347B (zh) | 基于udp gso的数据传输方法、装置、计算机设备和存储介质 | |
US20040174877A1 (en) | Load-balancing utilizing one or more threads of execution for implementing a protocol stack | |
US20210092058A1 (en) | Transmission of high-throughput streams through a network using packet fragmentation and port aggregation | |
CN114666836A (zh) | 数据传输方法、装置、电子设备和计算机可读存储介质 | |
JP5382812B2 (ja) | データ圧縮転送システム、伝送装置及びそれらに用いるデータ圧縮転送方法 | |
EP1460804A2 (en) | System and method for handling out-of-order frames (fka reception of out-of-order tcp data with zero copy service) | |
US8516069B1 (en) | Optimizer-to-link layer interface using dynamic buffering |
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 |