一种低时延的小包发送方法及装置
未命名
07-13
阅读:161
评论:0
1.本发明涉及网络数据处理和数据通信领域,具体涉及一种低时延的小包发送方法及装置。
背景技术:
2.随着网络时代的发展,互联网信息链路中传递的数据也愈发庞大和多样,缤纷多彩的网络应用的问世,也让用户们对网络性能有了更大的需求。目前大多数网络平台在处理数据包报文长度为512字节及其以上的中、大包时,吞吐量大都能接近线速,而处理小包的时候,性能差异立即体现。但是,近年来普及的一些应用,包括实时通讯工具、线上文本阅读、短视频、网络小游戏等,都是以小包的形式在工作,因此,人们对网络平台的小包数据处理能力的关注程度越来越高。
3.目前的研究者们针对小包数据时延,一般将路由规划和流量工程结合起来,两者共同决定网络拓扑及拓扑内流量的分配,进而影响网络的拥塞情况与时延,主要解决了两类时延,分别是端到端时延和拥塞节点的排队时延。
4.虽然这些研究成果一定程度上改善了小包的传输性能,但是大都忽略了站点传输时延,也就是指站点发送或接收一个数据包所需要的处理时间。
5.宏观来看,相比于中、大包,小包的传输频率更加频繁。对于数据包的发送站点来说,若是继续采用传统网络包发送方式,传输大量小包时,根据存储架构逐级访问内存的频率会变得极为频繁。多次访问内存积累下来的时间消耗将对数据包传输性能造成巨大的负面影响,因此,如何降低站点发送小包的传输时延,是一个亟需寻求解决路径的问题。
技术实现要素:
6.本发明针对现有技术中存在的技术问题,提供一种低时延的小包发送方法及装置,结合fpga的硬件计算资源,借助3个容量为64字节的fpga寄存器,针对数据报文长度不大于512字节的小包,将数据包切割分配至各个寄存器,设计多寄存器组合处理算法,充分降低了小包发送时延并提高小包传输网络性能。
7.本发明解决上述技术问题的技术方案如下:
8.一方面,本发明提供一种低时延的小包发送方法,该方法基于多寄存器组合优化实现,所述小包发送方法包括:
9.设定多寄存器组合处理逻辑以及小包数据切分逻辑;
10.响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;
11.根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;
12.根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;
13.从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。
14.进一步的,所述小包数据为数据大小不大于512字节的数据包,所述寄存器的存储空间均为64字节。
15.进一步的,所述小包数据切分逻辑包括:
16.记接收并处理的数据包大小为n字节,先计算不足64字节数据的长度ml:ml=n%64,%表示取余运算;然后计算切片数sn:,表示向上取整。
17.进一步的,所述多寄存器组合处理逻辑,包括:
18.采用三个寄存器,记为reg0、reg1、reg2;其中reg0只存放起始数据或中间数据,不存放末片数据,每片数据写满64字节;reg1在末片数据刚好为64字节的情况下,只存放末片数据;reg2在末片数据小于64字节的情况下,只存放末片数据,且reg2的第一个字节用来记录该寄存器中写入的末片数据长度,保证读取有效信息。
19.进一步的,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间,包括:
20.根据ml值进行末片类型划分,若ml为0,则说明数据包长度为64字节整数倍,将末片划分为满片;若ml不为0,则说明数据最后一片不足64字节,将末片划分为非满片;
21.若末片为满片则将末片数据写入reg1,若末片为非满片,则将ml值写入reg2存储空间的第1个字节,然后将末片数据从reg2的第2个字节开始逐节写入。
22.进一步的,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出,包括:
23.s601,检查reg0寄存器的缓存空间和存储空间,将缓存空间里的切片按照顺序组装,然后在尾部拼装reg0存储空间中的切片;
24.s602,对寄存器reg1、reg2的存储空间进行实时监控;
25.s603,若检测到reg1被填入了数据包切片,则在步骤s601获取的拼装结果的尾部,拼装reg1存储空间的数据切片,组装完毕后快速发出。
26.s604,若检测到reg2被填入了数据包切片,则根据reg2存储空间的第一个字节数据,获取末片长度信息,从第2个字节开始,截取指定长度的数据,并拼装到步骤s601获取的拼装结果的尾部,组装完毕后快速发出。
27.另一方面,本发明提供一种低时延的小包发送装置,该装置基于fpga实现,包括:
28.逻辑设定模块,设定多寄存器组合处理逻辑以及小包数据切分逻辑;
29.数据包切分模块,响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;
30.第一写入模块,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;
31.第二写入模块,根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;
32.数据组装模块,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。
33.进一步的,所述小包数据为数据大小不大于512字节的数据包,所述寄存器的存储空间均为64字节。
34.进一步的,所述小包数据切分逻辑包括:
35.记接收并处理的数据包大小为n字节,先计算不足64字节数据的长度ml:ml=n%64,%表示取余运算;然后计算切片数sn:,表示向上取整。
36.进一步的,所述多寄存器组合处理逻辑,包括:
37.该装置采用三个寄存器,记为reg0、reg1、reg2;其中reg0只存放起始数据或中间数据,不存放末片数据,每片数据写满64字节;reg1在末片数据刚好为64字节的情况下,只存放末片数据;reg2在末片数据小于64字节的情况下,只存放末片数据,且reg2的第一个字节用来记录该寄存器中写入的末片数据长度,保证读取有效信息。
38.本发明的有益效果是:本发明利用3个64字节的fpga寄存器进行组合优化,结合寄存器快速读写的特性,给出了一种低时延的小包组合发送方法。在本发明中,64字节及以下的小包只需一次寄存器读写即可完成发送。大于64字节小于512字节的数据包需要进行分片,每个寄存器各司其职完成不同类别的数据片写入,驱动程序读取寄存器数据进行组装发送。一次寄存器读写的时间远远小于内存寻址,在存在大量小包的高速网络环境中,本发明采用一次或若干次寄存器读写便可以成功完成数据包的发送,避免了内存寻址和数据拷贝,极大的降低了发包时延。
附图说明
39.图1为本发明实施例提供的小包发送方法原理图;
40.图2为本发明实施例提供的小包发送方法流程示意图;
41.图3为本发明实施例提供的寄存器任务分配示意图;
42.图4为本发明实施例提供的多寄存器组合优化的发包示例;
43.图5为本发明实施例提供的一种低时延的小包发送装置结构示意图。
具体实施方式
44.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
45.在本技术的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本技术的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
46.在本技术的描述中,术语“例如”一词用来表示“用作例子、例证或说明”。本技术中被描述为“例如”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本发明,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节
的情况下也可以实现本发明。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本发明的描述变得晦涩。因此,本发明并非旨在限于所示的实施例,而是与符合本技术所公开的原理和特征的最广范围相一致。
47.本发明实施例提供一种低时延的基于fpga多寄存器组合优化的小包发送方法,原理图如图1所示,所述的小包快速发送方法包括:
48.步骤1,当应用程序有发包请求时,驱动程序接收并处理数据包。根据小包数据切分逻辑,计算出切片数和末尾余量。
49.步骤2,设定fpga多寄存器组合处理逻辑,为各个寄存器设定独立的工作任务,分别应对各种数据包切分结果,在组合处理逻辑的统筹下,实现所有情况的流畅处理。
50.步骤3,驱动程序执行末片判断,逐片分析,非末片存入指定寄存器的缓存空间,末片则跳转步骤4。
51.步骤4,驱动程序根据末片数据长度,进行类型划分,划分为满片和非满片,按照步骤2设定的处理逻辑,根据不同情况,转入不同的寄存器处理。fpga从寄存器以及各自的缓存空间中取出数据包的分片组装后,快速发送出去。
52.结合fpga的硬件计算资源,借助3个容量为64字节的fpga寄存器,针对数据报文长度不大于512字节的小包,将数据包切割分配至各个寄存器,设计多寄存器组合处理算法,能够有效解决现有技术方案中忽略的站点发送小包的传输时延问题,充分降低小包发送时延并提高小包传输网络性能。
53.本实施例中,在fpga多寄存器组合处理逻辑中,选用的寄存器数量为3,寄存器存储空间的大小为64字节,将三个寄存器分别记为reg0,reg1,reg2,每个寄存器传输的64字节数据记为一片。ml为切片后剩余不足64字节的数据部分,sn为片数,同时也为写寄存器的总次数,i为循环变量,如图2所示。
54.具体的,所述的小包快速发送方法包括:
55.步骤100,当应用程序有发包请求时,驱动程序接收并处理n字节数据包。计算出切片数sn和不足64字节数据的长度ml:
56.ml=n%64(1.1)
57.(1.2)
58.其中,%表示取余运算,表示向上取整。
59.步骤200,reg0不能存放最后一片数据,只能存放起始数据或中间数据,每片数据需写满64字节。reg1只能存放最后一片数据,且最后一片数据刚好为64字节才使用该寄存器,数据长度刚好为64字节的数据包仅需使用reg1进行发送。reg2也只能存放最后一片数据,它的第一个字节用来记录该寄存器中写入的剩余数据长度,保证读取有效信息,因此可以写入剩余数据长度小于等于63字节的部分,总长度小于等于63字节的数据包也可以只使用reg2完成发送。
60.步骤300,驱动程序判断当前写寄存器次数是否等于切片数量减一,即将要传输的数据分片是否为最后一片,分两种情况:
61.①
数据分片非最后一片,无论是起始片还是中间片都要将64字节片数据写入reg0
中,并将循环变量加一,返回步骤300,直到判断条件不成立。
62.②
数据分片为最后一片,需要进一步判断剩余数据长度。跳转到步骤400。
63.步骤400,reg1和reg2寄存器都处理最后一片数据,但它们分属不同类别。驱动程序需根据最后一片中剩余数据长度判断写入哪一个寄存器。
64.①
如果ml为0,说明数据包长度为64字节整数倍,最后一片数据写入reg1。
65.②
如果ml不为0,说明数据最后一片不足64字节,此时需在第一个字节中填入剩余部分的数据长度,再将数据依次写入reg2中。
66.将寄存器或缓存中的数据片读取出来,组装成完整的数据包,完成发送。
67.步骤100具体步骤如下:
68.1a)设置切片数sn,切片后最后一片不足64字节的长度ml,初始化循环变量i。
69.1b)驱动程序接收从应用程序传来的发包请求,获取数据包的长度信息,利用公式(1.1)和(1.2)计算得出sn和ml,对数据包进行切片,准备进行写寄存器工作。
70.步骤200具体步骤如下:
71.2a)设置3个64字节寄存器。其中reg0和reg1寄存器都必须写满64字节数据,但reg0不能存放最后一片数据,而reg1只能存放最后一片大小为64字节的数据片。reg2也只能存放最后一片数据片,但考虑到剩余数据片长度很可能不足64字节,因此在该寄存器中我们采用1字节的长度字段来记录最后一片数据片的数据长度,便于组包时能够精准读取数据部分,该字段位于寄存器的首部。寄存器任务分配如图3所示,它们协同合作,避免了数据分片的混乱。
72.步骤300具体步骤如下:
73.3a)判断循环变量i与(sn-1)的大小,确认数据片是否为最后一片。如果不是最后一片,则将数据片依次写入reg0中,每次写入后将循环变量加一。如果数据片为最后一片,则还需判断ml是否为零,跳转到步骤400。
74.3b) fpga在reg0写入数据以后,立即读取reg0中的数据,按序进行组包工作,如遇网络拥挤的状况,也可以将数据片暂存于寄存器缓冲中。寄存器读取完成后返回步骤300。
75.步骤400具体步骤如下:
76.4a)数据片为最后一片,判断ml是否为零。如果为零,代表最后一片刚好为64字节,需将数据写入reg1中,如果不为零,说明最后一片长度小于等于63字节,将ml填入reg2的长度字段中,并将剩余长度的数据依次填入reg2中。
77.4b)fpga读取reg1或者reg2中最后一片数据,与之前读取reg0中的数据片进行组装,获得完整的数据包,并进行发送。
78.步骤300和步骤400中所描述的数据包切片,写入,读取,组装发送如图4所示,寄存器缓存cache可以暂存接收到的数据分片。图4中一共展示了四种大小数据包示例,具体如下:
79.①
号数据包总长度为192字节,分为三片,每片大小都为64字节,因此前两片都写入reg0,最后一片写入reg1,组包时按序进行组装。
80.②
号数据包总长度为96字节,分为两片,最后一片大小为32字节,不足64字节,因此第一片写入reg0中,最后一片写入reg2中,并将长度信息写入reg2首部的长度字段中。发送时fpga将按长度信息读取reg中的数据,并与reg1进行拼接,获得完整的数据包。
81.③
号数据包总长度刚好等于64字节,只有一片,同时也为最后一片,因此单64字节的数据包需写入reg1中。fpga直接从reg1中读取64字节数据并发送数据包。
82.④
号数据包总长度小于64字节,如50字节,无需分片,将数据和长度信息写入reg2中。fpga根据长度字段直接从reg2中读取数据并发送数据包。
83.本发明针对被忽略的站点小包传输时延,放弃了传统网络包发送方式,避免了频繁的内存寻址和数据拷贝,直接将小包根据实际情况分片,通过3个64字节的寄存器,与cpu直接连通,快速发送。
84.本发明引入可编程硬件设备fpga,基于其硬件计算资源的优势,借助其具有的多个大容量寄存器,实现多寄存器组合优化的小包发送流程,不仅可以加快数据包分片的速度,还确保了整体流程的安全性。
85.本发明设计了一种小包数据分片逻辑和fpga多寄存器组合处理逻辑,3个寄存器各司其职分工明确,在确保数据完整性的前提下,实现极高的数据传输效率,假设数据报文长度为n字节,在n为64整数倍的理想情况下,数据有效率为100%,在非理想情况下,只有附加的长度为1字节的len信息为无效信息,数据有效率为n/n+1。
86.在上述实施例的基础上,本发明实施例还提供一种低时延的小包发送装置,该装置基于fpga实现,如图5所示,包括:
87.逻辑设定模块,设定多寄存器组合处理逻辑以及小包数据切分逻辑;
88.数据包切分模块,响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;
89.第一写入模块,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;
90.第二写入模块,根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;
91.数据组装模块,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。
92.尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
93.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
技术特征:
1.一种低时延的小包发送方法,该方法基于多寄存器组合优化实现,其特征在于,所述小包发送方法包括:设定多寄存器组合处理逻辑以及小包数据切分逻辑;响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。2.根据权利要求1所述的方法,其特征在于,所述小包数据为数据大小不大于512字节的数据包,所述寄存器的存储空间均为64字节。3.根据权利要求2所述的方法,其特征在于,所述小包数据切分逻辑包括:记接收并处理的数据包大小为n字节,先计算不足64字节数据的长度ml:ml=n%64,%表示取余运算;然后计算切片数sn:,表示向上取整。4.根据权利要求3所述的方法,其特征在于,所述多寄存器组合处理逻辑,包括:采用三个寄存器,记为reg0、reg1、reg2;其中reg0只存放起始数据或中间数据,不存放末片数据,每片数据写满64字节;reg1在末片数据刚好为64字节的情况下,只存放末片数据;reg2在末片数据小于64字节的情况下,只存放末片数据,且reg2的第一个字节用来记录该寄存器中写入的末片数据长度,保证读取有效信息。5.根据权利要求4所述的方法,其特征在于,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间,包括:根据ml值进行末片类型划分,若ml为0,则说明数据包长度为64字节整数倍,将末片划分为满片;若ml不为0,则说明数据最后一片不足64字节,将末片划分为非满片;若末片为满片则将末片数据写入reg1,若末片为非满片,则将ml值写入reg2存储空间的第1个字节,然后将末片数据从reg2的第2个字节开始逐节写入。6.根据权利要求5所述的方法,其特征在于,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出,包括:s601,检查reg0寄存器的缓存空间和存储空间,将缓存空间里的切片按照顺序组装,然后在尾部拼装reg0存储空间中的切片;s602,对寄存器reg1、reg2的存储空间进行实时监控;s603,若检测到reg1被填入了数据包切片,则在步骤s601获取的拼装结果的尾部,拼装reg1存储空间的数据切片,组装完毕后快速发出;s604,若检测到reg2被填入了数据包切片,则根据reg2存储空间的第一个字节数据,获取末片长度信息,从第2个字节开始,截取指定长度的数据,并拼装到步骤s601获取的拼装结果的尾部,组装完毕后快速发出。7.一种低时延的小包发送装置,其特征在于,该装置基于fpga实现,包括:
逻辑设定模块,设定多寄存器组合处理逻辑以及小包数据切分逻辑;数据包切分模块,响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;第一写入模块,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;第二写入模块,根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;数据组装模块,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。8.根据权利要求7所述的装置,其特征在于,所述小包数据为数据大小不大于512字节的数据包,所述寄存器的存储空间均为64字节。9.根据权利要求8所述的装置,其特征在于,所述小包数据切分逻辑包括:记接收并处理的数据包大小为n字节,先计算不足64字节数据的长度ml:ml=n%64,%表示取余运算;然后计算切片数sn:,表示向上取整。10.根据权利要求9所述的装置,其特征在于,所述多寄存器组合处理逻辑,包括:该装置采用三个寄存器,记为reg0、reg1、reg2;其中reg0只存放起始数据或中间数据,不存放末片数据,每片数据写满64字节;reg1在末片数据刚好为64字节的情况下,只存放末片数据;reg2在末片数据小于64字节的情况下,只存放末片数据,且reg2的第一个字节用来记录该寄存器中写入的末片数据长度,保证读取有效信息。
技术总结
本发明涉及一种低时延的小包发送装置,基于FPGA多寄存器组合优化实现,首先,设定多寄存器组合处理逻辑以及小包数据切分逻辑;其次,响应应用程序发包请求,接收并处理数据包,按照所述小包数据切分逻辑,计算数据包切片数和末片余量;第三,根据多寄存器组合处理逻辑,执行末片余量判断并将非末片切片数据存入指定的寄存器的缓存空间;然后,根据末片余量数据长度将所述末片余量划分为满片或非满片两种类型,并根据多寄存器组合处理逻辑,将所述末片余量根据划分的类型存入不同的寄存器处理;最后,从寄存器以及寄存器的缓存空间中取出数据包的分片进行组装后发出。本发明降低小包发送时延并提高小包传输网络性能。包发送时延并提高小包传输网络性能。包发送时延并提高小包传输网络性能。
技术研发人员:刘锋 李梦君 薛楠楠 彭凯 李志康 李书胜 沈永超 梅松
受保护的技术使用者:华中科技大学
技术研发日:2023.06.09
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:管道预热装置的制作方法 下一篇:一种用于调制超导量子比特跃迁频率的系统及方法与流程
