web-dev-qa-db-ja.com

2つの1Gbpsアダプターを介してボンディングを使用するときにiperfが1Gbpsパフォーマンスを報告するのはなぜですか?

私が理解しているように、ボンディングには、LAN内の2台のマシン間のネットワーク速度を向上させることができるという利点があります。

結合[...]は、複数のネットワークインターフェイス(NIC)を単一のリンクに結合し、高可用性、負荷分散、最大スループット、またはこれらの組み合わせ。

出典: buntuのドキュメント 、私のものを強調

2つのサーバーでボンディングを構成しています。両方に2つの1GbpsがあるNICアダプター。これらのサーバー間の速度をテストするとき iperfを使用 、レポートは次のように示します。

  • balance-rrボンディングモードを使用する場合は、930〜945 Mbits/sec。
  • 802.3adを使用する場合、マシンAからBへの520〜530メガビット/秒
  • 802.3adを使用する場合、マシンBからAへの930〜945 Mビット/秒。

興味深いのは、802.3adを使用する場合、ifconfigは、実質的にすべてのRXeth0(2.5 GB対数KB/MB)およびすべてのTX on eth1 on machine A、およびその逆がmachineB。

複数の接続(iperf -c 192.168.1.2 -P 10)を使用するようにiperfに要求すると、取得された合計は、単一の接続を使用した場合に表示される結果に非常に近くなります。

2つのマシンが、LACPが適切に構成されている(私はそう思います)Netgear GS728TSに接続されており、2つのLAGがそれぞれ2つのポートをカバーしています。 IEEE 802.3xモードが有効になっています。

iperfはこの種のテストに適していますか?はいの場合、何か不足していますか?

7

Netgearサポートに連絡した後、次のように思われます。

2つのステーション(1つのクライアント/ 1つのサーバー)を使用する場合、実際には1つのリンク(つまり1Gbps/940mbps)のみを使用し、使用されるリンクはLACPハッシュアルゴリズムによって決定されます。

1Gbpsの制限を超えるには、複数のクライアントでテストする必要があります。

出典:Netgearサポートチケットの応答

同じチケット応答 Netgearの公開フォーラム投稿へのリンク 、ここでそれを読むことができます:

LACPハッシュアルゴリズムが複数のトラフィックストリームを異なるパスに配置する場合にのみ2Gbpsの集約を取得できますが、常にそうであるとは限りません。クライアントの数が少ない場合(この場合は2つ)、両方が同じリンクにハッシュされる可能性が高いです。

フォーラムの議論全体を読みたくない人のために、ここに重要なポイントがあります:

  • LACPを利用するには、サーバーに接続するクライアントが2つ以上必要です。単一のクライアントは1つのリンクのみを使用するため、その速度は1 Gbpsに制限されます。

  • LACPを活用するには、2つのクライアントが異なるリンクを使用している必要があります。

  • サーバーにネットワークアダプターが2つしかない場合、50%の確率で2つのクライアントから同じリンクが取得され、その結果、合計速度は1 Gbpsに制限されます。 3つのネットワークアダプターは、確率を33%、4〜25%に減らします。

結論として、Netgear GS728TSを使用して2つのマシン間で1.4〜1.8 Gbpsの速度を得る方法はありません。

3

結合されたインターフェイスは、個々のネットワークフローに追加の帯域幅を付与しません。したがって、iperfのコピーを1つだけ実行している場合は、一度に1つのネットワークインターフェイスしか使用できません。 2つのNIC= in a laggがある場合、コンピューターで実行されているiperfの少なくとも2つの完全に独立したコピーが、同時使用率を確認するために必要になります。これは、実際の負荷にも適用されます。例: Sambaクライアントは1Gbのスループットしか表示しませんが、ラグに2つのNICがある場合、2つのクライアントはそれぞれ1Gbを表示できます。これはすべて、両方のNICを使用するようにラグが構成されていることを前提としています(802.3adオプションはこれを行います)。

4
Chris S

このQ&AはLACPとの結合を理解するのに非常に役立ちましたが、約1.8Gb/sのスループットを確認する具体的な例はありません。私にとってこれを検証することが重要でしたので、私がそれをテストした方法を共有します。

@ ChrisSが彼の回答で述べたように、iperfの完全に独立したコピーを実行することが重要です。これを実現するには、2つのクライアントを使用してlacp-serverに接続します。 lacp-serverでは、2つの画面ウィンドウ/セッションでiperfの独立したインスタンスを実行するためにscreenを使用しています。また、接続ごとに異なるポートを使用することで、独立したデータストリームを確保しています。 LACPをサーバーに結合するスイッチは、TP-LINK T1600G-52TSです。すべてのデバイスでDebian 10(Buster)を使用します。 2つのテストクライアントは、スイッチのポートに接続されています。最初にscreen内でlacp-serverでiperfをサーバーモードで2回起動し、次にクライアントで実行しました同時に(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

2番目の接続の場合:

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は彼の答えに言及しました:

サーバーにネットワークアダプターが2つしかない場合、50%の確率で2つのクライアントから同じリンクが取得され、その結果、合計速度は1 Gbpsに制限されます。 3つのネットワークアダプターは、確率を33%、4〜25%に減らします。

これを確認するためにテストを10回以上繰り返しましたが、常に約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

3つのテストクライアントを使用すると、次の結果が得られます。

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


参照:
リンク集約とLACPの基本
LACPボンディングとLinux構成
LinuxイーサネットボンディングドライバーHOWTO
RedHat-チャネルボンディングの使用

1
Ingo