一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

报文转发方法、装置和设备及计算机存储介质与流程

2022-02-22 09:24:42 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及交换机技术领域,提供一种报文转发方法、装置和设备及计算机存储介质。


背景技术:

2.目前,交换机或者路由器等网络设备通常都具有多个输出端口,在实际应用时,需要均衡各个输出端口的流量,使得各个输出端口的资源的利用率更高。
3.目前的流量均衡主要包括两种方式,一种方式是通过循环冗余校验(cyclic redundancy check,crc)算法分配负载均衡路径,但这种方式在有巨型流报文、混合流量模型(internet mix,imix)报文的场景中表现不佳;另一种方式是采用逐包轮询调度(packet round robin,prr)算法,这种方式是以数据包为单位给各个输出端口分配数量较为均衡的数据包,可以保证等长报文的流量均衡,但是在实际场景中,例如在有imix报文的场景中,大部分报文的长度都不是相同的,因而prr算法的适用场景很局限。
4.因此,如何更好地实现网络设备中的各个输出端口的流量均衡仍然是亟待解决的问题。


技术实现要素:

5.本技术实施例提供一种报文转发方法、装置和设备及计算机存储介质,用于提升为网络设备各个输出端口分配的流量的均衡性。
6.一方面,提供一种报文转发方法,应用于网络设备包括的寄存器队列的任一寄存器中,所述网络设备还包括调度控制器、与所述寄存器队列连接的各个输出端口,所述寄存器队列采用树状结构,所述方法包括:
7.若接收到所述调度控制器输入的待调度报文长度,则获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,所述待调度报文长度是所述调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器后输入的;
8.根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口;
9.将所述目标子节点寄存器或者目标输出端口的目标地址索引发送给所述调度控制器,使得所述调度控制器基于所述目标地址索引更新所述当前地址索引,并向所述目标地址索引指示的子节点寄存器输入所述待调度报文长度或者通过所述目标地址索引指示的输出端口转发所述待调度报文。
10.可选的,获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,包括:
11.确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,还是所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文
长度的差值;
12.若确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,则从本地读取下连的各个子节点寄存器或者各个输出端口的已调度报文长度;
13.若确定本地存储的是所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,则从本地读取所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,将所述报文长度上限值与各个差值相减后得到下连的各个子节点寄存器或者各个输出端口的已调度报文长度。
14.可选的,根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,包括:
15.针对下连的各个子节点寄存器或者各个输出端口的已调度报文长度,分别执行:
16.获取当前已调度报文长度;
17.确定所述当前已调度报文长度与所述待调度报文长度的总和是否大于所述报文长度上限值;
18.若确定所述总和大于所述报文长度上限值,则确定所述当前已调度报文长度是否是最后一个;若确定所述当前已调度报文长度不是最后一个,则获取所述当前已调度报文长度之后的已调度报文长度后,执行所述确定所述当前已调度报文长度与所述待调度报文长度的总和是否大于所述报文长度上限值的步骤;
19.若确定所述总和不大于所述报文长度上限值,则将所述当前已调度报文长度对应的子节点寄存器或者输出端口选定为目标子节点寄存器或者目标输出端口。
20.可选的,所述方法还包括:
21.若确定所述当前已调度报文长度是最后一个,则从下连的各个子节点寄存器中随机选定目标子节点寄存器,或者从下连的各个输出端口中随机选定目标输出端口。
22.可选的,在根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口之后,所述方法还包括:
23.根据所述待调度报文长度更新所述目标子节点寄存器或者目标输出端口的已调度报文长度。
24.可选的,根据所述待调度报文长度更新所述目标子节点寄存器或者目标输出端口的已调度报文长度,包括:
25.确定本地存储的是所述目标子节点寄存器或者所述目标输出端口的已调度报文长度,还是所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值;
26.若确定本地存储的是所述目标子节点寄存器或者所述目标输出端口的已调度报文长度,则将所述目标子节点寄存器或者所述目标输出端口的已调度报文长度增加所述待调度报文长度;
27.若确定本地存储的是所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值,则将所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值减少所述待调度报文长度。
28.一方面,提供一种报文转发方法,应用于网络设备包括的调度控制器中,所述网络设备还包括寄存器队列、与所述寄存器队列连接的各个输出端口,所述寄存器队列采用树状结构,所述方法包括:
29.获取待调度报文的待调度报文长度;
30.基于所述待调度报文的当前地址索引确定当前调度的寄存器,并将所述待调度报文长度输入所述当前调度的寄存器,使得所述当前调度的寄存器获取所述当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将所述目标子节点寄存器或者目标输出端口的目标地址索引发送给所述调度控制器;
31.接收所述目标子节点寄存器或者所述目标输出端口的目标地址索引后,基于所述目标地址索引更新所述当前地址索引;
32.向所述目标地址索引指示的子节点寄存器输入所述待调度报文长度,或者通过所述目标地址索引指示的输出端口转发所述待调度报文。
33.一方面,提供一种报文转发装置,应用于网络设备包括的寄存器队列的任一寄存器中,所述网络设备还包括调度控制器、与所述寄存器队列连接的各个输出端口,所述寄存器队列采用树状结构,所述装置包括:
34.获取单元,用于若接收到所述调度控制器输入的待调度报文长度,则获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,所述待调度报文长度是所述调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器后输入的;
35.调度单元,用于根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口;
36.执行单元,用于将所述目标子节点寄存器或者目标输出端口的目标地址索引发送给所述调度控制器,使得所述调度控制器基于所述目标地址索引更新所述当前地址索引,并向所述目标地址索引指示的子节点寄存器输入所述待调度报文长度或者通过所述目标地址索引指示的输出端口转发所述待调度报文。
37.可选的,所述获取单元,具体用于:
38.确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,还是所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值;
39.若确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,则从本地读取下连的各个子节点寄存器或者各个输出端口的已调度报文长度;
40.若确定本地存储的是所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,则从本地读取所述报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,将所述报文长度上限值与各个差值相减后得到下连的各个子节点寄存器或者各个输出端口的已调度报文长度。
41.可选的,所述调度单元,具体用于:
42.针对下连的各个子节点寄存器或者各个输出端口的已调度报文长度,分别执行:
43.获取当前已调度报文长度;
44.确定所述当前已调度报文长度与所述待调度报文长度的总和是否大于所述报文长度上限值;
45.若确定所述总和大于所述报文长度上限值,则确定所述当前已调度报文长度是否是最后一个;若确定所述当前已调度报文长度不是最后一个,则获取所述当前已调度报文长度之后的已调度报文长度后,执行所述确定所述当前已调度报文长度与所述待调度报文长度的总和是否大于所述报文长度上限值的步骤;
46.若确定所述总和不大于所述报文长度上限值,则将所述当前已调度报文长度对应的子节点寄存器或者输出端口选定为目标子节点寄存器或者目标输出端口。
47.可选的,所述调度单元,具体用于:
48.若确定所述当前已调度报文长度是最后一个,则从下连的各个子节点寄存器中随机选定目标子节点寄存器,或者从下连的各个输出端口中随机选定目标输出端口。
49.可选的,所述装置还包括更新单元,用于:
50.根据所述待调度报文长度更新所述目标子节点寄存器或者目标输出端口的已调度报文长度。
51.可选的,所述更新单元,具体用于:
52.确定本地存储的是所述目标子节点寄存器或者所述目标输出端口的已调度报文长度,还是所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值;
53.若确定本地存储的是所述目标子节点寄存器或者所述目标输出端口的已调度报文长度,则将所述目标子节点寄存器或者所述目标输出端口的已调度报文长度增加所述待调度报文长度;
54.若确定本地存储的是所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值,则将所述报文长度上限值与所述目标子节点寄存器或者所述目标输出端口的已调度报文长度的差值减少所述待调度报文长度。
55.一方面,提供一种报文转发装置,应用于网络设备包括的调度控制器中,所述网络设备还包括寄存器队列、与所述寄存器队列连接的各个输出端口,所述寄存器队列采用树状结构,所述装置包括:
56.获取单元,用于获取待调度报文的待调度报文长度;
57.调度单元,用于基于所述待调度报文的当前地址索引确定当前调度的寄存器,并将所述待调度报文长度输入所述当前调度的寄存器,使得所述当前调度的寄存器获取所述当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,根据获取的各个已调度报文长度、所述待调度报文长度和所述当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将所述目标子节点寄存器或者目标输出端口的目标地址索引发送给所述调度控制器;
58.更新单元,用于接收所述目标子节点寄存器或者所述目标输出端口的目标地址索引后,基于所述目标地址索引更新所述当前地址索引;
59.执行单元,用于向所述目标地址索引指示的子节点寄存器输入所述待调度报文长度,或者通过所述目标地址索引指示的输出端口转发所述待调度报文。
60.一方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一种方法的步骤。
61.一方面,提供一种计算机存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述任一种方法的步骤。
62.一方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一种方法的步骤。
63.本技术实施例中,网络设备包括调度控制器、树状结构的寄存器队列、以及与寄存器队列连接的各个输出端口,针对待调度报文,调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器,并将待调度报文的待调度报文长度输入当前调度的寄存器,当前调度的寄存器基于下连的各个子节点寄存器或者各个输出端口的已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器,使得调度控制器基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度或者通过目标地址索引指示的输出端口转发待调度报文。可见,本技术实施例通过按照报文长度的方式进行报文调度,通过树状结构的寄存器队列进行多次调度后,将报文均匀分发至网络设备的各个输出端口,从而使得各个输出端口通过的报文总长度的误差能够控制较小范围内,提升为各个端口分配的流量的均衡性,能够有效改善数据流在等价路径上转发的均衡效果,从而提高网络转发性能。
附图说明
64.为了更清楚地说明本技术实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
65.图1为本技术实施例提供的bfn可编程芯片的寄存器结构示意图;
66.图2为本技术实施例提供的应用场景示意图;
67.图3为本技术实施例提供的网络设备的一种结构示意图;
68.图4为本技术实施例提供的报文转发方法的一种流程示意图;
69.图5为本技术实施例提供的报文转发方法的另一种流程示意图;
70.图6为本技术实施例提供的报文转发方法的再一种流程示意图;
71.图7为本技术实施例提供的寄存器调度过程的流程示意图;
72.图8为本技术实施例提供的报文转发方法的又一种流程示意图;
73.图9为本技术实施例提供的初始化后的3级寄存器队列的示意图;
74.图10为本技术实施例提供的第i级队列进行调度的流程示意图;
75.图11为本技术实施例提供的一种报文转发装置的结构示意图;
76.图12为本技术实施例提供的另一种报文转发装置的结构示意图;
77.图13为本技术实施例提供的计算机设备的一种结构示意图。
具体实施方式
78.为使本技术的目的、技术方案和优点更加清楚明白,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
79.为便于理解本技术实施例提供的技术方案,这里先对本技术实施例使用的一些关键名词进行解释:
80.网络设备:泛指能够实现报文转发的设备,例如交换机或者路由器等设备。
81.输出端口:可以是指网络设备的物理端口,也可以是指虚拟端口。
82.差分轮询(deficit round robin,drr)调度算法:传统drr调度算法实现原理与prr调度算法类似,但drr调度算法与prr调度算法的区别在于prr调度算法是按照报文个数进行调度,而drr是按照报文长度进行调度。drr为每个队列设置一个计数器deficit,deficit初始化为一次调度允许的最大字节数,一般为一个最大传输单元(maximum transmission unit,mtu),也就是单个报文最大长度。每次轮询到一个队列时,该队列输出一个报文且计数器deficit减去报文长度,如果报文长度超过了队列的调度能力,drr调度允许deficit出现负值,以保证长报文也能够得到调度。但下次轮循调度时该队列将不会被调度,当计数器为0或负数时停止调度该队列,但继续调度其他计数器为正数的队列,当所有队列的deficit都为0或负数时,将所有队列的deficit计数器加上初始值,开始新一轮调度。
83.可编程网络交换芯片:是一种可以基于独立于编程协议的数据包处理器(programming protocol-independent packet processors,p4)语言进行编程开发的芯片,如bfn(barefoot networks)可编程芯片,bfn可编程芯片提供了大量的芯片寄存器。参见图1所示,为bfn芯片寄存器的结构示意图,其中,每个芯片寄存器由高位(high,hi)分片(slice)和低位(low,lo)slice两个分片组成,hi slice和lo slice分别支持一个比较单元(chip multiprocessors,cmp)和两个运算单元(arithmetic and logic unit,alu),即图1所示的alu1和alu2。一个芯片寄存器还支持一个输出(output)单元(即图1所示的output(metadata)alu)和两个存储单元(即图1所示的register write mux hi和register write mux lo),hi slice和lo slice各有一个存储单元,register write mux hi对应于hi slice,register write mux lo对应于lo slice。
84.bfn可编程芯片的alu单元支持简单的算术运算,如加、减、移位,以及支持简单的逻辑运算,如与、或和非,但不支持乘、除、方差以及排序运算。
85.下面对本技术实施例的设计思想进行简要介绍。
86.目前的流量均衡方式均无法解决实际场景中报文长度不一情况下的均衡问题,例如在有imix报文的场景中,因此,考虑到按包分发的方案始终无法兼顾到各个报文长度不一的情况,因而可以将按包转换为按字节长度的方式,即按照字节均衡(bytes-fair)的方式进行流量均衡,同时还可基于硬件层面,进一步提升网络转发性能,例如可以考虑采用bfn可编程芯片,但是由于bfn可编程芯片在实际使用中无法回写寄存器,并且只能基于索引访问寄存器变量,不能按照索引范围访问多个寄存器变量,所以类似于drr算法类的按字节长度的方式无法采用bfn可编程芯片的p4语言来实现。
87.基于此,本技术实施例提供了一种报文转发方法,在该方法中,网络设备包括调度控制器、树状结构的寄存器队列、以及与寄存器队列连接的各个输出端口,针对待调度报文,调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器,并将待调度报文的待调度报文长度输入当前调度的寄存器,当前调度的寄存器基于下连的各个子节点寄存器或者各个输出端口的已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器,使得调度控制器基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度或者通过目标地址索引指示的输出端口转发待调度报文。可见,本技术实施例通过按照报文长度的方式进行报文调度,通过树状结构的寄存器队列进行多次调度后,将报文均匀分发至网络设备的各个输出端口,从而使得各个输出端口通过的报文总长度的误差能够控制较小范围内,提升为各个端口分配的流量的均衡性,能够有效改善数据流在等价路径上转发的均衡效果,从而提高网络转发性能。
88.在一种可能的实施方式中,上述的报文转发方法为基于芯片层面上的调度方法,例如可以基于bfn可编程芯片的媒体连接单元(medium attachment unit,mau)芯片架构来实现,进而可以按照bytes-fair的方式进行均衡,通过树状结构的多级寄存器队列进行报文调度,将各个报文均匀分发至各个输出端口,确保在满足bfn可编程芯片的硬件限制的前提下,将各个端口通过的报文总长度的误差值控制在2个mtu以内。
89.在介绍完本技术实施例的设计思想之后,下面对本技术实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本技术实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本技术实施例提供的技术方案。
90.本技术实施例提供的方案可以适用于大多数报文转发场景中,如图2所示,为本技术实施例提供的一种应用场景图,在该场景中,包括报文发送设备101、网络设备102和报文接收设备103。
91.报文发送设备101和报文接收设备103例如可以为手机、平板电脑(pad)、笔记本电脑、台式电脑、智能电视以及智能可穿戴设备等。此外,报文接收设备103还可以为报文发送设备101上安装的应用的后台服务器。
92.在用户通过报文发送设备101进行网络访问时,则会产生相应的报文,报文通过报文发送设备101被发送给网络设备102,网络设备可以通过本技术实施例的方法确定相应的输出端口,进而采用该输出端口将报文转发出去,最终到达报文接收设备103。
93.在一种可能的实施方式中,网络设备102例如可以是交换机、路由器或者网关设备
等。例如,网络设备102可以包括前述的bfn可编程芯片,进而通过bfn可编程芯片实现各个输出端口的负载均衡过程。
94.报文发送设备101、网络设备102和报文接收设备103之间可以通过一个或者多个网络进行直接或间接的通信连接。该网络可以是有线网络,也可以是无线网络,例如无线网络可以是移动蜂窝网络,或者可以是无线保真(wireless-fidelity,wifi)网络,当然还可以是其他可能的网络,本技术实施例对此不做限制。
95.当然,本技术实施例提供的方法并不限用于图2所示的应用场景中,还可以用于其他可能的应用场景,本技术实施例并不进行限制。对于图2所示的应用场景的各个设备所能实现的功能将在后续的方法实施例中一并进行描述,在此先不过多赘述。
96.本技术实施例提供的报文转发方法可以通过图2中的网络设备102来执行,因此在介绍本技术实施例的方法之前,先对网络设备的结构进行介绍。参见图3所示,为网络设备的一种结构示意图,该网络设备可以包括调度控制器、寄存器队列以及与寄存器队列连接的各个输出端口。
97.其中,寄存器队列为树状结构,即寄存器队列存在多级,每一个寄存器存在至少一个下连的寄存器或者输出端口。
98.具体的,寄存器队列采用树状结构,每个寄存器下连至少一个子节点寄存器或者输出端口。
99.在一种实施方式中,参见图3的网络设备的结构示意,其中示出了网络设备包括的寄存器队列的一种可能的结构,其中,该寄存器队列采用满二叉树结构,图3中以网络设备包括16个输出端口为例,即图3所示的端口0~15,那么相应的,寄存器队列则为4级,参见图3所示,第1级队列可通过1个寄存器来实现,第2级队列可通过2个寄存器来实现,第3级队列可通过4个寄存器来实现,第4级队列可通过8个寄存器来实现,每一个寄存器下连2个寄存器或者输出端口,例如1级队列包含的寄存器下连了2级队列的两个寄存器,即图3所示的2级队列~0和2级队列~1这两个寄存器,4级队列为末级队列,则下连输出端口,如图3所示的2级队列~0这个寄存器下连端口0和端口1。
100.请参见图4,为本技术实施例提供的报文转发方法的一种流程示意图,该方法可以由寄存器来执行,其包括如下步骤:
101.步骤401:若接收到调度控制器输入的待调度报文长度,则获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,待调度报文长度是调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器后输入的。
102.步骤402:根据获取的各个已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口。
103.步骤403:将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器,使得调度控制器基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度或者通过目标地址索引指示的输出端口转发待调度报文。
104.通过上述流程,每个寄存器可以将待调度报文均匀的分发至下连的子节点寄存器或者输出端口,最终使得各个输出端口通过的报文总长度的误差能够控制较小范围内,提升为各个端口分配的流量的均衡性,能够有效改善数据流在等价路径上转发的均衡效果,
从而提高网络转发性能。
105.请参见图5,为本技术实施例提供的报文转发方法的另一种流程示意图,该方法可以由调度控制器来执行,其包括如下步骤:
106.步骤501:获取待调度报文的待调度报文长度。
107.步骤502:基于待调度报文的当前地址索引确定当前调度的寄存器,并将待调度报文长度输入当前调度的寄存器,使得当前调度的寄存器获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,根据获取的各个已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器。
108.步骤503:接收目标子节点寄存器或者目标输出端口的目标地址索引后,基于目标地址索引更新当前地址索引。
109.步骤504:向目标地址索引指示的子节点寄存器输入待调度报文长度,或者通过目标地址索引指示的输出端口转发待调度报文。
110.通过上述流程,调度控制器能够控制寄存器队列将待调度报文均匀的分发至各个输出端口,使得各个输出端口通过的报文总长度的误差能够控制较小范围内,提升为各个端口分配的流量的均衡性,能够有效改善数据流在等价路径上转发的均衡效果,从而提高网络转发性能。
111.下面结合寄存器和调度控制器所执行的过程进行介绍。参见图6所示,为本技术实施例提供的报文转发方法的再一种流程示意图。
112.步骤601:调度控制器获取待调度报文的待调度报文长度,并基于待调度报文的当前地址索引确定当前调度的寄存器。
113.本技术实施例中,当网络设备接收到待调度报文并将其转发出去时,则网络设备需要确定从自身包括的哪个输出端口将其转发出去,即进行待调度报文的流量分配。其中,网络设备可以通过自身包括的调度控制器控制寄存器队列完成流量分配的过程。
114.其中,待调度报文的地址索引的初始值为寄存器队列的根节点寄存器的索引地址,随着各级寄存器的调度过程,来更新待调度报文的地址索引,直至地址索引指向输出端口为止。
115.步骤602:调度控制器将待调度报文长度输入当前调度的寄存器,该寄存器接收到调度控制器输入的待调度报文长度。
116.具体的,若当前地址索引为初始地址索引,即调度控制器将待调度报文长度输入至寄存器队列的根节点寄存器,根节点寄存器进行调度后,当前地址索引更新为根节点寄存器下连的子节点寄存器,则调度控制器继续将待调度报文长度输入至该子节点寄存器,依次循环,直至当前地址索引指向输出端口为止。
117.步骤603:当前调度的寄存器获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度。
118.本技术实施例中,每个寄存器进行调度的过程是类似的,因而这里以其中一个寄存器的调度为例进行介绍,即上述的当前调度寄存器。
119.具体的,当寄存器接收到待调度报文长度时,则会获取下连的各个子节点寄存器
或者各个输出端口的已调度报文长度,以便于确认能够通过哪个子节点寄存器或者输出端口处理该待调度报文。
120.在具体实施时,寄存器可以直接存储下连的各个子节点寄存器或者各个输出端口的已调度报文长度,或者还可以采用报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值的方式来指示各个子节点寄存器或者各个输出端口的已调度报文长度。
121.因此,寄存器可以确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,还是报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,若确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,则从本地读取下连的各个子节点寄存器或者各个输出端口的已调度报文长度;而若确定本地存储的是报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,则从本地读取报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,将报文长度上限值与各个差值相减后得到下连的各个子节点寄存器或者各个输出端口的已调度报文长度。
122.步骤604:当前调度的寄存器根据获取的各个已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口。
123.本技术实施例中,为了均衡的为各个输出端口分配流量,限定了在每一轮调度中各个输出端口或者其相应的寄存器所能调度的报文上限值,即上述的报文长度上限值。其中,不同级别的寄存器对应的报文长度上限值可以不同,而相同级别的寄存器对应的报文长度上限值可以相同,且每个寄存器对应的报文长度上限值为下连的子节点寄存器或者输出端口对应的报文长度上限值的总和。例如,当寄存器队列采用如图3所示的满二叉树结构时,则第1级队列的寄存器对应的报文长度上限值最大,且第1级队列的寄存器对应的报文长度上限值为2级队列~0和2级队列~1这两个寄存器对应的报文长度上限值的总和。
124.在一种实施方式中,当前调度的寄存器可以分别确定各个已调度报文长度与待调度报文长度的总和是否大于报文长度上限值,进而从中获取总和大于报文长度上限值的已调度报文长度。若当前调度的寄存器为非末节点寄存器,则选定总和大于报文长度上限值的已调度报文长度对应的子节点寄存器为目标子节点寄存器;若当前调度的寄存器为末节点寄存器,则选定总和大于报文长度上限值的已调度报文长度对应的输出端口为目标输出端口。
125.在一种实施方式中,当前调度的寄存器可以依次确定各个已调度报文长度与待调度报文长度的总和是否大于报文长度上限值。
126.具体的,当前调度的寄存器针对下连的各个子节点寄存器或者各个输出端口的已调度报文长度,分别执行如图7所示的过程。
127.步骤6041:获取当前已调度报文长度。
128.其中,可以按照各个子节点寄存器或者各个输出端口的顺序依次获取已调度报文长度,例如在初始时,获取第一个子节点寄存器或者输出端口的已调度报文长度。
129.步骤6042:确定当前已调度报文长度与待调度报文长度的总和是否大于报文长度上限值。
130.步骤6043:若确定总和不大于报文长度上限值,则将当前已调度报文长度对应的子节点寄存器或者输出端口选定为目标子节点寄存器或者目标输出端口。
131.步骤6044:若确定总和大于报文长度上限值,则确定当前已调度报文长度是否是最后一个。
132.其中,若确定当前已调度报文长度不是最后一个,则继续获取当前已调度报文长度之后的已调度报文长度后,并执行确定当前已调度报文长度与待调度报文长度的总和是否大于报文长度上限值的步骤,即跳转至步骤6041和6042执行。
133.步骤6045:若确定当前已调度报文长度是最后一个,则从下连的各个子节点寄存器中随机选定目标子节点寄存器,或者从下连的各个输出端口中随机选定目标输出端口。
134.基于上述的流程,以从下连的各个子节点寄存器中选定目标子节点寄存器或者目标输出端口。
135.步骤605:当前调度的寄存器将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器,调度控制器接收目标地址索引。
136.步骤606:调度控制器基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度,或者通过目标地址索引指示的输出端口转发待调度报文。
137.具体的,调度控制器确定当前调度的寄存器是否为末节点寄存器,若不是末节点寄存器,则目标地址索引指向子节点寄存器,则调度控制器判断基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度;若是末节点寄存器,则目标地址索引指向输出端口,则通过目标地址索引指示的输出端口转发待调度报文。
138.本技术实施例中,在选定目标子节点寄存器或者目标输出端口之后,寄存器还会根据待调度报文长度更新目标子节点寄存器或者目标输出端口的已调度报文长度。
139.具体的,寄存器确定本地存储的是目标子节点寄存器或者目标输出端口的已调度报文长度,还是报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值;若确定本地存储的是目标子节点寄存器或者目标输出端口的已调度报文长度,则将目标子节点寄存器或者目标输出端口的已调度报文长度增加待调度报文长度;若确定本地存储的是报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值,则将报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值减少待调度报文长度。
140.在一种实施方式中,还可以通过如图8所示的流程来进行流量分配的过程。参见图8所示,为本技术实施例提供的报文转发方法的又一种流程示意图。
141.步骤801:初始化寄存器队列。
142.本技术实施例中,在网络设备进行使用之前,或者网络设备执行重启操作或者重置操作之后,网络设备需要进行初始化,即对寄存器队列进行初始化。
143.具体的,网络设备包括2n个输出端口以及寄存器队列,寄存器队列即用于实现报文的调度,寄存器队列包括n级级联的寄存器,每一级的寄存器下连下一级的至少一个寄存器。
144.在一种可能的实现方式中,每个寄存器可以采用bfn可编程芯片的寄存器来实现,
当采用bfn可编程芯片的寄存器实现时,基于网络设备包括的2n个输出端口,寄存器队列可设置为n级寄存器,第i级寄存器使用2
i-1
个寄存器控制,每一个寄存器下连两个子节点寄存器或者输出端口,构成一个满二叉树结构,其中,i为不小于1且小于n的正整数。当然,也可以采用与其类似结构的寄存器来实现,下面主要以bfn可编程芯片的寄存器实现的寄存器队列为例进行介绍。
145.参见图1所示,bfn可编程芯片的寄存器包括hi和lo两个存储单元,一般而言,hi称为高位存储单元,lo称为低位存储单元,高位存储单元和低位存储单元例如均可以采用16位的存储单元。
146.具体的,在寄存器队列中,每个寄存器的高位存储单元和低位存储单元分别存储了能够指示下连的两个子节点寄存器或者输出端口的已调度报文长度的指示信息,该指示信息可以是已调度报文长度,也可以是相应报文长度上限值与已调度报文长度的差值。即,一个寄存器的高位存储单元用于存储下连的其中一个子节点寄存器或者输出端口对应的第一指示信息,低位存储单元用于存储下连的另一个子节点寄存器或者输出端口对应的第二指示信息。
147.以第i级的任一寄存器为例,当该寄存器为非末节点寄存器时,该寄存器下连了第(i 1)级的第一寄存器和第二寄存器,且存储第一寄存器和第二寄存器的已调度报文长度,则第一指示信息可以用于指示已分配给第一寄存器进行调度的报文长度,第二指示信息用于指示已分配给第二寄存器进行调度的报文长度。
148.当该寄存器为末节点寄存器时,该寄存器下连了第一输出端口和第二输出端口,且存储第一输出端口和第二输出端口的已调度报文长度,则第一指示信息用于可以指示已分配给第一输出端口进行转发的报文长度,第二指示信息用于指示已分配给第二输出端口进行转发的报文长度。
149.本技术实施例中,指示信息可以采用如下两种方式指示已调度报文长度。
150.(1)每个寄存器的初始化值为零,当已调度一个报文之后,则在该寄存器的存储值基础上累加该报文的报文长度。
151.例如,初始化时hi=0,以及lo=0,当报文走hi对应的输出端口时,则新的hi=hi pkt_len,lo不变,pkt_len表示该报文的报文长度;而若是报文走lo对应的端口时,则新的lo=lo pkt_len,hi不变。
152.(2)每个寄存器的初始化值为该寄存器的报文长度上限值,当已调度一个报文之后,则在该寄存器的存储值基础上减去该报文的报文长度。在这种方式中,可将每个寄存器存储的指示信息理解为令牌,当一个报文调度之后,则在原来的令牌数基础上减去该报文的报文长度,剩余的令牌数即为该寄存器还能够调度的报文长度。例如,若采用上述满二叉树结构,且采用该种方式,则在初始化时,令牌数量的初始值为2
n-i
*mtu,即每个寄存器的初始化值为2
n-i
*mtu。
153.参见图9所示,为初始化后的3级寄存器队列的示例图,图9具体以第2种方式为例进行示出。其中,第1级的寄存器的高位存储单元存储的第一指示信息用于指示第2级队列中前1/2个队列的剩余令牌数量,在初始化时,令牌数量的初始值为8*mtu,低位存储单元存储的第二指示信息用于指示第2级队列中后1/2队列的剩余令牌数量,令牌数量的初始值为8*mtu,以此类推。
154.步骤802:在接收到待调度报文时,调度控制器获取待调度报文的待调度报文长度。
155.本技术实施例中,当接收到待调度报文时,则待调度报文可以通过寄存器队列进行调度,即利用寄存器队列来确定该待调度报文要通过网络设备的哪个输出端口进行转发。其中,输出端口可以是指网络设备包括的物理端口,也可以是指虚拟端口,即逻辑端口。
156.具体的,待调度报文的待调度报文长度可采用标识字段进行表示,即上述的pkt_len来表示待调度报文的待调度报文长度。
157.步骤803:在待调度报文通过寄存器队列的第i级的寄存器进行调度时,调度控制器基于待调度报文的当前地址索引,从第i级队列对应的寄存器中,确定当前调度的寄存器。
158.本技术实施例中,当待调度报文开始调度时,其当前地址索引base为0,i为1,即待调度报文首先进入寄存器队列的第1级进行调度,当第1级调度完成之后,进入寄存器队列的第2级进行调度,并更新当前地址索引和级数i,以此类推,直至待调度报文被末节点寄存器调度完成为止,获得该待调度报文的输出端口的索引地址,并通过输出端口转发出去。
159.具体的,当待调度报文进入寄存器队列的第i级进行调度时,调度控制器基于待调度报文当前的base,从第i级的寄存器中,确定当前调度的寄存器。
160.例如,以图3所示的寄存器队列为例,当待调度报文经第1级的寄存器调度完成后,i更新为2,即需要进入寄存器队列的第2级进行调度,当第1级的寄存器调度完成后,确定走第2级的前1/2的端口时,也就是端口0~7时,则base=base 0,根据base的最新值可以确定为端口0~7对应的寄存器,即第2级寄存器中的2级队列~0,而当确定走第2级队列的后1/2的端口时,也就是端口8~15时,则base=base 2
n-i
,根据base的最新值可以确定为端口8~15对应的寄存器,即第2级寄存器中的2级队列~1。
161.步骤804:调度控制器将待调度报文的待调度报文长度输入至当前调度的寄存器中,获得当前调度的寄存器输出的子节点寄存器或者输出端口的目标地址索引。
162.其中,目标地址索引指示的子节点寄存器或者输出端口满足调度条件,调度条件为已调度报文长度与待调度报文长度的总和不大于报文长度上限值。一个寄存器对应的报文长度上限值是基于该寄存器所在的队列级别i、寄存器队列的级数n,以及单个报文最大长度mtu确定的,例如对于第i级队列的寄存器,其报文长度上限值为2
n-i
*mtu。
163.本技术实施例中,待调度报文在进入寄存器队列进行调度时,需要更新寄存器存储的指示信息和给出下一级调度的子节点寄存器或者输出端口的目标地址索引,也就是说,在当前调度的寄存器获取待调度报文长度后,则当前调度的寄存器根据自身存储的第一指示信息以及第二指示信息确定子节点寄存器或者输出端口中哪些满足调度条件,可作为目标子节点寄存器或者目标输出端口。
164.在一种可能的实施方式中,当前调度的寄存器可以确定第一指示信息指示的已调度报文长度,与待调度报文长度的第一总和是否大于自身的报文长度上限值,若第一总和不大于报文长度上限值,即第一指示信息对应的第一子节点寄存器或者第一输出端口满足调度条件,则当前调度的寄存器确定目标子节点寄存器为第一子节点寄存器,或者确定目标输出端口为第一输出端口,并输出第一子节点寄存器或者第一输出端口的地址索引,并且,根据待调度报文长度更新第一指示信息。
165.在具体应用时,若采用上述第(1)方式,即初始值为0时,则将第一指示信息的值更新为更新前的值与待调度报文长度的总和,即在更新前的第一指示信息基础上累加待调度报文长度;而若采用上述第(2)方式,即初始值为报文长度上限值时,则将第一指示信息的值更新为更新前的值与待调度报文长度之差,即在更新前的第一指示信息基础上减去待调度报文长度。
166.而若第一总和大于报文长度上限值,则当前调度的寄存器可以继续确定第二指示信息指示的已调度报文长度与待调度报文长度的第二总和是否大于报文长度上限值,若第二总和不大于报文长度上限值,即第二指示信息对应的第二子节点寄存器或者第二输出端口满足调度条件,则当前调度的寄存器确定目标子节点寄存器为第二子节点寄存器,或者确定目标输出端口为第二输出端口,并输出第二子节点寄存器或者第二输出端口的地址索引,并且根据待调度报文长度更新第二指示信息,第二指示信息的更新与第一指示信息类似,因而不再赘述。
167.示例性的,以图9中第1级的寄存器为例,假设待调度报文的报文长度为128比特,当高位存储单元存储的第一指示信息为8mtu时,表明下一级中前1/2端口对应的子节点寄存器的已调度报文长度为0,则已调度报文长度加上128比特显然小于第1级的寄存器的报文长度上限值8mtu,则待调度报文可通过前1/2端口进行转发,则当前调度的寄存器输出第2级中前1/2端口对应的子节点寄存器的地址索引,即第1级的寄存器输出base=base 0,且对高位存储单元存储的第一指示信息进行更新,即hi=hi pkt_len,这里以上述第(1)种方式为例。
168.而若是高位存储单元存储的第一指示信息为0mtu时,表明下一级中前1/2端口对应的子节点寄存器的已调度报文长度为8mtu,则已调度报文长度加上128比特显然大于第1级的寄存器的报文长度上限值8mtu,则待调度报文不会通过前1/2端口进行转发,则当前调度的寄存器继续确定可否从后1/2端口进行转发,确定方式与前1/2端口类似,因而不再赘述,当当前调度的寄存器继续确定可从后1/2端口进行转发时,则当前调度的寄存器输出指示第2级中后1/2端口对应的子节点的索引地址,即第1级队列寄存器输出base=base 2
n-i
,且对低位存储单元存储的第二指示信息进行更新,即lo=lo pkt_len,这里以上述第(1)种方式为例。
169.本技术实施例中,若是第二总和仍然大于报文长度上限值,则根据报文长度上限值,重置第一指示信息与第二指示信息。
170.具体的,当采用上述第(1)种方式时,则分别在当前的第一指示信息和第二指示信息的基础上减去报文长度上限值,即hi=hi-2
n-i
*mtu,lo=lo
–2n-i
*mtu;采用上述第(2)种方式时,则分别在当前的第一指示信息和第二指示信息的基础上加上报文长度上限值,即hi=hi 2
n-i
*mtu,lo=lo 2
n-i
*mtu。
171.此外,当前调度的寄存器还可以从下连的子节点寄存器中随机选取目标子节点寄存器,或者从其下连的输出端口中随机选取目标输出端口。
172.本技术实施例中,由于bfn可编程芯片的寄存器具备多索引的特性,即一个寄存器可以有多个索引,不同索引情况下可用于存储不同的信息,从而基于此类寄存器的特性,本技术实施例中每一级的寄存器可以采用同一个寄存器来实现,即第i级的各个寄存器为同一寄存器,这里未进行区分,以物理寄存器表示该寄存器,该物理寄存器包括多个索引标
识,一个索引标识对应第i级中的其中一个寄存器,那么在确定当前调度的寄存器存储的指示信息指示的已调度报文长度与待调度报文长度的总和是否大于报文长度上限值之前,则需要先根据当前调度的寄存器的索引标识找到相应的指示信息。这样,可以节省所需的物理寄存器的数量,大大减少成本。
173.例如,调度控制器确定当前调度的寄存器之后,还可以将当前调度的寄存器的索引标识一并输入,从而物理寄存器可从存储的多个指示信息集合中,获取索引标识对应的指示信息集合。或者,调度控制器还可以输入当前调度的寄存器的目标地址索引,从而物理寄存器可以根据目标地址索引确定当前调度的寄存器的索引标识,并从物理寄存器存储的多个指示信息集合中,获取索引标识对应的指示信息集合。其中,每个指示信息集合包含一个寄存器对应的指示信息,进而,确定索引标识对应的指示信息集合指示的已调度报文长度与待调度报文长度的总和是否大于报文长度上限值。
174.在另一种可能的实施方式中,可以通过当前调度的寄存器,确定第一指示信息指示的已调度报文长度与待调度报文长度的第一总和是否大于报文长度上限值,获得第一确定结果;以及,确定第二指示信息指示的已调度报文长度,与待调度报文长度的第二总和是否大于报文长度上限值,获得第二确定结果,从而基于第一确定结果和第二确定结果进行逻辑运算,基于逻辑运算结果确定目标子节点寄存器或者目标输出端口。
175.例如,当采用bfn可编程芯片时,则将待调度报文长度作为metadata输入后,则寄存器的hi slice和lo slice可同时进行判断,即hi slice判断高位存储单元存储的hi pkt_len是否大于2
n-i
*mtu,获得第一确定结果;以及lo slice判断低位存储单元存储的lo pkt_len是否大于2
n-i
*mtu,获得第二确定结果,从而并基于第一确定结果和第二确定结果进行逻辑运算,获得输出状态,每种逻辑运算结果对应一种输出状态,一种输出状态可以指示一种选定的目标子节点寄存器或者目标输出端口情况。
176.在实际应用中,可能出现的情况如下:
177.(1)第一确定结果为hi pkt_len不大于2
n-i
*mtu,第二确定结果lo pkt_len不大于2
n-i
*mtu,则对应的输出状态可以指示待调度报文走高位对应的输出端口,则输出状态可以为高位对应的端口的子节点寄存器或者输出端口的地址索引,即base=base 0,且更新hi=hi pkt_len。
178.(2)第一确定结果为hi pkt_len不大于2
n-i
*mtu,第二确定结果lo pkt_len不大于2
n-i
*mtu,则对应的输出状态可以指示待调度报文走高位对应的输出端口,则输出状态可以为高位对应的端口的子节点寄存器或者输出端口的地址索引,即base=base 0,且更新hi=hi pkt_len。
179.(3)第一确定结果为hi pkt_len大于2
n-i
*mtu,第二确定结果lo pkt_len不大于2
n-i
*mtu,则对应的输出状态可以指示待调度报文走低位对应的输出端口,则输出状态可以为低位对应的端口的子节点寄存器或者输出端口的地址索引,即base=base 2
n-(i-1)
,且更新lo=lo pkt_len。
180.(4)第一确定结果为hi pkt_len大于2
n-i
*mtu,第二确定结果lo pkt_len大于2
n-i
*mtu,则根据报文长度上限值,重置第一指示信息与第二指示信息,即hi=hi-2
n-i
*mtu,lo=lo-2
n-i
*mtu,且根据重置后的第一指示信息与第二指示信息重新调度待调度报文,或者随机选择子节点寄存器或者输出端口。
181.步骤805:判断第i级是否为寄存器队列的末级。
182.步骤806:若步骤805的判断结果为是,即若第i级为末级时,则通过目标地址索引指示的输出端口转发待调度报文。
183.步骤807:若步骤805的判断结果为否,若第i级为非末级,则调度控制器根据目标地址索引更新当前地址索引,且将待调度报文长度输入到第i 1级中目标地址索引对应的子节点寄存器。
184.若第i级为非末级,即当前调度的寄存器为非末节点寄存器,则待调度报文还需进入第i 1级继续进行调度,即跳转至步骤803继续执行,直至待调度报文被末级调度完成为止。
185.本技术实施例的过程,可以通过如下的代码结合bfn可编程芯片来实现:
[0186][0187]
下面结合具体的流程对上述代码的过程进行介绍,这里具体以bfn可编程芯片为例进行介绍。
[0188]
其中,参见图1所示,bfn可编程芯片的寄存器分为hi和lo两个部分,hi表示通过其对应前2
n-i
个端口的报文总长度,lo表示通过其后2
n-i
个端口的报文总长度,当前队列的基址记为base,则整体算法流程如下:
[0189]
(1)初始化时,初始化各个队列的hi和lo的值为0,当前base为0,i为1。
[0190]
(2)当有待调度报文进入bfn输入队列时,获取其报文长度,记为pkt_len。
[0191]
(3)待调度报文进入第i级进行调度,通过base索引当前调度的寄存器,参见图10所示,为待调度报文进入第i级进行调度的流程示意图,先判断hi pkt_len是否小于其能通过的最大报文长度2
n-i
*mtu,如果是,则待调度报文走该寄存器对应的前2
n-i
个端口,base=base 0;否则,当前报文走后2
n-i
个端口,base=base 2
n-i

[0192]
(4)更新hi和lo值,当报文走的是前2
n-i
个端口,则hi=hi pkt_len;否则,lo=lo pkt_len。
[0193]
(5)判断hi和lo是否同时大于2
n-i
*mtu,如果是,则更新hi=hi-2
n-i
*mtu,lo=lo
–2n-i
*mtu;否则,hi和lo不变化。这个过程可以是在每一次调度时判断的,也可以是实时进行的,即持续检测hi和lo是否同时大于2
n-i
*mtu,一旦大于,则更新hi和lo的值。
[0194]
(6)判断当前的第i级是否为最后一级,如果是,则直接根据base当前的值转发到相应的端口;否则,继续下一轮调度,i=i 1,然后重复2)~6)的操作。
[0195]
综上所述,采用本技术实施例的方法对数据流进行负载均衡转发,可以保证按照
bytes-fair的方式将报文均匀分发至2n个端口,整个流量转发期间各个端口通过的报文总长度偏差将控制在2*mtu范围以内,能够有效改善数据流在等价路径上转发的均衡效果,提高网络转发性能。
[0196]
请参见图11,基于同一发明构思,本技术实施例还提供了一种报文转发装置110,应用于网络设备包括的寄存器队列的任一寄存器中,所述网络设备还包括调度控制器、与所述寄存器队列连接的各个输出端口,所述寄存器队列采用树状结构,该装置包括:
[0197]
获取单元1101,用于在接收到调度控制器输入的待调度报文长度时,获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,待调度报文长度是调度控制器基于待调度报文的当前地址索引确定当前调度的寄存器后输入的;
[0198]
调度单元1102,用于根据获取的各个已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口;
[0199]
执行单元1103,用于将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器,使得调度控制器基于目标地址索引更新当前地址索引,并向目标地址索引指示的子节点寄存器输入待调度报文长度或者通过目标地址索引指示的输出端口转发待调度报文。
[0200]
可选的,获取单元1101,具体用于:
[0201]
确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,还是报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值;
[0202]
若确定本地存储的是下连的各个子节点寄存器或者各个输出端口的已调度报文长度,则从本地读取下连的各个子节点寄存器或者各个输出端口的已调度报文长度;
[0203]
若确定本地存储的是报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,则从本地读取报文长度上限值与下连的各个子节点寄存器或者各个输出端口的已调度报文长度的差值,将报文长度上限值与各个差值相减后得到下连的各个子节点寄存器或者各个输出端口的已调度报文长度。
[0204]
可选的,调度单元1102,具体用于:
[0205]
针对下连的各个子节点寄存器或者各个输出端口的已调度报文长度,分别执行:
[0206]
获取当前已调度报文长度;
[0207]
确定当前已调度报文长度与待调度报文长度的总和是否大于报文长度上限值;
[0208]
若确定总和大于报文长度上限值,则确定当前已调度报文长度是否是最后一个;若确定当前已调度报文长度不是最后一个,则获取当前已调度报文长度之后的已调度报文长度后,执行确定当前已调度报文长度与待调度报文长度的总和是否大于报文长度上限值的步骤;
[0209]
若确定总和不大于报文长度上限值,则将当前已调度报文长度对应的子节点寄存器或者输出端口选定为目标子节点寄存器或者目标输出端口。
[0210]
可选的,调度单元1102,具体用于:
[0211]
若确定当前已调度报文长度是最后一个,则从下连的各个子节点寄存器中随机选定目标子节点寄存器,或者从下连的各个输出端口中随机选定目标输出端口。
[0212]
可选的,该装置还包括更新单元1104,用于:
[0213]
根据待调度报文长度更新目标子节点寄存器或者目标输出端口的已调度报文长度。
[0214]
可选的,更新单元1104,具体用于:
[0215]
确定本地存储的是目标子节点寄存器或者目标输出端口的已调度报文长度,还是报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值;
[0216]
若确定本地存储的是目标子节点寄存器或者目标输出端口的已调度报文长度,则将目标子节点寄存器或者目标输出端口的已调度报文长度增加待调度报文长度;
[0217]
若确定本地存储的是报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值,则将报文长度上限值与目标子节点寄存器或者目标输出端口的已调度报文长度的差值减少待调度报文长度。
[0218]
该装置可以用于执行各实施例中寄存器所执行的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考上述各实施例的描述,不多赘述。
[0219]
请参见图12,基于同一发明构思,本技术实施例还提供了一种报文转发装置120,应用于网络设备包括的调度控制器中,网络设备还包括寄存器队列、与寄存器队列连接的各个输出端口,寄存器队列采用树状结构,装置包括:
[0220]
获取单元1201,用于获取待调度报文的待调度报文长度;
[0221]
调度单元1202,用于基于待调度报文的当前地址索引确定当前调度的寄存器,并将待调度报文长度输入当前调度的寄存器,使得当前调度的寄存器获取当前调度的寄存器下连的各个子节点寄存器或者各个输出端口的已调度报文长度,根据获取的各个已调度报文长度、待调度报文长度和当前调度的寄存器对应的报文长度上限值,从下连的各个子节点寄存器或者各个输出端口中选定目标子节点寄存器或者目标输出端口,并将目标子节点寄存器或者目标输出端口的目标地址索引发送给调度控制器;
[0222]
更新单元1203,用于接收目标子节点寄存器或者目标输出端口的目标地址索引后,基于目标地址索引更新当前地址索引;
[0223]
执行单元1204,用于向目标地址索引指示的子节点寄存器输入待调度报文长度,或者通过目标地址索引指示的输出端口转发待调度报文。
[0224]
该装置可以用于执行各实施例中调度控制器所执行的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考上述各实施例的描述,不多赘述。
[0225]
请参见图13,基于同一技术构思,本技术实施例还提供了一种计算机设备130,可以包括存储器1301和处理器1302。
[0226]
所述存储器1301,用于存储处理器1302执行的计算机程序。存储器1301可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据计算机设备的使用所创建的数据等。处理器1302,可以是一个中央处理单元(central processing unit,cpu),或者为数字处理单元等等。本技术实施例中不限定上述存储器1301和处理器1302之间的具体连接介质。本技术实施例在图13中以存储器1301和处理器1302之间通过总线1303连接,总线1303在图13中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线1303可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总
线或一种类型的总线。
[0227]
存储器1301可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,ram);存储器1301也可以是非易失性存储器(non-volatile memory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd)、或者存储器1301是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器1301可以是上述存储器的组合。
[0228]
处理器1302,用于调用所述存储器1301中存储的计算机程序时执行上述各实施例中设备中寄存器或者调度控制器所执行的方法。
[0229]
在一些可能的实施方式中,本技术提供的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本技术各种示例性实施方式的方法中的步骤,例如,所述计算机设备可以执行上述各实施例中寄存器或者调度控制器所执行的方法。
[0230]
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0231]
尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改。
[0232]
显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献