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


10

我们在FreeBSD 9.3服务器1中放置了4端口Intel I340-T4 NIC,并将其配置为在LACP模式下进行链路聚合,以尝试将从主文件服务器将8到16 TiB数据镜像到2所需的时间减少。并行4个克隆。我们原本希望达到4 Gbit / sec的总带宽,但是无论我们尝试什么,它的出现速度都不会比1 Gbit / sec的总带宽快。2

我们正在iperf3用来在静态LAN上进行测试。3第一个实例几乎达到了预期的千兆位,但是当我们并行启动第二个实例时,两个客户端的速度下降到大约½Gbit / sec。添加第三个客户端会将所有三个客户端的速度降低到〜⅓Gbit / sec,依此类推。

我们在设置iperf3测试时非常小心,所有四个测试客户端的流量都会进入不同端口上的中央交换机:

LACP测试设置

我们已经验证了每台测试计算机都有一条返回机架交换机的独立路径,并且文件服务器,其NIC和交换机都具有通过拆分lagg0组并为每台计算机分配单独的IP地址来实现此目的的带宽。英特尔网卡上的四个接口中的一个。在这种配置下,我们确实实现了〜4 Gbit / sec的总带宽。

当我们沿着这条路走时,我们是使用旧的SMC8024L2网管型交换机执行此操作的。(PDF数据表,1.3 MB。)这不是当时最高端的交换机,但是应该可以做到这一点。我们认为该交换机可能由于年代久远而出现故障,但是升级到功能更强大的HP 2530-24G并没有改变症状。

HP 2530-24G交换机声称确实将四个端口配置为动态LACP中继:

# 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。

我们已经验证了所有四个NIC端口都通过以下方式在FreeBSD端获得了流量:

$ sudo tshark -n -i igb$n

奇怪的是,tshark表明在只有一个客户端的情况下,交换机会在两个端口上拆分1 Gbit / sec的流,显然在它们之间进行ping-poning。(SMC和HP开关均显示此行为。)

由于客户端的总带宽仅集中在一个地方(在服务器机架中的交换机处),因此仅将该交换机配置为用于LACP。

我们首先启动哪个客户端,或者启动它们的顺序都没有关系。

ifconfig lagg0 在FreeBSD方面说:

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>

我们已经在FreeBSD网络调整指南中应用了尽可能多的建议,适应我们的情况。(其中很多都是不相关的,例如关于增加最大FD的内容。)

我们尝试关闭TCP分段卸载,但结果没有变化。

我们没有第二个4端口服务器NIC来设置第二个测试。由于成功通过4个单独的接口进行了测试,因此我们假设硬件没有损坏。3

我们看到了这些前进的道路,但没有一条具有吸引力:

  1. 购买更大,更差的交换机,希望SMC的LACP实施会失败,并且新交换机会更好。(升级到HP 2530-24G没有帮助。)

  2. 凝视FreeBSD的lagg配置,希望我们错过了一些东西。4

  3. 无需进行链路聚合,而使用轮询DNS来实现负载平衡。

  4. 更换服务器NIC并再次切换,这次用10 GigE的东西,大约是此LACP实验的硬件成本的4倍。


脚注

  1. 你问为什么不转向FreeBSD 10?因为FreeBSD 10.0-RELEASE仍然使用ZFS池版本28,并且该服务器已升级到ZFS池5000,这是FreeBSD 9.3的新功能。直到FreeBSD 10.1发行大约一个月后,10. x发行版才能实现。不,从源代码重建到10.0-STABLE的最新优势不是一个选择,因为这是生产服务器。

  2. 请不要下结论。问题后面的测试结果将告诉您为什么这不是该问题的重复项。

  3. iperf3是纯网络测试。尽管最终目标是尝试从磁盘填充4 Gbit / sec的聚合管道,但我们尚未涉及磁盘子系统。

  4. 也许是越野车或设计不佳的,但没有比离开工厂时破碎的多了。

  5. 我已经从那做起了。


1
我最初的猜测可能是与所使用的哈希算法有关,但需要仔细检查数据包。如果那没有帮助,请尝试将iperf使用的TCP窗口更改为更大的窗口。lagg(4)手册页包含有关禁用哈希卸载的某些信息,您可能需要尝试一下。
乔瓦尼·蒂罗尼

Answers:


2

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

我所有的经验都是在Linux和Cisco上,而不是FreeBSD和SMC上,但是相同的理论仍然适用。

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

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

从您的关系图中看,您好像并没有向默认网关发送流量,但是我不确定测试服务器是否在10.0.0.0/24中,或者测试系统是否在其他子网中并通过交换机上的第3层接口。

如果您要在交换机上进行路由,那将是您的答案。

解决方案是使用其他负载平衡算法。

同样,我没有BSD或SMC的经验,但是Linux和Cisco可以基于L3信息(IP地址)或L4信息(端口号)进行平衡。

由于每个测试系统必须具有不同的IP,因此请尝试根据L3信息进行平衡。如果仍然无法解决问题,请更改一些IP地址,然后查看是否更改了负载平衡模式。


谢谢,但您的猜测不正确。上面显示的HP交换机配置表示它正在执行L3平衡。同样,这些也不是L3“交换机”,也就是路由器。他们只有足够的L3智能设备来执行IGMP侦听和LACP。建筑物中唯一真正的路由器是Internet网关中的路由器,从上面的测试图的角度来看,它是旁通的。
沃伦·杨

这是L2还是L3交换机都没关系,这是绑定用于负载均衡的配置,这是另一回事。交换机本身可能不具备在VLAN之间进行路由或控制L2以外的流量的能力,但是绑定的负载平衡算法(可能)可以。
suprjami 2014年

我看到您的开关上方说Load Balancing Method: L3-based (default)。尝试更改此设置。
suprjami 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.