之前的文章多交换芯片的RB设备VLAN配置实现硬件线速转发,说到关于RB2011和3011等设备有两个交换芯片,他们创建bridge涉及跨交换芯片问题,在两个交换芯片下也可以创建两个bridge但只能根据交换芯片对应的端口创建,不能跨交换芯片的端口。但大多数RB和CRS设备是单交换芯片,是无法支持多bridge的hw-offloading功能。

考虑以下情况,希望在RB或CRS设备建立两个或两个以上的Bridge,用于两个独立的二层广播域网络,在使用一台单交换芯片的RB或CRS设备时,启用hw-offloading,可能存在CPU过高的问题。这里说明下,Linux Bridge(网桥)是工作于二层的网络设备,功能等同于物理的交换机,可以参考下:交换机原理和RouterOS Bridge二层交换配置(视频)。

例如下面的配置创建了两个bridge(bridge1和bridge2):

/interface bridge
add name=bridge1
add name=bridge2

/interface bridge port
add bridge=bridge1 interface=ether1
add bridge=bridge1 interface=ether2
add bridge=bridge2 interface=ether3
add bridge=bridge2 interface=ether4

存在问题

经过运行测试后,可能会注意到bridge1能够以线速转发流量,而第二个Bridge2的转发性能就很差,而另外一个问题是路由转发时出现巨大的延迟,同时CPU处于高负载,这是因为hw-offloading不是在所有bridge上都能使用,只能在第一个Bridge上生效,通过在bridge port下查看,可以得知当前hw激活端口:

[admin@MikroTik] > /interface bridge port print
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
#     INTERFACE                  BRIDGE             HW

0   H ether1                     bridge1                yes
1   H ether2                     bridge1                yes
2     ether3                     bridge2                yes
3     ether4                     bridge2                yes

上面可以看到只有Bridge1有HW-offloading的标识“H“,而Bridge2只能由CPU处理

症状

这种情况的错误配置症状表现如下:

  • 在bridge port下无 “H” 标识
  • 转发吞吐量低
  • 高CPU利用率

解决方法

并不是所有的设备支持多Bridge,目前只有CRS1xx/CRS2xx系列设备同时支持7组hw-offloading的Bridge,其他设备仅支持1个的Bridge。对于多Bridge可以通过hw属性开关其他Bridge的hw-offloading,可以用hw=yes标志控制哪个网桥支持hw-offloading,例如:

/interface bridge port set [find where bridge=bridge1] hw=no
/interface bridge port set [find where bridge=bridge2] hw=yes

其实多Bridge方案设计是很特殊的情况,大多的网络解决方案都是在一个Bridge下完成,通过VLAN和端口隔离,将多个二层广播域划分开。华为和H3C交换机均是采用Linux内核,也是将所有端口划分在一个Bridge下,并封装在一个配置界面操作。而RouterOS提供了开放的配置,容易造成一些意外的操作,虽然有些功能可以实现,但会导致系统负载过高。

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章很值,打赏犒劳作者一下