背景技术
基于信元的CLOS交换网络具有无阻塞,可扩展和大容量的特点,目前已成为交换芯片的主流。CLOS交换网络包含IM(Input Module,输入模块),CM(Central Module,中间模块)和OM(Output Module,输出模块),他们可组成3级的CLOS结构,并且可以很容易得扩展成5级CLOS结构。采用折叠方式,IM和OM的功能可在一块芯片内实现,而CM的功能则在另一块芯片中实现。
以太网数据包(Packet)是变长的,且最大包长可能达到16000字节,在交换芯片中基于数据包进行交换会带来较大的延时,并且需要很大的存储空间来缓存最大数据包。为了提高延时性能和减少缓存容量,目前主流的CLOS交换网络中都是以信元(CELL)为基本单位进行交换的,IM需完成把数据包切分成信元送往CM,CM完成信元的交换,OM则需要把信元重新组成原来的数据包并输出。在传统的CLOS交换网络中,为了提高网络的性能,IM需要把同一个数据包的所有信元负载均衡的送到不同的交换平面CM。但随之也会带来问题:经过不同CM到达同一个OM的延时可能会不一样。这样可能导致数据包乱序和信元乱序,如果不做信元保序,OM将消耗大量的资源来解决这个问题。目前信元保序的主要方法是在IM给信元打全局时戳,在CM和OM执行最老信元先出,这样就能在OM完成信元保序,进一步完成数据包重组。把数据包切分成信元时,不仅需要保留数据包的Source Id(源序列号),即InputModule Id(输入模块号)和Input Port(输入端口号)的组合,Destination Id(目的序列号),即Output Module Id(输出模块号)和Output Port(输出模块号)的组合,用于路由到达目的地;增加数据包切分必须的Packet Seq(数据包的序列号),Fragment Id(分片的序列号)等,用于把信元还原成数据包;还需要信元保序所需的Timestamp(时戳)。
早期的信元交换芯片,一般吞吐量较低,采用的是固定信元长度。为了提高信元交换架构的吞吐量,交换芯片一般采用较大的总线宽度和总线工作频率。随着网络需求的不断膨胀,IM接入带宽需求越来越大,目前已由几十G到了上百G,甚至五六百G;单个CM的交换容量需求也达到了1T以上。核心工作频率受限于芯片工艺,不能无限制的提高。采用更高的总线宽度只能提高长数据包的吞吐量,而对于短数据包和特殊长度的数据包,是无能为力的。
具体的,参见图1所示,在传统的CLOS交换网络中,切分步骤如下:
步骤1.VOQ(Virtual Output Queue,虚输出队列)存储数据包。
步骤2.队列调度器采用合适的调度算法从不同的VOQ中读取数据包,调度算法可以采用WDRR(Weighted Deficit Round Robin,加权差额轮询)等算法。
步骤3.把取出的数据包切成固定长度数据信元分片。
由于,信元交换都是采用的定长信元的方式,即把数据包切分封装进定长的信元,即使只剩余一个字节,也会占用一个固定信元的长度,需要填充大量无效内容。这种方式效率及其低下,特别是对于一些特殊包长,因为填充了大量的无效内容,链路的利用率只能达到50%。
另外,无论是在IM,CM还是OM,数据总线的宽度是固定的,随着接入带宽和交换容量的提升,目前的大容量芯片总线带宽设计一般较大,一般会大于64字节(512比特)。此处以1024比特的总线宽度为例,128字节(1024比特)的数据包刚好匹配,芯片总线效率最高。而对于64字节,129字节等包长,总线效率只能达到50%。为了满足这些特定长度的数据包的吞吐量要求,芯片不得不提高总线工作频率,为整个芯片设计带来了不少复杂度。如果总线工作频率无法得到满足的情况下,这些特定长度的数据包的吞吐量将成为该芯片的瓶颈。其他宽度的总线存在相同的问题。
因此亟需采用其他技术手段来提高系统效率,在现有总线宽度和总线工作频率下提高系统吞吐量。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于CLOS交换网络的数据包切分和重组的系统及方法,本发明提高了总线效率,在相同总线宽度和总线工作频率的情况下,能够明显提升短包和特殊长度包的吞吐量,实现了系统性能显著提升。
为达到以上目的,本发明采取的技术方案是:一种基于CLOS交换网络的数据包切分和重组的系统,所述CLOS交换网络包括若干个输入模块IM、若干个中间模块CM和若干个输出模块OM;每个CM分别与每个IM及每个OM相连,每个IM均包括组合包调度器、变长切片单元、路由单元;每个OM均包括重组单元;其中,所述组合包调度器包括队列调度器、组合包容器和原始包缓存;队列调度器,用于将来源于同一个虚输出队列VOQ,且包长小于预设值的数据包进行组合形成组合包,打上相应标识后,发送至组合包容器;还用于将包长不小于预设值的数据包作为原始包,打上原始包标识后,发送至原始包缓存;组合包容器,用于储存组合包;原始包缓存,用于储存原始包;变长切片单元,用于从组合包容器中读取组合包或者从原始包缓存中读取原始包;将组合包或者原始包切分成若干个变长信元,为每个变长信元添加信元头后,发送至路由单元;路由单元,用于将变长信元经相应的CM发送至目标OM的重组单元;重组单元,用于根据信元头将变长信元还原为组合包或者原始包。
在上述技术方案的基础上,所述队列调度器为组合包打上pack info标识和组合包标识,其中pack info标识用于表示该组合包中数据包的数量及各数据包的包长。
在上述技术方案的基础上,所述pack info标识包括包长指示packet length和组合包结尾指示end ind;其中,packet length用于表示组合包中各数据包的包长;end ind用于指示组合包是否结束,若end ind的值为“0”,表示表示组合包未结束,后续有数据包;若end ind的值为“1”,表示组合包结束,后续没有数据包。
在上述技术方案的基础上,所述信元头包括有效分片Fragment Valid、源序列号Source Id、目的序列号Destination Id、数据包的序列号Packet Seq、信元时戳CellTimestamp、分片序列号Fragment Id和最后分片Last fragment;其中,Fragment Valid,用于分片有效指示;Source Id,表示输入模块号Input Module Id和输入端口号Input Port的组合;Destination Id,表示输出模块号Output Module Id和输出端口号Output Port的组合;Packet Seq,表示包的序列号;Cell Timestamp,表示信元的时戳;Fragment Id,用于区分同一个包的不同分片;Last fragment,用于表示最后一个分片指示。
本发明还公开了一种用于上述系统的基于CLOS交换网络的数据包切分和重组的方法,包括以下步骤:步骤S1.所述队列调度器将来源于同一个虚输出队列VOQ且包长小于预设值的数据包进行组合形成组合包,打上相应标识后,发送至组合包容器;将包长不小于预设值的数据包作为原始包,打上原始包标识后,发送至原始包缓存;步骤S2.变长切片单元读取组合包或者从原始包缓存中读取原始包;将组合包或者原始包切分成若干个变长信元,为每个变长信元添加信元头后,发送至路由单元;步骤S3.路由单元将变长信元经相应的中间模块CM发送至目标输出模块OM的重组单元;步骤S4.重组单元根据信元头将变长信元还原为组合包或者原始包。
在上述技术方案的基础上,步骤S1的具体流程为:步骤S101.组合包调度器中的队列调度器根据加权差额轮询WDRR算法选择相应的VOQ;该VOQ的调度权重值大于0且VOQ的队列不能为空;步骤S102.从选中的VOQ中读取一个数据包,获取数据包的包长信息;更新VOQ的调度权重值,更新后的调度权重值=更新前的调度权重值-数据包包长对应的调度权重值;步骤S103.判断数据包的包长是否小于预设值,若是,跳转至步骤S104;否则,跳转至步骤110;步骤S104.在数据包的包头添加pack info标识中的包长指示packet length和数值为“0”的组合包结尾指示end ind,然后将数据包写入组合包容器,计算组合包容器的剩余字节,跳转至步骤S105;步骤S105.判断该VOQ是否读空,若是,跳转至步骤S109;否则,跳转至步骤S106;步骤S106.预读选中的VOQ的下一个数据包,获取下一个数据包的包长信息,跳转至步骤S107;步骤S107.判断下一个数据包的包长是否大于组合包容器的剩余字节,若是,跳转至步骤S109;否则,跳转至步骤S108;步骤S108.从选中的VOQ中读取下一个数据包,更新VOQ的调度权重值,跳转至步骤S104;步骤S109.为组合包打上组合包标识和数值为“1”的end ind,跳转至步骤S111;步骤S110.将数据包作为原始包,打上原始包标识,跳转至步骤S111;步骤S111.将组合包发送至组合包容器或者将原始包发送至原始包缓存,将组合包容器的剩余字节设为预设值,跳转至步骤S101。
在上述技术方案的基础上,步骤S103和步骤S111中所述预设值为1024~2048字节。
在上述技术方案的基础上,步骤S2中,将组合包或者原始包切分成若干个变长信元的具体流程为:步骤S201.变长切片单元读取组合包或者原始包,此时组合包或者原始包的剩余长度等于包长;步骤S202.判断剩余长度是否小于预设的最大长度+预设的最小长度,若是,跳转至步骤S203;否则,跳转至步骤S204;步骤S203.判断剩余长度是否大于预设的最大长度,若是,跳转至步骤S205;否则,跳转至步骤S206;步骤S204.信元长度等于预设的最大长度,跳转至步骤S207;步骤S205.信元长度等于预设的最大长度减去预设的最小长度,跳转至步骤S207;步骤S206.信元长度等于剩余长度,跳转至步骤S207;步骤S207.更新剩余长度,更新后的剩余长度=更新前的剩余长度-信元长度,跳转至步骤S208;步骤S208.判断更新后剩余长度是否等于零,若是,跳转至步骤S209;否则,跳转至步骤S202;步骤S209.切片完成,结束流程。
在上述技术方案的基础上,所述预设的最大长度为256字节,预设的最小长度为64字节。
在上述技术方案的基础上,步骤S4的具体流程为:步骤S401.重组单元根据信元头将变长信元还原为组合包或者原始包;步骤S402.判断类型,若为组合包,跳转至步骤S403;若为原始包,跳转至步骤S405;步骤S403.解析第一个数据包的pack info标识,得到endind和packet length;跳转至步骤S404;步骤S404.判断end ind的值,若值“0”,跳转至步骤S406;若值“1”,跳转至步骤S405;步骤S405.将数据包添加进输出队列OQ,结束流程;步骤S406.根据packet length取出对应的数据包,添加进OQ,跳转至步骤S407;步骤S407.根据packet length确定下一个数据包的pack info标识位置,得到end ind和packet length,跳转至步骤S408;步骤S408.判断end ind的值,若值“0”,跳转至步骤S406;若值“1”,结束流程。
本发明的有益效果在于:
1、本发明中通过在IM中把具有相同属性的多个短数据包封装成一个组合包(比如包长1024字节),再切分成信元,避免在总线上出现短数据包的情况,从而提高了总线效率,在相同总线宽度和总线工作频率的情况下,能够明显提升短包和特殊长度包的吞吐量,实现了系统性能显著提升。
2、本发明中通过在IM中把数据包切分成变长信元,即使最后仅剩一个字节,也不会进行填充进而把一个字节封装成信元发送出去,因此提高了链路效率。
3、本发明采用组合包和变长信元的方式,使得总线和链路效率的提升,针对同样的IM输入流量,能够减少CM的个数,且仍能满足吞吐量要求,达到了降低系统成本目的。
4、本发明采用组合包和变长信元的方式,使得系统工作时钟要求相对较低,减轻了相关系统设计时电路设计的难度,并增强了电路设计的稳定性,从而提高了系统设计的成功概率。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图2所示,本发明实施例提供了一种基于CLOS交换网络的数据包切分和重组的系统,CLOS交换网络包括若干个输入模块IM、若干个中间模块CM和若干个输出模块OM;每个CM分别与每个IM及每个OM相连,每个IM均包括组合包调度器、变长切片单元、路由单元;每个OM均包括重组单元;其中:
组合包调度器包括队列调度器、组合包容器和原始包缓存;
队列调度器,用于将来源于同一个虚输出队列VOQ且包长小于预设值的数据包进行组合形成组合包,打上相应标识后,发送至组合包容器;还用于将包长不小于预设值的数据包作为原始包,打上原始包标识后,发送至原始包缓存。具体的,队列调度器为组合包打上pack info标识和组合包标识后,其中pack info标识用于表示该组合包中数据包的数量及各数据包的包长。
组合包容器,用于储存组合包。
原始包缓存,用于储存原始包。
变长切片单元,用于从组合包容器中读取组合包或者从原始包缓存中读取原始包;将组合包或者原始包切分成若干个变长信元,为每个变长信元添加信元头后,发送至路由单元。
路由单元,用于将变长信元经相应的CM发送至目标OM的重组单元。
重组单元,用于根据信元头将变长信元还原为组合包或者原始包。
参见图3所示,pack info标识包括包长指示packet length和组合包结尾指示endind;packet length用于表示组合包中各数据包的包长;end ind用于指示组合包是否结束,若end ind的值为“0”,表示表示组合包未结束,后续有数据包,并根据数值“0”出现的次数确定该组合包中数据包的数量;若end ind的值为“1”,表示组合包结束,后续没有数据包。
参见图4所示,信元头包括有效分片Fragment Valid、源序列号Source Id、目的序列号Destination Id、数据包的序列号Packet Seq、信元时戳Cell Timestamp、分片序列号Fragment Id和最后分片Last fragment;其中,Fragment Valid用于分片有效指示;SourceId表示输入模块号Input Module Id和输入端口号Input Port的组合;Destination Id表示输出模块号Output Module Id和输出端口号Output Port的组合;Packet Seq表示包的序列号;Cell Timestamp表示信元的时戳;Fragment Id用于区分同一个包的不同分片;Last fragment用于表示最后一个分片指示。其中Fragment Valid,Source Id和CellTimestamp均用于信元保序;Packet Seq和Last fragment用于信元重组;Fragment Id既可用于排序又可用于重组。
参见图5所示,本发明实施例还提供一种用于上述系统的基于CLOS交换网络的数据包切分和重组的方法,包括以下步骤:
步骤S1.组合包调度器中的队列调度器将来源于同一个虚输出队列VOQ且包长小于预设值的数据包进行组合形成组合包,打上相应标识后,发送至组合包容器;将包长不小于预设值的数据包作为原始包,打上原始包标识后,发送至原始包缓存。具体的,组合包调度器为组合包打上pack info标识和组合包标识,其中pack info标识用于表示该组合包中数据包的数量及各数据包的包长。
步骤S2.变长切片单元从组合包容器中读取组合包或者从原始包缓存中读取原始包;将组合包或者原始包切分成若干个变长信元,为每个变长信元添加信元头后,发送至路由单元。
步骤S3.路由单元将变长信元经相应的中间模块CM发送至目标输出模块OM的重组单元。
步骤S4.重组单元根据信元头将变长信元还原为组合包或者原始包;若为组合包,则根据pack info标识将组合包拆分为若干数据包,并将数据包添加进输出队列OQ;若为原始包,则直接将数据包添加进OQ。
参见图6所示,步骤S1的具体流程为:
步骤S101.组合包调度器中的队列调度器根据WDRR(Weighted Deficit RoundRobin,加权差额轮询)算法选择相应的VOQ;该VOQ的调度权重值大于0且VOQ的队列不能为空。
步骤S102.从选中的VOQ中读取一个数据包,获取数据包的包长信息;更新VOQ的调度权重值,更新后的调度权重值=更新前的调度权重值-数据包包长对应的调度权重值。
步骤S103.判断数据包的包长是否小于预设值,若是,跳转至步骤S104;否则,跳转至步骤110;其中,预设值为1024~2048字节,预设值处于该区间范围内,能够最大限度的提高总线的效率。
步骤S104.在数据包的包头添加pack info标识中的包长指示packet length和数值为“0”的组合包结尾指示end ind,然后将数据包写入组合包容器,计算组合包容器的剩余字节,跳转至步骤S105;优选的,计算组合包容器的剩余字节时,只计算数据包的大小,不含pack info标识的长度。方便计算效率,开销之类的。
步骤S105.判断该VOQ是否读空,若是,跳转至步骤S109;否则,跳转至步骤S106。
步骤S106.预读选中的VOQ的下一个数据包,获取下一个数据包的包长信息,跳转至步骤S107。
步骤S107.判断下一个数据包的包长是否大于组合包容器的剩余字节,若是,跳转至步骤S109;否则,跳转至步骤S108。
步骤S108.从选中的VOQ中读取下一个数据包,更新VOQ的调度权重值,更新后的调度权重值=更新前的调度权重值-数据包包长对应的调度权重值,跳转至步骤S104。
步骤S109.为组合包打上组合包标识和数值为“1”的end ind,跳转至步骤S111。
步骤S110.将数据包作为原始包,打上原始包标识,跳转至步骤S111。
步骤S111.将组合包发送至组合包容器或者将原始包发送至原始包缓存,将组合包容器的剩余字节设为预设值,跳转至步骤S101。其中,预设值为1024~2048字节。
参见图7所示,步骤S2中,将组合包或者原始包切分成若干个变长信元的具体流程为:
步骤S201.变长切片单元读取组合包或者原始包,此时组合包或者原始包的剩余长度等于包长。
步骤S202.判断剩余长度是否小于预设的最大长度+预设的最小长度,若是,跳转至步骤S203;否则,跳转至步骤S204;其中,预设的最小长度的不能过小,否则会提高链路开销比例,优选的,预设的最小长度为64字节;预设的最大长度则不能太大,否则会影响系统延时,优选的,预设的最大长度为256字节。
步骤S203.判断剩余长度是否大于预设的最大长度,若是,跳转至步骤S205;否则,跳转至步骤S206。
步骤S204.信元长度等于预设的最大长度,跳转至步骤S207。
步骤S205.信元长度等于预设的最大长度减去预设的最小长度,跳转至步骤S207。
步骤S206.信元长度等于剩余长度,跳转至步骤S207。
步骤S207.更新剩余长度,更新后的剩余长度=更新前的剩余长度-信元长度,跳转至步骤S208。
步骤S208.判断更新后剩余长度是否等于零,若是,跳转至步骤S209;否则,跳转至步骤S202。
步骤S209.切片完成,结束流程。
参见图8所示,步骤S4的具体流程为:
步骤S401.重组单元根据信元头将变长信元还原为组合包或者原始包。
步骤S402.判断类型,若为组合包,跳转至步骤S403;若为原始包,跳转至步骤S405。
步骤S403.解析第一个数据包的pack info标识,得到end ind和packet length;跳转至步骤S404。
步骤S404.判断end ind的值,若值“0”,跳转至步骤S406;若值“1”,跳转至步骤S405。
步骤S405.将数据包添加进OQ(Output Queue,输出队列),结束流程。
步骤S406.根据packet length取出对应的数据包,添加进OQ,跳转至步骤S407。
步骤S407.根据packet length确定下一个数据包的pack info标识位置,得到endind和packet length,跳转至步骤S408。
步骤S408.判断end ind的值,若值“0”,跳转至步骤S406;若值“1”,结束流程。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。