基于UDPGSO的数据传输方法和装置与流程

文档序号:30381490发布日期:2022-06-11 04:18阅读:141来源:国知局
基于UDPGSO的数据传输方法和装置与流程
基于udp gso的数据传输方法和装置
技术领域
1.本技术涉及通信技术领域,尤其涉及一种基于udp gso的数据传输方法、装置、设备及计算机可读存储介质。


背景技术:

2.随着计算机网络的发展,数据传输量越来越大。为适应这一发展,提出了分片/分段技术,即:对超过预设长度的数据包进行分片或分段,使每一分片、分段的长度小于或等于预设长度,然后进一步封装为数据包形式,以便在网络中进行传输。
3.gso(generic segmentation offload,通用分段延后处理)为一种延后卸载技术,用于将分片/分段延后到网卡或送给驱动前一刻,以降低cpu压力。其中,udp(user datagram protocol,用户数据报协议)下的gso又称之为udp gso。当内核支持udp gso功能,其可以接受应用程序发来的大数据包,之后在网卡中或送给驱动前一刻将大数据包拆分为若干块,并为每个块加上udp报头以封装成udp数据包。
4.其中,大数据包是多个相邻且大小相同的数据包(最后一个数据包除外)组合而成。以大数据包形式将应用数据提供给内核,可以提高数据处理性能。然而,本发明人发现:有些大数据包的长度比较短,从而无法充分发挥udp gso的性能优势。


技术实现要素:

5.本技术实施例的目的是提供一种基于udp gso的数据传输方法、装置、计算机设备及计算机可读存储介质,用于解决上述缺陷。
6.本技术实施例的一个方面提供了一种基于udp gso的数据传输方法,所述方法包括:
7.获取多个待发送数据包;
8.调整所述多个待发送数据包之间的排序,其中,大小相同的待发送数据包相邻放置;
9.对排序后的多个待发送数据包进行组合,得到一个或多个包组合;及
10.将所述一个或多个包组合提供给内核,以供所述内核执行udp gso和数据传输。
11.可选地,所述调整所述多个待发送数据包之间的排序,包括:
12.通过缓存区域存储所述多个待发送数据包;
13.确定所述多个待发送数据包的数据包个数达到预设数量;及
14.在所述数据包个数达到所述预设数量的情况下,调整所述多个待发送数据包的排序。
15.可选地,还包括:
16.在所述数据包个数未达到所述预设数量的情况下,通过所述缓存区域继续存储新的待发送数据包。
17.可选地,所述调整所述多个待发送数据包之间的排序,包括:
18.通过缓存区域存储所述多个待发送数据包;
19.记录每个待发送数据包的时间信息,所述时间信息为待发送数据包进入所述缓存区域的时间;
20.根据所述每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;
21.在所述最大时间间隔大于时间间隔阈值的情形下,调整所述多个待发送数据包的排序。
22.可选地,还包括:动态生成所述时间间隔阈值;
23.其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的cpu负载、udp带宽、接收端的cpu负载,以及所述接收端对udp乱序的容忍度。
24.可选地,还包括:在所述最大时间间隔不大于时间间隔阈值的情形下,通过所述缓存区域继续存储新的待发送数据包。
25.可选地,所述调整所述多个待发送数据包之间的排序,包括:
26.根据所述多个待发送数据包中各个待发送数据包的大小,对所述多个待发送数据包进行排序;及
27.根据排序结果,将所述排序后的多个待发送数据包依次写入到待发送缓存包队列中。
28.可选地,所述对排序后的多个待发送数据包进行组合,得到一个或多个包组合,包括:
29.组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,该包组合包括连续的若干个待发送数据包,该连续的若干个待发送数据包依次包括对头、与对头大小相同的后续待发送数据包,及一个与对头大小不相同的待发送数据包;
30.在所述待发送缓存包队列还包括未组合的待发送数据包的情形下,对未组合的待发送数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的待发送数据包。
31.可选地,所述将所述一个或多个包组合提供给内核,以供所述内核执行udp gso和数据传输,包括:
32.根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
33.通过所述内核对所述一个或多个包组合分别执行udp gso,以得到多个分片并对所述多个分片进行传输;
34.其中,所述内核对接收到的包组合执行udp gso,包括:
35.在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
36.在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
37.本技术实施例的再一个方面提供了一种基于udp gso的数据传输装置,包括:
38.获取模块,用于获取多个待发送数据包;
39.调整模块,用于调整所述多个待发送数据包之间的排序,其中,大小相同的待发送数据包相邻放置;
40.组合模块,用于对排序后的多个待发送数据包进行组合,得到一个或多个包组合;

41.提供模块,用于将所述一个或多个包组合提供给内核,以供所述内核执行udp gso和数据传输。
42.本技术实施例的再一个方面提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现如上任一项所述的基于udp gso的数据传输方法的步骤。
43.本技术实施例的又一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上任一项所述的基于udp gso的数据传输方法的步骤。
44.本技术实施例提供的基于udp gso的数据传输方法、装置、设备及计算机可读存储介质,可以包括以优点:针对相邻的待发送数据包的大小可能经常不同,而导致包组合的大小受限制的问题,提供了待发送数据包的重排序机制,使得大小相同的待发送数据包排序在一起。因此,大小相同的待发送数据包可以组合在一个包组合(大数据包)中,避免在各个待发送数据包乱序情形下生成的包组合较小的问题(由于相邻的待发送数据包的大小不同即触发组合的结束),从而降低应用程序间隔生成的待发送数据包大小不确定而导致发包系统调用被频繁调用的概率,从而可以有效地发挥内核udp gso的性能优势,提升udp的发包效率。
45.也就是说,在被允许的范围内,尽可能地生成较大的包组合(大数据包),尽量提供较大的包组合给内核,充分发挥udp gso的性能优势,通过udp gso和socket编程等技术手段将组合后的大数据包发送出去,提高udp gso的发包性能和吞吐。
附图说明
46.图1示意性示出了根据本技术实施例一的基于udp gso的数据传输方法的应用环境图;
47.图2示意性示出了根据本技术实施例一的基于udp gso的数据传输方法的流程图;
48.图3示意性示出了根据本技术实施例一的数据流向图;
49.图4示意性示出了图2中步骤s202的子流程图;
50.图5示意性示出了图2中步骤s202的另一子流程图;
51.图6示意性示出了根据本技术实施例一的基于udp gso的数据传输方法的新增步骤流程图;
52.图7示意性示出了图2中步骤s202的另一子流程图;
53.图8示意性示出了图2中步骤s204的子流程图;
54.图9示意性示出了一个示例性应用中的流程操作图;
55.图10示意性示出了根据本技术实施例二的基于udp gso的数据传输装置的框图;以及
56.图11示意性示出了根据本技术实施例三的适于实现基于udp gso的数据传输方法的计算机设备的硬件架构示意图。
具体实施方式
57.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限制本技术。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
58.需要说明的是,在本技术实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限制有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本技术所要求的保护范围之内。
59.在本技术的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本技术及区别每一步骤,因此不能理解为对本技术的限制。
60.本发明人了解到,在以太网通信中,mtu(maximum transmission unit,最大传输单元)规定了以太网数据帧的最大长度,如1500个字节。为此,当应用程序提供的数据包的长度超过mtu值时,则ip层需要对该数据包进行分片,使每一片的长度小于或等于mtu值。这种分片机制,很大程度上减轻了解决低速网络传输的不可靠性问题。但是,随着计算机网络的发展,数据传输量越来越大,因此,需要进行大量的分片的拆分,从而极大地消耗cpu计算资源。
61.为降低cpu计算资源消耗,提供了gso(generic segmentation offload,通用分段延后处理)技术。其中,udp(user datagram protocol,用户数据报协议)下的gso又称之为udp gso(udp gso with hardware offload)。当内核支持并开始udp gso功能时,其可以接受应用程序发来的大数据包(长度大于mtu值),之后将大数据包拆分为若干块,并为每个块加上udp报头以封装成udp数据包。
62.具体的,在开启udp gso的情况下,内核可以将大数据包的分片操作从ip层下移到网卡或数据发送给网卡驱动之前。对网卡的硬件特性进行判断,如果支持tso等机制,就直接把大数据包发送给网卡,由网卡代替cpu进行分片操作以降低cpu负载。若网卡不支持tso等机制,则在大数据包发送给网卡之前再去进行分片操作,这样即使不依靠网卡硬件,也最大幅度地减少协议栈处理的次数,提高数据处理和传输效率。
63.本发明人发现,udp gso的使用具有一定的限制。比如一个udp数据报文的理论最大长度是64kb,所以组合在一起的数据包的数量一般最多到45个。而且,不同的数据包组合在一起也有限制。这里的限制主要包括:第一,在组合中,除组合中的最后一个数据包之外,组合中的相邻的数据包的大小必须是一致的。第二,一旦遇到一个最后那个数据包(大小与之前的数据包不同),那么数据包组合阶段就结束。因此,现实情况下,少量的数据包组合在一起的情况会很大概率地出现,这就无法充分发挥udp gso的性能优势,达不到所期望的结果。
64.也就是说,大数据包是多个相邻且大小相同的数据包(最后一个数据包除外)组合而成。以大数据包形式将应用数据提供给内核,可以提高数据处理性能。然而,由于上述限制,有些大数据包的长度比较短,无法充分发挥udp gso的性能优势。
65.有鉴于此,本技术提供了一种基于udp gso的数据传输技术,以充分发挥udp gso的性能优势。
66.在申请提供的技术方案中,相对于仅考虑将应用程序发过来的相邻且大小的包组合在一起交付到内核,本技术是在应用程序和内核之间进一步插入一个组包过程。这个组包过程利用计算机数据结构缓存,计算机tcp/ip技术,将包序号相近且大小不相同的小包组合成固定大小的包,然后再通过udp gso和socket编程等技术手段将组合后的大数据包发送出去,提高udp gso的发包性能和吞吐。
67.以下为本技术的名词解释:
68.udp(user datagram protocol,用户数据报协议),是一种传输层协议,处于ip(internet protocol,网际互连)协议的上一层,用于提供面向事务的简单不可靠信息传送服务。具体的,应用程序访问udp层然后使用ip层传送数据包。ip数据包的数据部分即为udp数据包。ip层的报头指明源主机和目的主机地址,而udp层的报头指明主机上的源端口和目的端口。udp传输的段(segment)由多个字节的报头(header)和有效载荷字段(payload)构成。udp报头由多个个域组成,其中每个域各占用多个字节,具体包括源端口号、目标端口号、数据包长度、校验值。
69.gso(generic segmentation offload,通用分段延后处理),是协议栈是否推迟分段。对于支持分片/分段功能的网卡,则使用网卡的硬件分片/分段能力执行分片/分段;对于不支持分片/分段功能的网卡,将数据交给驱动的前一刻以软件方式分片/分段。
70.内核,为操作系统的核心。具体的,所述内核是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。例如,linux kernel。
71.图1所示,以下提供本技术实施例的应用环境图。
72.发送端2可以通过网络和接收端4建立网络连接。
73.发送端2可以向接收端4提供内容服务。其中,内容服务可以被配置为提供诸如视频,音频,文本数据,其组合等的内容。内容可以包括内容流(如,视频流、音频流、信息流),内容文件(如,视频文件、音频文件、文本文件)和/或其他数据。
74.发送端2,可以由单个或多个计算设备组成,例如,机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。所述一个或多个计算机设备可以包括虚拟化计算实例。计算机设备可以基于定义用于仿真的特定软件(例如,操作系统,专用应用程序,服务器)的虚拟映像和/或其他数据来加载虚拟机。随着对不同类型的处理服务的需求改变,可以在所述一个或多个计算机设备上加载和/或终止不同的虚拟机。在另一些实施例中,发送端2也可以智能手机、平板电脑、个人电脑等。
75.网络,可以包括各种网络设备,例如路由器、交换机、多路复用器、集线器、调制解调器、网桥、中继器、防火墙、代理设备和/或等等。网络可以包括物理链路,例如同轴电缆链路,双绞线电缆链路,光纤链路,它们的组合和/或类似物。网络可以包括无线链路,例如蜂窝链路,卫星链路,wi-fi链路和/或类似物。
76.接收端4可以被配置为与发送端2建立udp连接。其中,接收端4可以包括任何类型的计算机设备,例如智能手机、平板电脑、智能电视、投影仪、个人电脑等。接收端4可以内置
浏览器或专门程序,通过浏览器或专门程序接收媒体流并向用户输出内容。其中,所述内容可以包括视频流、音频流、信息流、评论或其他数据。接收端4可以包括接口,该接口可以包括输入元件。例如,输入元件可以被配置为接收用户指令,所述用户指令可以使接收端4执行各类操作,如访问发送端2等。
77.需要说明的是,图1中的发送端、接收端的数量仅是示例性的,并不用于限制本技术。基于图1所示的架构,以下将通过多个实施例来描述的udp gso的数据传输方案。
78.实施例一
79.图2示意性示出了根据本技术实施例一的基于udp gso的数据传输方法的流程图。如图2所示,该基于udp gso的数据传输方法可以包括步骤s200~s206,其中:
80.步骤s200,获取多个待发送数据包。
81.步骤s202,调整所述多个待发送数据包之间的排序,其中,大小相同的待发送数据包相邻放置。
82.步骤s204,对排序后的多个待发送数据包进行组合,得到一个或多个包组合。
83.步骤s206,将所述一个或多个包组合提供给内核,以供所述内核执行udp gso和数据传输。
84.以下结合图3对本实施例进行示例性描述。
85.如图3所示,发送端2中包括用户空间(urser space)和内核空间(kernel space)。其中:
86.用户空间,主要用于运行应用程序,如即时通讯程序、p2p程序等。
87.内核空间,主要用于运行内核。其中,所述内核包括各类通信协议栈,如udp协议栈、ip协议栈等。
88.当一个应用程序产生待发送应用数据时,其需要调用sendmsg函数将该待发送应用数据传递到内核。之后,内核通过udp协议栈、ip协议栈等对该待发送应用数据进行封装等。例如,udp协议栈的操作如下:将应用数据作为payload,添加udp header,生成udp数据包。
89.所述待发送应用数据是以待发送数据包为单位,如http数据包。
90.在本实施例中,在应用程序和内核之间进一步插入一个组包过程。
91.在应用程序产生一个一个的待发送数据包之后,不会将各个待发送数据包单独提供给内核,而是以缓存的形式聚集得到多个待发送数据包,然后进行数据包的重排序和组合。具体的,将大小相同的待发送数据包放置在相邻的位置后再组合,举例而言:
92.假设应用程序产生的多个待发送数据包的大小分为a、b、c、d,原始的各个待发送数据包:abcbacdadab

(a>b>c>d,它们表示相应排序位置的待发送数据包的大小)。
93.排序后的各个待发送数据包:aaa

abbb

bcc

cddd

,即相邻的待发送数据包的大小相同。
94.基于排序后的各个待发送数据包,得到如下组合:
95.第一包组合:aaa

ab(最后一个待发送数据包的大小为b,前面的每个待发送数据包的大小均为a);
96.第二包组合:bb

bc;
97.第三包组合:cc

cd;
98.第四包组合:dd

d。
99.之后,将第一包组合、第二包组合、第三包组合、第四包组合分别作为大数据包,即得到4个大数据包,然后,调用sendmsg函数将这四个大数据包依次传递给内核。
100.在接收到上述包组合(如,第一包组合)之后,内核执行如下操作:
101.(1)在开启udp gso的情形下,所述第一包组合作为payload,依次经过udp层、ip层、数据链路层(data-link layer),从而最终得到包括第一包组合的以太网数据帧。
102.(2)对以太网数据帧执行udp gso的功能逻辑。示例性的:(2.1)如果网卡支持分片功能,则将以太网数据帧传递给网卡,由网卡执行分片操作。(2.2)如果网卡不支持分片功能,则在以太网数据帧传递到驱动前一刻,通过软件方式执行分片操作。
103.之后,得到的各个分片(udp gso segment)分别作为单独的数据包,从发送端2传输到接收端4中。
104.本技术实施例提供的基于udp gso的数据传输方法,优势如下:
105.针对相邻的待发送数据包的大小可能经常不同,而导致包组合的大小受限制的问题,本实施例提供了待发送数据包的重排序机制,使得大小相同的待发送数据包排序在一起。因此,大小相同的待发送数据包可以组合在一个包组合(大数据包)中,避免在各个待发送数据包乱序情形下生成的包组合较小的问题(由于相邻的待发送数据包的大小不同即触发组合的结束),从而降低应用程序间隔生成的待发送数据包大小不确定而导致发包系统调用(如sendmsg)被频繁调用的概率,从而可以有效地发挥内核udp gso的能力,提升udp的发包效率,降低硬件负载等效果。
106.也就是说,在被允许的范围内,尽可能地生成较大的包组合(大数据包),尽量提供较大的包组合给内核,充分发挥udp gso的性能优势,通过udp gso和socket编程等技术手段将组合后的大数据包发送出去,提高udp gso的发包性能和吞吐。
107.下面提供本技术实施例的若干个可选实施例,以进一步优化技术效果。
108.随着应用程序一个一个数据包的产生,排序的时机显得尤为重要,其涉及到发包效率和系统调度频次之间的平衡和优化。为此,下面提供几个示例性的触发排序的方案。
109.方案一:
110.作为可选的实施例,如图4所示,所述步骤s202“调整所述多个待发送数据包之间的排序”可以包括:步骤s400,通过缓存区域存储所述多个待发送数据包;步骤s402,确定所述多个待发送数据包的数据包个数达到预设数量;及步骤s404,在所述数据包个数达到所述预设数量的情况下,调整所述多个待发送数据包的排序。在本可选的实施例中,通过设置所述预设数量来取得发包效率和系统调度频次之间的平衡和优化。需要说明的是,该预设数量可以用户根据数据传输偏好设置。在另一些实施例中,也可以根据发送端2的cpu负载、udp带宽、接收端4的cpu负载,以及所述接收端4对udp乱序的容忍度来动态设置。
111.作为可选的实施例,继续参考图4,所述方法还包括:步骤s406,在所述数据包个数未达到所述预设数量的情况下,通过所述缓存区域继续存储新的待发送数据包。在本可选的实施例中,在未达到所述预设数量的情况下,暂不排序和组合,而是继续存储新的待发送数据包,使得后续组合的大数据包足够大,降低系统调度的频次。
112.方案二:
113.作为可选的实施例,如图5所示,所述步骤s202“调整所述多个待发送数据包之间
的排序”可以包括:步骤s500,通过缓存区域存储所述多个待发送数据包;步骤s502,记录每个待发送数据包的时间信息,所述时间信息为待发送数据包进入所述缓存区域的时间;步骤s504,根据所述每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;步骤s506,在所述最大时间间隔大于时间间隔阈值的情形下,调整所述多个待发送数据包的排序。需要说明的是,所述缓存区域可以是队列式的缓存,产生时间较接近的各个待发送数据包进入所述缓存区域的时间也较接近。若各待发送数据包进入缓存区域的时间差过大,而且后续排序的时候会一定程度上打乱待发送数据包的顺序,导致发包乱序。如果一个包组合中的各个待发送数据包的时间差过大过大,会显著放大发包乱序效应。为此,在本可选的实施例中,当所述缓存区域中的多个待发送数据包之间的最大时间间隔大于时间间隔阈值时,则判定触发排序和组合,防止发包严重乱序。因此,本可选的实施例提供的技术方案,在尽量维持发包效率和系统调度频次的同时,确保待发送数据包不会出现发包严重乱序的问题,确保数据传输质量。
114.在另外一些实施例中,确定所述多个待发送数据包之间的最大时间间隔的实施步骤可以为:(1)计算每两个待发送数据包的时间间隔,取最大值作为最大时间间隔;(2)计算所述缓存区域中的对头和队尾之间的时间间隔,以得到最大时间间隔。
115.在另外一些实施例中,所述各个待发送数据包的时间信息亦可以转换为数据包序号,通过数据包序号的差值来判定:是否触发调整所述多个待发送数据包的排序。
116.在另外一些实施例中,如图6所示,所述方法还包括:步骤s600,动态生成所述时间间隔阈值;其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的cpu负载、udp带宽、接收端的cpu负载,以及所述接收端对udp乱序的容忍度。在本可选的实施例中,所述时间间隔阈值可以实时情况动态生成,优化了发包效率、系统调度频次、数据传输质量的动态平衡。在示例性应用中,可以通过标准时间间隔阈值和各个参数的权重值等动态计算出所述时间间隔阈值,也可以将上述多个参数输入训练好的机器学习模型中,得到所述时间间隔阈值。
117.在另外一些实施例中,所述时间间隔阈值为一个固定值,该固定值由用户进行设置。
118.作为可选的实施例,继续参考图5,所述方法还包括:步骤s508,在所述最大时间间隔不大于时间间隔阈值的情形下,通过所述缓存区域继续存储新的待发送数据包。在本可选的实施例中,在最大时间间隔不大于时间间隔阈值的情形下,说明此时所述缓存区域中的待发送数据包在产生时间上比较接近,因此暂不排序和组合,而是继续存储新的待发送数据包,使得后续组合的大数据包足够大,降低系统调度的频次。
119.以上示例性地提供了基于“待发送数据包个数”和“待发送数据包之间的最大时间间隔”触发排序的机制。需要说明的是,还可以根据需要提供其他的触发排序的机制,如定时机制等。另外,上述触发排序的机制可以单独使用,也可以同时使用。
120.以上介绍了排序的触发机制,接下来介绍示例性排序方案。
121.作为可选的实施例,如图7所示,所述步骤s202“调整所述多个待发送数据包之间的排序”可以包括:步骤s700,根据所述多个待发送数据包中各个待发送数据包的大小,对所述多个待发送数据包进行排序;及步骤s702,根据排序结果,将所述排序后的多个待发送数据包依次写入到待发送缓存包队列中。所述排序,可以根据各个待发送数据包的(长度)
大小从大到小进行排序,也可以从小到大进行排序。所述排序算法,可以采用快速排序、归并排序等算法,也可以采用其他排序算法。在本可选的实施例中,通过高效地将大小相同的各个待发送数据包聚合到相邻的位置。
122.作为可选的实施例,如图8所示,所述步骤s204“对排序后的多个待发送数据包进行组合,得到一个或多个包组合”可以包括:步骤s800,组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,该包组合包括连续的若干个待发送数据包,该连续的若干个待发送数据包依次包括对头、与对头大小相同的后续待发送数据包,及一个与对头大小不相同的待发送数据包;步骤s802,在所述待发送缓存包队列还包括未组合的待发送数据包的情形下,对未组合的待发送数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的待发送数据包。举例来说,待发送缓存包队列从对头到队尾的待发送数据包的大小依次为:aaa

abbb

bcc

cddd

,则可以生成一个包组合“aaa

ab”,接下来待发送缓存包队列更新为“bb

bcc

cddd
…”
,然后,可以生成下一个包组合“bb

bc”,依次类推,将待发送缓存包队列中的各个包组合发送到内核中,以供内核执行udp gso的功能逻辑。在本可选的实施例中,可以通过上述组合出尽可能大的包组合,降低系统调用频次。
123.作为可选的实施例,为了充分发挥udp gso的性能优势,通过udp gso和socket编程等技术手段将组合后的大数据包发送出去,所述步骤s206可以包括:
124.根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
125.通过所述内核对所述一个或多个包组合分别执行udp gso,以得到多个分片并对所述多个分片进行传输;
126.其中,所述内核对接收到的包组合执行udp gso,包括:
127.在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
128.在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
129.在上述可选的实施例中,先得到的包组合,先发送到所述内核中,进而先分片和传输。
130.为了使得本技术实施例更加容易理解,以下结合图9提供一个示例性应用。
131.s1:应用程序产生一个待发送数据包。
132.s2:判断缓存区域当前存储的待发送数据包是否触发预设条件。
133.举例该预设条件可以包括:(1)待发送数据包的数据包个数是否达到数量阈值;(2)在该缓存区域中,最后进入该缓存区域的待发送数据包和最后键入该缓存区域的待发送数据包的时间间隔是否大于时间间隔阈值。如果触发上述任一预设条件,进入s3,否则将s1提供的待发送数据包缓存到缓存区域中。本次发包流程结束。
134.s3:对该缓存区域当前存储的待发送数据包从大到小排序,生成待发送缓存包队列。
135.s4:根据待发送缓存包队列生成包组合(大数据包)。
136.s5:调用sendmsg函数将包组合提供给内核,以使内核对该包组合执行udp gso和发送操作。
137.实施例二
138.图10示意性示出了根据本技术实施例二的基于udp gso的数据传输装置的框图,该基于udp gso的数据传输装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本技术实施例。本技术实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例各程序模块的功能。如图10所示,该基于udp gso的数据传输装置1000可以包括获取模块1010、调整模块1020、组合模块1030和提供模块1040,其中:
139.获取模块1010,用于获取多个待发送数据包;
140.调整模块1020,用于调整所述多个待发送数据包之间的排序,其中,大小相同的待发送数据包相邻放置;
141.组合模块1030,用于对排序后的多个待发送数据包进行组合,得到一个或多个包组合;及
142.提供模块1040,用于将所述一个或多个包组合提供给内核,以供所述内核执行udp gso和数据传输。
143.作为可选的实施例,所述调整模块1020还用于:
144.所述调整所述多个待发送数据包之间的排序,包括:
145.通过缓存区域存储所述多个待发送数据包;
146.确定所述多个待发送数据包的数据包个数达到预设数量;及
147.在所述数据包个数达到所述预设数量的情况下,调整所述多个待发送数据包的排序。
148.作为可选的实施例,所述调整模块1020还用于:
149.在所述数据包个数未达到所述预设数量的情况下,通过所述缓存区域继续存储新的待发送数据包。
150.作为可选的实施例,所述调整模块1020还用于:
151.通过缓存区域存储所述多个待发送数据包;
152.记录每个待发送数据包的时间信息,所述时间信息为待发送数据包进入所述缓存区域的时间;
153.根据所述每个待发送数据包的时间信息,确定所述多个待发送数据包之间的最大时间间隔;
154.在所述最大时间间隔大于时间间隔阈值的情形下,调整所述多个待发送数据包的排序。
155.作为可选的实施例,所述调整模块1020还用于:
156.动态生成所述时间间隔阈值;
157.其中,所述时间间隔阈值基于以下一个或多个参数动态生成:发送端的cpu负载、udp带宽、接收端的cpu负载,以及所述接收端对udp乱序的容忍度。
158.作为可选的实施例,所述调整模块1020还用于:
159.在所述最大时间间隔不大于时间间隔阈值的情形下,通过所述缓存区域继续存储新的待发送数据包。
160.作为可选的实施例,所述调整模块1020还用于:
161.根据所述多个待发送数据包中各个待发送数据包的大小,对所述多个待发送数据
包进行排序;及
162.根据排序结果,将所述排序后的多个待发送数据包依次写入到待发送缓存包队列中。
163.作为可选的实施例,所述组合模块1030还用于:
164.组合操作:按照从所述待发送缓存包队列的队头到队尾的方向,生成一个包组合,该包组合包括连续的若干个待发送数据包,该连续的若干个待发送数据包依次包括对头、与对头大小相同的后续待发送数据包,及一个与对头大小不相同的待发送数据包;
165.在所述待发送缓存包队列还包括未组合的待发送数据包的情形下,对未组合的待发送数据包执行组合操作以生成后续包组合,直至所述待发送缓存包队列中没有未组合的待发送数据包。
166.作为可选的实施例,所述提供模块1040还用于:
167.根据得到各个包组合的先后顺序,调用sendmsg函数将所述一个或多个包组合依次传递给所述内核;
168.通过所述内核对所述一个或多个包组合分别执行udp gso,以得到多个分片并对所述多个分片进行传输;
169.其中,所述内核对接收到的包组合执行udp gso,包括:
170.在确定网卡支持分片的情形下,通过所述网卡对接收到的包组合进行分片;
171.在确定所述网卡不支持分片的情形下,调用预设软件对接收到包组合进行分片。
172.实施例三
173.图11示意性示出了根据本技术实施例三的适于实现基于udp gso的数据传输方法的计算机设备的硬件架构示意图。计算机设备10000可以作为发送端2或其组成部分,也可以作为接收端4或其组成部分。本实施例中,计算机设备10000是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备,例如,可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等,或是智能手机、平板电脑、笔记本电脑等电子装置等。如图11所示,计算机设备10000至少包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
174.存储器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还可以用于暂时地存储已经输出或者将要输出的各类数据。
175.处理器10020在一些实施例中可以是中央处理器(central processing unit,简
称为cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
176.网络接口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等无线或有线网络。
177.需要指出的是,图11仅示出了具有部件10010-10030的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
178.在本实施例中,存储于存储器10010中的基于udp gso的数据传输方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器10020)所执行,以完成本技术。
179.实施例四
180.本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例一中的基于udp gso的数据传输方法的步骤。
181.本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,简称为smc),安全数字(secure digital,简称为sd)卡,闪存卡(flash card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例一、三中的基于udp gso的数据传输方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
182.显然,本领域的技术人员应该明白,上述的本技术实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本技术实施例不限制于任何特定的硬件和软件结合。
183.以上仅为本技术的优选实施例,并非因此限制本技术的专利范围,凡是利用本申
请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本技术的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1