单交换芯片RB和CRS的多Bridge配置问题
之前的文章多交换芯片的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提供了开放的配置,容易造成一些意外的操作,虽然有些功能可以实现,但会导致系统负载过高。