FreeBSD链接聚合不会比单个链接快

我们把一个4端口的Intel I340-T4网卡放在FreeBSD 9.3服务器1上,并将其configuration为在LACP模式下进行链路聚合 ,试图减less从主文件服务器镜像8到16个TiB数据到2-平行4个克隆。 我们期望达到4 Gbit / sec的总带宽,但无论我们尝试了什么,它的速度都不会超过1 Gbit / sec的速度。 2

我们使用iperf3在静态LAN上testing。 3一如预期,第一例接近千兆位,但当我们开始第二个并行时,两个客户端的速度下降到大约1/2 Gbit / sec。 添加第三个客户端将所有三个客户端的速度降到〜⅓ 千兆位/秒等等。

我们已经iperf3设置了iperf3testing,来自所有四个testing客户端的stream量进入不同端口的中央交换机:

LACP测试设置

我们已经validation了每个testing机器都有一个独立的path返回到机架式交换机,文件服务器,它的NIC和交换机都有带宽来分离lagg0组并分配一个单独的IP地址此英特尔网卡上的四个接口中的每一个。 在这种configuration下,我们确实达到了〜4 Gbit / sec的总带宽。

当我们开始走这条道路时,我们正在用旧的SMC8024L2pipe理型交换机来做这件事 。 (PDF数据表,1.3 MB)。它不是当天最高端的交换机,但它应该能够做到这一点。 我们认为,由于年龄的原因,开关可能会出现故障,但升级到function更强大的HP 2530-24G并没有改变症状。

HP 2530-24G交换机声称有问题的四个端口确实configuration为dynamicLACP中继:

 # show trunks Load Balancing Method: L3-based (default) Port | Name Type | Group Type ---- + -------------------------------- --------- + ----- -------- 1 | Bart trunk 1 100/1000T | Dyn1 LACP 3 | Bart trunk 2 100/1000T | Dyn1 LACP 5 | Bart trunk 3 100/1000T | Dyn1 LACP 7 | Bart trunk 4 100/1000T | Dyn1 LACP 

我们尝试了被动和主动LACP。

我们已经validation了所有四个NIC端口都在FreeBSD端获得stream量:

 $ sudo tshark -n -i igb$n 

奇怪的是, tshark表明,在只有一个客户端的情况下,交换机将1 Gbit / sec的数据stream分成两个端口,显然是在两者之间进行乒乓。 (SMC和HP交换机均显示此行为。)

由于客户端的总带宽只集中在一个地方 – 在服务器机架的交换机上 – 只有该交换机configuration为LACP。

我们先从哪个客户端开始,或者从哪个客户端开始,并不重要。

在FreeBSD上ifconfig lagg0说:

 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=401bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO> ether 90:e2:ba:7b:0b:38 inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::92e2:baff:fe7b:b38%lagg0 prefixlen 64 scopeid 0xa nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect status: active laggproto lacp lagghash l2,l3,l4 laggport: igb3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: igb2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: igb1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: igb0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> 

我们已经在FreeBSDnetworking调优指南中尽可能多地应用了我们的情况。 (其中大部分是无关的,比如增加最大FD的东西)。

我们尝试closuresTCP分段卸载 ,结果没有任何变化。

我们没有第二个4端口服务器网卡来build立第二个testing。 由于4个独立接口的成功testing,我们假设没有硬件损坏。 3

我们看到这些道路前进,没有一个吸引人:

  1. 买一个更大,更坏的交换机,希望SMC的LACP实现只是吮吸,而新的交换机会更好。 (升级到HP 2530-24G没有帮助。)

  2. 盯着FreeBSD的laggconfiguration,希望我们错过了一些东西。 4

  3. 忘记链路聚合,并使用循环DNS来实现负载平衡。

  4. 更换服务器网卡并重新切换,这次是10 GigE的东西,这个LACP实验的硬件成本约为4倍。


脚注

  1. 为什么不移动到FreeBSD 10,你问? 因为FreeBSD 10.0-RELEASE仍然使用ZFS池版本28,而且这个服务器已经升级到FreeBSD 9.3的一个新特性ZFS pool 5000。 直到FreeBSD 10.1发布大约一个月之后 ,这个10.x行才会出现。 不,从源代码重build到10.0-STABLE出血边缘不是一个select,因为这是一个生产服务器。

  2. 请不要妄下结论。 我们在问题后面的testing结果告诉你为什么这不是这个问题的重复。

  3. iperf3是一个纯粹的networkingtesting。 虽然最终的目标是尝试从磁盘中填充4 Gbit / sec聚合pipe道,但是我们还没有涉及到磁盘子系统。

  4. Buggy或devise不好,也许,但不会比离开工厂时更坏。

  5. 我已经这样做了。

系统和交换机上使用的负载均衡algorithm是什么?

我所有的经验都在Linux和思科上,而不是FreeBSD和SMC,但是同样的理论依然适用。

Linux绑定驱动程序的LACP模式和旧版Cisco交换机(如2950)上的默认负载均衡模式仅基于MAC地址进行平衡。

这意味着,如果所有stream量都从一个系统(文件服务器)到另一个MAC(交换机上的默认网关或交换虚拟接口),则源MAC和目标MAC将相同,因此只有一个从属使用。

从你的图表看起来你并不像是向一个默认网关发送stream量,但我不确定testing服务器是否在10.0.0.0/24,或者如果testing系统在其他子网中,并且通过路由交换机上的三层接口。

如果你在交换机上路由,那么你的答案是。

解决scheme是使用不同的负载平衡algorithm。

我再次没有使用BSD或SMC的经验,但是Linux和思科可以根据L3信息(IP地址)或L4信息(端口号)进行平衡。

由于每个testing系统都必须具有不同的IP,请尝试基于L3信息进行平衡。 如果仍然不起作用,请更改几个IP,然后查看是否更改了负载平衡模式。