分布式交换机系统内部流量控制方法
技术领域
本发明涉及一种分布式交换系统,尤其是涉及一种分布式交换机系统内部流量控制方法。
背景技术
在由多个交换芯片组成的分布式交换机系统中,不可避免的会出现:1、来自多个端口的报文发往同一个端口;2、来自多个交换芯片的报文发往同一个芯片。
上述两种场景下都可能导致:1、报文在出端口/出芯片时发生拥塞导致丢弃,影响业务;2、这些最终被丢弃的报文占用了分布式交换机系统内部的带宽和内存资源,对其他流量造成影响。
发明内容
本发明的目的在于克服现有技术的缺陷,提供一种分布式交换机系统内部流量控制方法,以避免分布式交换机系统内部出现拥塞。
为实现上述目的,本发明提出如下技术方案:一种分布式交换机系统内部流量控制方法,所述分布式交换机系统包括主控芯片和多个线卡芯片,所述主控芯片和线卡芯片之间通过对应的内部口相连,其特征在于,所述方法包括:
S1,首先,记录主控芯片和线卡芯片的面板口的物理入口和出口的内存使用量计数、面板口的虚拟入口和出口的内存使用量计数,并同时配置它们的拥塞阀值;
S2,线卡芯片的面板出口接收从主控芯片和其他线卡芯片的面板入口发送过来的报文,当所述面板出口的内存使用量超过其拥塞阀值时,所述线卡芯片发送一个第一拥塞消息给主控芯片;
S3,所述主控芯片从其与线卡芯片相连的内部口收到所述第一拥塞消息后,通知其与内部口相对应的第一虚拟端口停止发送报文,若与所述第一虚拟端口相连的所述面板入口和其他第二虚拟端口的内存使用量分别超过各自拥塞阀值时,所述面板入口开始丢弃报文或通知与其相连的上游设备停止发包;而所述第二虚拟端口发送一个第二拥塞消息给与主控芯片相连的所述其他线卡芯片;
S4,所述其他线卡芯片从其与主控芯片相连的内部口收到所述第二拥塞消息后,通知其与内部口相对应的第三虚拟端口停止发送报文,若与所述第三虚拟端口相连的所述面板入口的内存使用量超过其拥塞阀值时,则开始丢弃报文或通知与其相连的上游设备停止发包;
S5,当所述面板出口的内存使用量小于其拥塞阀值后,所述线卡芯片发送一个第一拥塞解除消息给主控芯片;
S6,所述主控芯片收到所述第一拥塞解除消息后,通知所述第一虚拟端口继续发送报文;当所述第二虚拟端口的内存使用量分别小于其拥塞阀值后,所述第二虚拟端口发送一个第二拥塞解除消息给与主控芯片相连的所述其他线卡芯片;当与所述第一虚拟端口相连的面板入口的内存使用量小于其拥塞阀值后,取消丢包或者通知上游设备开始发包;
S7,所述其他线卡芯片收到所述第二拥塞解除消息后,通知所述第三虚拟端口继续发送报文,当与所述第三虚拟端口相连的所述面板入口的内存使用量小于其拥塞阀值时,则取消丢包或者通知上游设备开始发包;
S8,循环执行步骤S2~S7。
优选地,所述第一拥塞消息中的端口属性赋值为第一虚拟端口的端口号,行为属性为停止。
优选地,所述第二拥塞消息中的端口属性赋值为第三虚拟端口的端口号,行为属性为停止。
优选地,所述第一拥塞解除消息中的端口属性赋值为第一虚拟端口的端口号,行为属性为开始。
优选地,所述第二拥塞解除消息中的端口属性赋值为第三虚拟端口的端口号,行为属性为开始。
优选地,报文从主控芯片/其他线卡芯片的面板入口进来,在其以太网头后插入主控芯片/其他线卡芯片的面板入口的端口ID,报文转发到主控芯片/其他线卡芯片的内部口时,根据所述端口ID进入与所述端口ID相对应的虚拟口。
优选地,所述主控芯片或线卡芯片使用802.3协议的PAUSE机制,通知与其相连的上游设备停止或开始发包。
优选地,所述拥塞消息和拥塞解除消息的编码和解码可通过相应的FPGA硬件实现。
优选地,所述拥塞消息编码时,将拥塞端口ID和拥塞动作编码到所述拥塞消息中;解码时,从所述拥塞消息中得出拥塞端口ID和拥塞动作。
与现有技术相比,本发明的有益效果是:实现了基于多芯片的分布式系统内部的流量控制,提前处理可能到来的拥塞情况,避免了分布式交换机系统内部出现拥塞,进而占据多个芯片的内存和带宽,影响分布式交换机的转发性能的问题。
附图说明
图1是本发明实施例分布式交换机系统内部流量控制方法的原理示意图。
具体实施方式
下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。
本发明所揭示的一种分布式交换机系统内部流量控制方法,主要应用于对数据传输的网络芯片,如数据中心,企业网,城域网等。通过为面板口分配虚拟入端口和出端口,并监控这些虚拟入端口和出端口的内存使用量,通过拥塞消息在芯片间做流量控制,避免分布式交换机内部出现拥塞,提高交换机性能。
分布式交换机系统包括主控芯片和多个线卡芯片(线卡芯片#0、线卡芯片#1……线卡芯片#n,其中n为大于等于0的自然数),本发明通过在主控芯片上的下行口上,为线卡芯片的面板口分布虚拟端口;在线卡芯片上行口,为面板口分配虚拟端口;并监控这些虚拟入端口和出端口的内存使用量,通过拥塞消息在芯片间做流量控制。下面以分布式交换机系统由一个主控芯片和两个线卡芯片(线卡芯片#0、线卡芯片#1)为例,来具体介绍本发明分布式交换机系统内部流量控制的原理。
其中,主控芯片有面板口16、17,内部口0、2,线卡芯片#0上有面板孔0~7,线卡芯片#1上有面板孔8~15。主控芯片通过其内部口0和线卡芯片#0的内部口1相连,实现主控芯片与线卡芯片#0的相连;主控芯片通过其内部口2和线卡芯片#1的内部口3相连,实现主控芯片与线卡芯片#1的相连。
需要说明的是,本配置是实际交换机系统中需要的,示例图1中做了简化,只绘制了线卡芯片#1收报文的情况,实际上还有线卡芯片#0收报文的场景;这2个场景是完全对称的,因此,所有的配置在线卡芯片#1上有的,在线卡芯片#0上也要有,反之亦然。
结合图1所示,本发明所揭示的一种分布式交换机系统内部流量控制方法,包括:
S1,首先,记录主控芯片和线卡芯片的面板口的物理入口和出口的内存使用量计数、面板口的虚拟入口和出口的内存使用量计数,并同时配置它们的拥塞阀值。
还是以上面例子来说,具体地,在主控芯片的下行口(即内部口0和内部口2)上,为线卡芯片#0的面板口0-7分布对应的虚拟端口0-7,为线卡芯片#1的面板口8-15分布对应的虚拟端口8-15;同时,在线卡芯片#0的上行口(即内部口1)上,为其面板口0-7分别对应的虚拟端口0-7,在线卡芯片#1的上行口(即内部口3)上,为其面板口8-15分别对应的虚拟端口8-15。
记录主控芯片上面板口16-17的物理入口和出口内存使用量计数,及面板口0-15的虚拟入口和出口内存使用量计数;记录线卡芯片#0上面板口0-7的物理入口和出口的内存使用量计数,及内部口1上面板口0-7的虚拟出口内存使用量计数;记录线卡芯片#1上面板口8-15的物理入口和出口的内存使用量计数,及内部口3上面板口8-15的虚拟出口内存使用量计数;且配置它们各自的拥塞阀值。
S2,线卡芯片的面板出口接收从主控芯片和其他线卡芯片的面板入口发送过来的报文,当所述面板出口的内存使用量超过其拥塞阀值时,所述线卡芯片发送一个第一拥塞消息给主控芯片。
具体地,以线卡芯片#1上收取报文为例,线卡芯片#1的面板口8接收从主控芯片的面板口16和线卡芯片#0的面板口7传送过来的报文。详细地,报文的第一条转发路径为:
报文从面板口7进入,依次经过内部口1,内部口0,内部口2,内部口3,最终到达面板口8,包括以下步骤:
a),报文从线卡芯片#0的面板口7进来,会在其以太网头部后面插入这个port id7;
b),报文转发到内部口1时,根据面板口port id 7进入对应的虚拟出口7;
c),主控芯片内部口0收到报文后,从报文中得出port id 7,增加其虚拟port 7的入口内存使用量计数;
d),主控芯片上报文被转发到面板口的虚拟端口8,增加虚拟port 8的出口内存使用量计数;
e),报文从内部口2出去,由内部口3进入线卡芯片#1,转发到面板口8。
报文的第二条转发路径为:
报文从面板口16进入,依次经过内部口2,内部口3,最终到达面板口8,包括以下步骤:
a),报文从主控芯片的面板口16进来,被转发到其面板口的虚拟port8,增加虚拟port 8的出口内存使用量计数;
b),报文从内部口2出去,由内部口3进入线卡芯片#1,转发到面板口8。
其中,面板口16的内存使用量为16G,面板口7的内存使用量为1G,线卡芯片#1的面板口8的内存使用量为1G。从上面的报文转发路径可以看出,两条流分别从1G和10G速率的面板口进入,转发到1G面板口;当这两条流的速率之和大于1G(即大于线卡芯片#1的面板口8的内存使用量)时,面板口8就会出现报文拥塞。
当面板口8物理出口内层使用量超过配置拥塞阀值时,线卡芯片#1产生一个第一拥塞消息通知主控芯片,本实施例中,第一拥塞消息的格式如下:
Type=0 |
Port=面板口ID 8 |
Action=Stop(停止) |
S3,所述主控芯片从其与线卡芯片相连的内部口收到所述第一拥塞消息后,通知其与内部口相对应的第一虚拟端口停止发送报文,若与所述第一虚拟端口相连的所述面板入口和其他第二虚拟端口的内存使用量分别超过各自拥塞阀值时,所述面板入口开始丢弃报文或通知与其相连的上游设备停止发包;而所述第二虚拟端口发送一个第二拥塞消息给与主控芯片相连的所述其他线卡芯片。
还是以上面例子来说,具体地,主控芯片的内部口2收到这个第一拥塞消息后,取出消息中的Port 8和Stop信息,停止从虚拟port 8发送报文出去,这时就没有报文再发往线卡芯片#1的Port8了,而线卡芯片#1的Port8还在发包出去,这样线卡芯片#1的port8上的报文内存使用量就会慢慢降下来。
在主控芯片上,面板口16和虚拟口7的报文被转发到虚拟端口8,当虚拟端口8停止发送报文后,面板口16和虚拟端口7的入口内存使用量不断增加,最终会达到拥塞阀值。
对于面板口16来说,可以选择开始丢弃报文,或者使用802.3协议的PAUSE(暂停)机制,通知上游设备停止发包。
对于虚拟端口7来说,产生一个第二拥塞消息通知线卡芯片#0,消息格式如下:
Type=0 |
Port=面板口ID 7 |
Action=Stop |
S4,所述其他线卡芯片从其与主控芯片相连的内部口收到所述第二拥塞消息后,通知其与内部口相对应的第三虚拟端口停止发送报文,若与所述第三虚拟端口相连的所述面板入口的内存使用量超过其拥塞阀值时,则开始丢弃报文或通知与其相连的上游设备停止发包。
还是以上面例子来说,具体地,线卡芯片#0的内部1收到第二拥塞消息后,取出消息中的Port7和Stop信息,停止从虚拟port7发送报文出去,这时就没有报文发往主控芯片了,这样主控芯片上的虚拟入口7和虚拟出口8的内存使用量就会降下来。
线卡芯片#0上虚拟port7停止发送报文后,物理入口7的内存使用量不断增加,最终达到其拥塞阀值,这时物理入口7可以选择丢弃报文,或者使用802.3PAUSE机制,通知上游设备停止发包,这样线卡芯片#0上的物理入口7的内存使用量就会降下来。
S5,当所述面板出口的内存使用量小于其拥塞阀值后,所述线卡芯片发送一个第一拥塞解除消息给主控芯片。
具体地,等到线卡芯片#1的port 8内存使用量降下来,即小于其拥塞阀值后,线卡芯片#1会发送第一拥塞解除消息给主控芯片,消息格式如下:
Type=0 |
Port=面板口ID 8 |
Action=Start |
S6,所述主控芯片收到所述第一拥塞解除消息后,通知所述第一虚拟端口继续发送报文;当所述第二虚拟端口的内存使用量分别小于其拥塞阀值后,所述第二虚拟端口发送一个第二拥塞解除消息给与主控芯片相连的所述其他线卡芯片;当与所述第一虚拟端口相连的面板入口的内存使用量小于其拥塞阀值后,取消丢包或者通知上游设备开始发包。
具体地,主控芯片收到这个消息并解析后,虚拟口8开始发包,面板口16和虚拟入口7的报文就可以继续转发到虚拟口8。
主控芯片上面板口16的内存使用量开始降下来,即其内存使用量小于其拥塞阀值后,会取消丢包或者通知上游设备开始发包。
主控芯片上虚拟入口7的内存使用量开始降下来,会发送第二拥塞解除消息给线卡芯片#0,消息格式如下:
Type=0 |
Port=面板口ID 7 |
Action=Start |
S7,所述其他线卡芯片收到所述第二拥塞解除消息后,通知所述第三虚拟端口继续发送报文,当与所述第三虚拟端口相连的所述面板入口的内存使用量小于其拥塞阀值时,则取消丢包或者通知上游设备开始发包;
具体地,线卡芯片#0收到第二拥塞解除消息后,虚拟端口7开始继续发包,线卡芯片#0面板口7的报文就可以继续转发到对应的虚拟口7上了。
线卡芯片#0的面板口7上报文继续转发到虚拟口7后,面板口7的入口内存使用量开始降下来,即其内存使用量小于其拥塞阀值后,最终会取消丢包或者通知上游设备开始发包。
S8,循环执行步骤S2~S7。
在硬件实现上:
上述虚拟出端口可以用队列来实现,这样,主控芯片上根据目的面板口ID进入虚拟出端口(队列);线卡芯片上根据源面板口ID进入虚拟出端口(队列);虚拟出端口需要能够对拥塞消息进行响应,开始和停止发送报文,这里的实现和802.3PAUSE机制类似,可以参考实现。
虚拟入端口,不需要响应开始和停止发送报文,因此不需要使用队列,只需要记录内存使用量计数即可。
拥塞消息的编码和解码,可由一块独立的FPGA完成:
a),编码时:将拥塞端口ID和拥塞动作编码到拥塞消息中,通过硬件连线传递消息;
b),解码时:从拥塞消息中得出端口ID和拥塞动作,通过硬件连线送给芯片。
上述以一个主控芯片和两个线卡芯片为例,在具体实施时,可扩展到两个以上的多个线卡芯片的应用,其实现原理可参照上述说明书中具体描述。
这样,本发明基于主控芯片和线卡芯片的物理/虚拟入口和出口的报文内存占用情况来判断拥塞情况,通过拥塞消息在芯片间做流量控制,避免分布式交换机内部出现拥塞,提高交换机性能。
本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。