为什么使用两个 1Gbps 适配器绑定时 iperf 仍报告 1Gbps 性能?

为什么使用两个 1Gbps 适配器绑定时 iperf 仍报告 1Gbps 性能?

据我了解,绑定除其他好处外,还能够提高局域网中两台机器之间的网络速度。

绑定 [...] 意味着将多个网络接口 (NIC) 组合到一条链路,以提供高可用性、负载平衡、最大吞吐量,或者这些的组合。

来源:Ubuntu 文档,强调一下。

我在两台服务器上配置了绑定;两台服务器都有两个 1Gbps NIC 适配器。在测试这些服务器之间的速度时使用iperf,报告指出:

  • balance-rr使用绑定模式时为 930 到 945 Mbits/sec 。
  • 使用时从机器 A 到 B 的速率为 520 到 530 Mbits/秒802.3ad
  • 使用时从机器 B 到 A 的速度为 930 到 945 Mbits/秒802.3ad

有趣的是,当使用时802.3adifconfig表示实际上所有RX都处于开启状态eth0(2.5 GB 对几 KB/MB)且机器 A 上的所有都处于开启TX状态eth1,而机器 B 上则相反。

当要求iperf使用多个连接(iperf -c 192.168.1.2 -P 10)时,得到的总和与使用单个连接时显示的结果非常接近。

两台机器连接到 Netgear GS728TS,该设备已正确配置 LACP(我希望如此),两个 LAG 分别覆盖两个端口。已启用 IEEE 802.3x 模式。

适合iperf这种测试吗?如果是,我是否遗漏了什么?

答案1

绑定接口不会为单个网络流授予额外带宽。因此,如果您只运行一份 iperf,那么您一次只能使用一个网络接口。如果您的 lagg 中有两个 NIC,那么您至少需要在计算机上运行两个完全独立的 iperf 副本才能看到任何同时利用率。这也适用于实际负载 - 例如,Samba 客户端仍然只能看到 1Gb 吞吐量,但如果您的 lagg 有两个 NIC,则两个客户端可以分别看到 1Gb。这一切都假设您已将 lagg 配置为使用两个 NIC(802.3ad 选项将执行此操作)。

答案2

与 Netgear 支持人员联系后,发现:

如果您使用 2 个站(1 个客户端/1 个服务器),它实际上将只使用一个链路(因此为 1Gbps/940mbps),使用的链路由 LACP 哈希算法决定。

要超过 1Gbps 的限制,您需要使用 1 个以上的客户端进行测试。

来源:Netgear 支持票回复

同一条票的回复链接至 Netgear 的公共论坛帖子,我们可以读到:

只有当 LACP 哈希算法将多个流量流放到不同的路径时,您才能获得 2Gbps 的聚合,但情况并非总是如此。如果客户端数量较少(您的情况是 2 个),则很有可能它们都散列到同一链路。

对于那些不想阅读整个论坛讨论的人,以下是要点:

  • 至少应有两个客户端连接到服务器才能从 LACP 中受益。单个客户端将仅使用一条链路,这会将其速度限制为 1 Gbps。

  • 两个客户端应该使用不同的链路才能从 LACP 中受益。

  • 如果服务器上只有两个网络适配器,则从两个客户端获得相同链接的几率为 50%,这将导致总速度限制在 1 Gbps。如果有三个网络适配器,几率将降低到 33%,如果是四个,几率将降低到 25%。

总而言之,Netgear GS728TS 无法在两台机器之间实现 1.4 到 1.8 Gbps 的速度。

答案3

这个问答对我理解 LACP 绑定非常有帮助,但没有具体的例子来验证大约 1.8Gb/s 的吞吐量。对我来说,验证这一点很重要,所以我将分享我如何测试它。

作为@克里斯他在回答中指出,运行完全独立的 iperf 副本非常重要。为了实现这一点,我使用两个客户端连接到 lacp-server。在 lacp-server 上,我使用屏幕在两个屏幕窗口/会话中运行独立的 iperf 实例。我还通过为每个连接使用不同的端口来确保有独立的数据流。我的与服务器绑定 LACP 的交换机是 TP-LINK T1600G-52TS。所有设备都使用Debian 10(Buster)。两个测试客户端连接到交换机的一个端口。首先,我在 lacp-server 上以服务器模式启动 iperf 两次屏幕然后在客户端执行同时(使用 ssh):

iperf --time 30 --port 5001 --client lacp-server   # first test client
iperf --time 30 --port 5002 --client lacp-server   # second test client

以下是 lacp-server 上第一次连接的结果:

lacp-server ~$ iperf -s -p 5001
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.10.11 port 5001 connected with 192.168.10.69 port 44120
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-30.0 sec  2.99 GBytes   855 Mbits/sec

对于第二个连接:

lacp-server ~$ iperf -s -p 5002
------------------------------------------------------------
Server listening on TCP port 5002
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.10.11 port 5002 connected with 192.168.10.80 port 48930
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-30.0 sec  3.17 GBytes   906 Mbits/sec

合计带宽为 855Mb/s + 906Mb/s = 1.761Mb/s。

@ArseniMourzenko他在回答中指出:

如果服务器上只有两个网络适配器,则从两个客户端获得相同链接的几率为 50%,这将导致总速度限制在 1 Gbps。如果有三个网络适配器,几率将降低到 33%,如果是四个,几率将降低到 25%。

我已经重复测试十多次来验证这一点,但总是得到大约 1.8Gb/s 的带宽,所以我无法确认这一点。

接口统计显示其使用情况比较均衡:

lacp-server ~$ ip -statistics link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    3088       30       0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    3088       30       0       0       0       0
2: eno1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
    link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    39231276928 25845127 0       0       0       916
    TX: bytes  packets  errors  dropped carrier collsns
    235146272  3359187  0       0       0       0
3: eno2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000
    link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    36959564721 24351697 0       0       0       60
    TX: bytes  packets  errors  dropped carrier collsns
    267208437  3816988  0       0       0       0
4: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 5e:fb:29:44:e9:cd brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    69334437898 50196824 0       4253    0       976
    TX: bytes  packets  errors  dropped carrier collsns
    502354709  7176175  0       0       0       0

通过三个测试客户端我得到了以下结果:

  • 522 Mb/s + 867 Mb/s + 486 Mb/s = 1.875 Mb/s
  • 541 Mb/s + 863 Mb/s + 571 Mb/s = 1.975 Mb/s
  • 534 Mb/s + 858 Mb/s + 447 Mb/s = 1.839 Mb/s
  • 443 Mb/s + 807 Mb/s + 606 Mb/s = 1.856 Mb/s
  • 483 Mb/s + 805 Mb/s + 512 Mb/s = 1.800 Mb/s


参考:
链路聚合和 LACP 基础知识
LACP 绑定和 Linux 配置
Linux 以太网绑定驱动程序指南
RedHat - 使用通道绑定

相关内容