发明目的:
为了最大限度地利用捆绑端口的带宽,实现真正意义上端口捆绑,本发明设计了一种基于流量动态负荷均衡的端口捆绑分流方法及相应的交换机芯片。
发明的技术方案:
要实现真正意义上的端口捆绑,本方法在分流时将被捆绑的所有端口看作一个逻辑端口,转发逻辑将它们作为一个端口来看待,以便充分利用捆绑后总的带宽。
为此,从交换芯片本身就必须将捆绑在一起的端口看作同一个逻辑端口来处理。由于目前交换芯片中地址表内容的限制,不可能真正做到这一点。因此,首先必须在地址表项中增加相应的内容。本方案在交换芯片的地址表中增加端口捆绑有效位和捆绑端口组号,同时增加标志各端口属于哪个捆绑端口的寄存器。
具体步骤为:
1.地址学习和地址表的更新:数据包进入交换芯片时,芯片搜索地址表。当找不到与源地址匹配的记录时,相应增加一个地址表项。在地址表项添加时,首先查看捆绑端口寄存器。若捆绑端口寄存器表示该端口不属于任何捆绑端口,则增加表项时将该表项内容中端口捆绑有效位置为无效(″0″),同时将源端口号和源地址填入表项中;否则若输入数据包的端口属于某一个捆绑端口,则增加表项时将端口捆绑有效位置为有效(″1″),同时将捆绑端口组号、源端口号和源地址填入表项中。
2.转发:数据包进入交换芯片后,转发逻辑根据其目的地址查找地址表,获取该表项后进行转发的判断。若该表项中的端口捆绑有效标志位为″0″,则按照表项中的端口号将数据包转发到相应端口;否则若表项中捆绑端口有效标志位为″1″时,转发逻辑以捆绑端口寄存器内容作为转发依据,将数据包送到相应的逻辑端口。
3.逻辑端口分流:当输出为捆绑的逻辑端口时,由输出控制逻辑以轮转调度(ROUND-ROBIN)的方式轮询送到被捆绑各个端口的输出队列,按照先进先出(FIFO)的方式排队输出。当某个端口输出达到阈值时向ROUND-ROBIN控制模块发出阻塞(DISABLE)标志,则输出控制逻辑屏蔽该端口,将数据包发送到非堵塞的通道中去,充分地将流量动态均衡地分配到被捆绑的各个端口中。只有当捆绑端口中所有的通道都堵塞时才停止从内部缓存中提取数据包,从而达到最大程度利用捆绑端口的带宽。
通过上述一系列步骤和相应的交换芯片设计,即可完成基于流量动态负荷均衡的端口捆绑。
实施例:
参见附图进一步说明本发明的实施方式。(1)(2)是交换芯片,A、B、C、D、E、F、G、H是交换芯片(1)的端口,I、J、K、L、M、N、O、P是交换芯片(2)的端口。
图1显示了两个交换芯片的单端口对接:当一个交换芯片的端口数及总交换容量不能满足用户的需要时,需要将两片交换芯片进行对接。如该图,若一个交换芯片为8个100M以太网接口,通过两个芯片对接后可将端口扩展到14个100M以太网接口(A、B、C、E、F、G、H、I、J、K、M、N、O、P),实现更大的交换容量。但是,以这种方式进行对接两个交换芯片之间的带宽只有100M,当交换芯片(1)有多个端口要与交换芯片(2)的多个端口进行数据交换时,在对接的端口将经常出现拥塞(图1中D和L)。
图2显示了两个交换芯片端口捆绑后对接:用单个端口来进行对接时,由于带宽的问题,经常导致对接端口的拥塞,于是出现了端口捆绑技术。如图2,交换芯片(1)的端口C、D作为一个逻辑端口捆绑在一起,交换芯片(2)的端口K、L作为一个逻辑端口捆绑在一起。这样对接后两个交换芯片之间的带宽为200M,对接处的拥塞情况将大大减少。
图3显示了基于源端口分流的端口捆绑对接:交换芯片(1)的端口C、D作为一个逻辑端口捆绑在一起,交换芯片(2)的端口K、L作为一个逻辑端口捆绑在一起进行对接。当交换芯片(1)的端口有数据包发到交换芯片(2)时,A、B、H通过端口C来进行,E、F、G通过端口D来进行。同样当交换芯片(2)的端口有数据包发到交换芯片(1)时,I、J、P通过端口K来进行,M、N、O通过端口L来进行。即两芯片在互通时根据输入芯片的端口将数据流分别分配到两个端口。此种基于源端口的流量分配策略完成的是物理上固定的分配,在某些情况下将导致对接捆绑带宽不能充分的利用。例如当交换芯片(1)的A、B、H端口皆有大量的数据包要发到交换芯片(2)的端口,同时E、F\G端口无大量的数据包要发到交换芯片(2),此时将造成捆绑端口中C端口要承担大量的流量而造成端口的拥塞,而此时D端口却有大量的空闲带宽。基于IP地址或MAC地址分流同样也是对流量的在物理上进行了绑定分配,同样也存在这类问题。
图4显示了本方案基于流量动态负荷均衡的端口捆绑对接:如图,交换芯片(1)的端口C、D作为一个逻辑端口捆绑在一起,交换芯片(2)的端口K、L作为一个逻辑端口捆绑在一起进行对接。当交换芯片(1)的端口有数据包发到交换芯片(2)时,A、B、E、F、G、H的数据包首先进入同一个逻辑端口,然后再由该逻辑端口根据C、D端口的情况将流量均匀分配。同样当交换芯片(2)的端口有数据包发到交换芯片(1)时,I、J、M、N、O、P的数据包首先进入同一个逻辑端口,然后再由该逻辑端口根据K、L端口的情况将流量均匀分配。这样充分利用了捆绑后对接端口的总带宽,真正意义上将两个端口捆绑成为一个逻辑端口。
图5显示了交换芯片发往捆绑端口数据流示意图:(1)-(3)是交换芯片端口1、2、3的输出FIFO队列,(4)-(8)是交换芯片端口4、5、6、7、8的输入FIFO队列。A是内部缓存、地址表及相关控制逻辑,B是ROUND-ROBIN轮询输出控制逻辑。如图,交换芯片的端口1、2、3捆绑为一个端口。当交换芯片的端口4-8有数据包进入时,首先在功能块A处进行缓存,相关逻辑根据输入数据包的目的地址搜索匹配的地址表项记录。若数据包目的地为捆绑端口,则由输出控制逻辑B模块将数据包以ROUND-ROBIN的方式发送到端口1、2、3其中一个端口的输出FIFO队列中。端口1、2、3皆有一个FIFO的阈值指示信号,当FIFO填充达到阈值时,将相应标志位置为″1″,从而通知控制逻辑B。控制逻辑B则屏蔽掉该端口,将数据包发送到未达到阈值的端口输出队列中去。通过这种方式,可以适时观测捆绑端口的各端口情况,将流量合理地分配,实现流量动态负荷均衡的捆绑。
采用该方法我们可以设计一个带24个10/100Mbps和2个10/100/1000Mbps以太网端口的交换芯片。该芯片支持最多4个捆绑端口,其中每一个捆绑端口中只允许同类型端口进行捆绑,任一端口最多只能属于一个捆绑端口。针对现有的芯片增加如下功能块:
1.增加4组捆绑端口寄存器(Trunk group0/1/2/3)格式如下:(32位)
Valid |
30~26位保留 |
P25 |
P24 |
P23 |
…………… |
P4 |
P3 |
P2 |
P1 |
P0 |
Valid——指示该组端口捆绑是否有效;
26~30位——保留将来使用;
P0~P25——当该位为″1″时,说明所代表的端口属于这一捆绑端口;
为了实现方便指定Trunk_group0为10/100/1000Mbps端口的捆绑专用;
Trunk-group1/2/3为10/100Mbps端口捆绑用。
2.地址表项增加涉及捆绑端口的相应内容(与捆绑无关的内容没有列出):
Valid |
Trunk_valid |
Trunk_group |
Port number |
Mac address |
Valid——有效位,指示该表项是否有效;
Trunk-valid——指示该表项中捆绑端口信息是否有效;
Trunk-group——指示对应MAC地址的捆绑端口的组号(2位);
Port number——指示对应MAC地址的输出端口;
Mac address——48位MAC地址。
3.增加端口捆绑的流量动态分配逻辑:
1)地址学习和地址表的更新:当数据包进入交换芯片时,芯片搜索地址表。当找不到与源地址匹配的记录时,将增加该地址表项。在地址添加时,首先查询Trunk_group寄存器,看该输入端口是否属于其中一个捆绑端口。若输入数据包的端口不属于任何捆绑端口,则增加表项时表项内容Trunk_valid置为″0″,源端口号和源地址填入表项中,同时将Valid置为″1″;否则若输入数据包的端口属于某一个捆绑端口,则增加表项时,将表项中Trunk_valid置为″1″,同时将捆绑端口组号(Trunk_group)、源端口号(Port number)和源地址(源MAC地址)填入表项中。
2)转发:当数据包进入交换芯片后,转发逻辑根据其目的地址查找地址表,获取该表项后进行转发的判断。若该表项中的端口捆绑有效标志位Trunk_valid为″0″,则按照表项中的端口号将数据包转发到相应端口;否则若表项中端口捆绑有效标志位Trunk_valid为″1″时,转发逻辑将以捆绑端口内容作为转发依据。将数据包送到该TRUNK组号的逻辑端口。
3)逻辑端口分流:当输出为捆绑的逻辑端口时,皆送到该逻辑端口的输出控制逻辑。该控制逻辑以ROUND-ROBIN的方式轮询送到捆绑的各个端口的输出FIFO队列中排队输出。当某个端口由于对端流控导致输出FIFO队列达到阈值时向ROUND-ROBIN控制模块发出DISABLE标志,则ROUND-ROBIN输出控制逻辑在轮询时屏蔽该端口,将数据包发送到非堵塞的通道中去,充分将流量动态均衡地分配到捆绑的各个端口中。只有当捆绑端口的所有通道都堵塞时才停止从内部缓存中提取数据包,从而最大程度地利用捆绑端口的带宽。