スマートスイッチでリンク集約グループ(LAG)を設定すると、帯域幅のリンク集約(ボンディング)が機能しません。

スマートスイッチでリンク集約グループ(LAG)を設定すると、帯域幅のリンク集約(ボンディング)が機能しません。

私の質問は:スマートスイッチにリンク集約グループを設定すると、2つのシステム間の帯域幅が減少するのはなぜですか?

最後に、2つのボンディングされた10G CAT7ケーブルを介して接続されたTP-LINK T1700X-16TSスマートスイッチを介して、2台のシステム(ubuntu 18.04サーバーを実行しているサーバー)間でより高いスループット(帯域幅)を達成しました。このケーブルは、PCI-E x8に接続されている各システムの単一のIntel X550-T2 NIC(各カードに2つのRJ45ポート)に接続されています。

私が最初にしたことは、各コンピュータが接続されている2つのポートを含むスイッチ構成に静的LAGグループを作成することでした。これは結局私の最初の間違いでした。

各ボックスで、Intel X550-T2カードの2つのポートを含むボンドを作成します。私はnetplanとネットワーキングを使用しています。たとえば、

network:
 ethernets:
     ens11f0:
         dhcp4: no
         optional: true
     ens11f1:
         dhcp4: no
         optional: true
 bonds:
         bond0:
             mtu: 9000 #1500
             dhcp4: no
             interfaces: [ens11f0,ens11f1]
             addresses: [192.168.0.10/24]
             parameters:
                 mode: balance-rr
                 transmit-hash-policy: layer3+4 #REV: only good for xor ?
                 mii-monitor-interval: 1
                 packets-per-slave: 1

9000バイトのMTU(ジャンボパケット用)とBalance-rrに注意してください。

これらの設定では、iperf(iperf3)を使用してコンピュータ間の帯域幅をテストできるようになりました。

iperf3 -s (on machine1)

iperf3 -c machine1 (on machine2)

毎秒約9.9Gbitの速度を得ています(単一10G接続の理論上最大値に非常に近いです)。

しかし、何かが間違っています。私はラウンドロビンを使用しており、(理論的には)コンピュータ間に2本の10Gケーブルがあります。 20Gの帯域幅を得ることができますか?

間違っています。

奇妙なことに、次にスマートスイッチからLAGグループを削除しました。 Linux側にはボンディングされたインターフェイスがありますが、スイッチにはボンディングはありません(LAGなし)。

これで iperf3 を再実行します。

[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  1.77 GBytes  15.2 Gbits/sec  540    952 KBytes       
[  4]   1.00-2.00   sec  1.79 GBytes  15.4 Gbits/sec  758    865 KBytes       
[  4]   2.00-3.00   sec  1.84 GBytes  15.8 Gbits/sec  736    454 KBytes       
[  4]   3.00-4.00   sec  1.82 GBytes  15.7 Gbits/sec  782    507 KBytes       
[  4]   4.00-5.00   sec  1.82 GBytes  15.6 Gbits/sec  582   1.19 MBytes       
[  4]   5.00-6.00   sec  1.79 GBytes  15.4 Gbits/sec  773    708 KBytes       
[  4]   6.00-7.00   sec  1.84 GBytes  15.8 Gbits/sec  667   1.23 MBytes       
[  4]   7.00-8.00   sec  1.77 GBytes  15.2 Gbits/sec  563    585 KBytes       
[  4]   8.00-9.00   sec  1.75 GBytes  15.0 Gbits/sec  407    839 KBytes       
[  4]   9.00-10.00  sec  1.75 GBytes  15.0 Gbits/sec  438    786 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  17.9 GBytes  15.4 Gbits/sec  6246             sender
[  4]   0.00-10.00  sec  17.9 GBytes  15.4 Gbits/sec                  receiver

ハハ、今15.4Gbits / sec(時々16.0まで高い)を得ます。

再送信が心配になりましたが(LAGを設定したときに送信結果がまったく表示されませんでした)、今は少なくともある程度の利点があります。

ジャンボパケットを無効にするか、MTUを1500に設定すると、約4Gbps〜5Gbpsしか取得できません。

パフォーマンスを制限するのではなく、リンク集約グループがスマートスイッチに設定されている理由(これが役に立つと思います)を知っている人はいますか?一方、設定しないと(お金を節約し、管理されていないスイッチを購入することができたでしょう!)、より正確にルーティングされたパケットを送信できますか?

スイッチのLAGグループの意味は何ですか?私がどこかで何か間違っているのだろうか?可能であれば、帯域幅を16Gbps以上に増やしたいと思います。

編集する

以下の私のコメントをコピー(更新):

あるシステムのRAMディスクから別のシステムに60GBのファイルをコピーするために、nc(netcat)を使用してボンド接続を介して実際のアプリケーション速度が11Gbps(1.25GiB /秒)であることを確認しました。ハッシュを使用してファイルの整合性を確認しましたが、両方に同じファイルがあります。

一度に10Gポートの1つだけを使用したり、バランスのとれたXORなどのボンディングを使用すると、1.15GiB /秒(〜9.9Gbps)が得られます。 iperfとncはどちらもデフォルトでTCP接続を使用します。ループバックを介してローカルシステムにコピーするには1.5GiB /秒かかります。スイッチのポート使用量を見ると、発信者Tx側の使用量はほぼ同じであり(iperfの場合は70%、ncファイルコピーの場合は約55%)、ボンディングされた2つのポート間の使用量がわかります。受信側でも同じです。

したがって、現在の設定(balance-rr、MTU 9000、スイッチで定義されているLAGグループなし)では、10 Gbps以上を達成できますが、ようやく達成できます。

奇妙なことに、スイッチでLAGグループを定義すると、すべてが中断されます(iperfとファイル転送は0バイトを送信します)。新しいスイッチの状況を把握するのに時間がかかることがありますが、何度も再実行してスイッチを数回再起動/リセットしました。だからなぜそうなのかよく分からない。

編集2

実際、 kernel.org のドキュメントでは、単一ポートの帯域幅よりも高い帯域幅を可能にするストライピングと Balance-rr への言及が見つかりました。

https://www.kernel.org/doc/Documentation/networking/bonding.txt

具体的に

12.1.1 シングルスイッチトポロジのためのMTボンディングモードの選択

この構成では、ニーズに最適なバインディングモードを決定する必要がありますが、設定して理解するのが最も簡単です。各モードの長所と短所は次のとおりです。

Balance-rr:このモードは、単一のTCP / IP接続を介して複数のインターフェイスにトラフィックをストライプできる唯一のモードです。したがって、単一のTCP / IPフローが複数のインターフェイスのスループットを利用できるようにする唯一のモードです。しかし、これは費用がかかる。ストライピングにより、ピアシステムが順序に合わないパケットを受信し、TCP / IPの輻輳制御システムが機能します(通常はセグメントの再送信を介して)。

TCP / IPの輻輳制限は、net.ipv4.tcp_reordering sysctlパラメーターを変更することで調整できます。一般的なデフォルト値は 3 です。ただし、TCPスタックは、並べ替えを検出すると自動的にこの値を増やすことができることに注意してください。

順序なしで転送されるパケットの割合は非常に多様であり、ゼロになる可能性はありません。並べ替えレベルは、ネットワークインターフェイス、スイッチ、設定されたトポロジなど、さまざまな要因によって異なります。一般に、高速ネットワークカードは、パケットマージなどの要因によってより多くの並べ替えが発生し、「多対多」トポロジは「多対遅から1速」よりも高い速度で並べ替えられます。構成。

多くのスイッチはストライプトラフィックモードをサポートしていません(代わりにIPまたはMACレベルのアドレスに基づいてポートを選択します)。これらのデバイスの場合、スイッチを介してBalance-rrによってバインドされた特定の接続に流れるトラフィックは、複数のインターフェイス帯域幅を使用しません。

TCP / IP、UDPなどのプロトコルを使用してアプリケーションが誤った転送を許可できる場合、このモードを使用すると、インターフェイスがバインディングに追加されるにつれて、単一ストリームデータグラムのパフォーマンスがほぼ線形に拡張される可能性があります。

このモードでは、スイッチは適切なポートを「etherchannel」または「trunking」として設定する必要があります。

したがって、理論的にはBalance-rr〜する単一のTCP接続に対してパケットをストライプできます。しかし、順番に到着しないことがあります。

しかし、ほとんどのスイッチはストライピングをサポートしていないと言われています。私のスイッチもそうです。実際のファイル転送中にトラフィックを観察すると、Rxパケット(送信システム - >スイッチなど)がボンディングされた2つのポートに均等に分散されます。ただし、Txパケット(スイッチ - >受信システム)は、ポートの1つを介してのみ送信されます(飽和度が90%以上に達する)。

スイッチでリンク集約グループを明示的に設定しないことでより高いスループットを達成できましたが、受信側コンピュータがスイッチに1つのポートを送信してから別のポートに送信するように指示する方法がわかりません。

結論として:

スイッチリンク集約グループは、パケット転送ラウンドロビン(つまりポートストライピング)をサポートしません。したがって、これを無視すると高いスループットが得られますが、物理メモリ(RAMディスク)への書き込みは、メモリ、CPU処理、またはパケットの並べ替え飽和点に達するようです。

sysctlの増減の並べ替えとTCPメモリバッファの読み書きを試してみましたが、パフォーマンスに変化はありませんでした。例えば

sudo sysctl -w net.ipv4.tcp_reordering=50
sudo sysctl -w net.ipv4.tcp_max_reordering=1000

sudo sysctl -w net.core.rmem_default=800000000
sudo sysctl -w net.core.wmem_default=800000000
sudo sysctl -w net.core.rmem_max=800000000
sudo sysctl -w net.core.wmem_max=800000000

sudo sysctl -w net.ipv4.tcp_rmem=800000000
sudo sysctl -w net.ipv4.tcp_wmem=800000000

私が気づいた唯一のパフォーマンスの変化は
1)より強力なプロセッサ(少し高いシングルコアクロック、L3キャッシュは気にしない)
2)より高速なメモリを備えたシステム間でした。 (またはより少ない数のDIMMを使用して同じ量のメモリ)

これは、バス、CPU、またはメモリの読み取り/書き込み操作を実行していることを意味するようです。 RAMディスク上のローカルで簡単な「コピー」(例:dd if = file1 of = file2 bs = 1M)は、2.6Ghzで約2.3GiB /秒、2.4Ghzで2.2GiB /秒、2.0GiB /秒の速度の最高速度を達成します。 2.2GHz。 2番目のものもメモリが遅いですが、それは重要ではないようです。

すべてのTCPコピーは、低速マシンから2.6GhzのRAMディスクまで1.15GiB / s、2.4Ghzから1.30GiB / s、最速マシンからミドルマシン、より遅いマシン(より高速のメモリを含む)まで1.02GiB / sでした。 1.03 GiB/秒など

最大の影響は、受信側のシングルコアCPUとメモリクロックにあるようです。 BIOS設定を比較しませんでしたが、どちらも同じBIOSバージョンを実行し、同じマザーボード、ethカードなどを使用します。 CAT7ケーブルやスイッチポートを再配置してもあまり効果がないようです。

私が見つけた

http://louwrentius.com/achieving-340-mbs-network-file-transfers-using-linux-bonding.html

4つの1GbE接続でこれを行う人は誰ですか?別のVLANを設定しようとしましたが、機能しませんでした(速度の増加なし)。

最後に、同じ方法を使用して独自に送信すると、0.3GiB - 0.45GiB /秒のペナルティが発生するようです。だから私が観察した値はそれこの方法の「理論的」最大値よりはるかに低いです。

編集3 (子孫のためのより多くの情報を追加します)

スイッチに Balance-rr と LAG が設定されていても 9.9 Gbps が表示されているにもかかわらず、Balance-rr の再試行回数が LAG がない場合よりも実際に高いことがわかりました!グループがある場合の平均回数は1秒あたり2500回、グループがない場合の平均回数は1秒あたり1000回です!

しかし、グループ設定後、実際のメモリ間の平均ファイル転送速度は1.15GiB/s(9.9Gbps)となった。マシンごとに1つのポートのみを接続すると、速度は同じで(1.15GiB / s)、再試行回数はほとんどありません。モードをバランスXORに切り替えると、1.15GiB/s(9.9Gbps)が得られ、再送信はありません。したがって、Balance-rr モードでは出力の片側を切り替えるためにストライプを試みます。

スイッチLAGとバランスのとれたXORを使用しているため、メモリ間転送の最大(実際の)性能は同等または高く、再送信(輻輳)が少ないため、これを使用しています。ただし、最終目標はNFSとMPIの転送であるため、この場合はネットワーク速度を飽和させ測定する方法を見つける必要があり、これはMPI接続の実装方法によって異なります。

最終編集

XORは常に同じ2つのピアに対して同じポートにハッシュするため(スイッチ側にLAGを設定せずに)Balance-rrを再利用しました。したがって、ポートの1つだけを使用します。 Balance-rrを使用して2つ以上の(RAMからRAMへ)ファイル転送を同時に実行すると、理論的な最大値である20Gbpsに非常に近い18-19Gbpsの正味速度を得ることができます。

最終最終編集(数ヶ月使用後)

エラーが発生してシステムにSSHを接続できなくなったため、スイッチにLAGグループを設定する必要がありました。パケットがいくつかのアドレッシングコンテンツと一緒に行くべき場所で歪んでいたためです。今は接続あたり最大10GBPSしか得られませんが、安定しています。

ベストアンサー1

私はあなたの考えを明確にするいくつかのポイントがあなたのテキストにあると思います。

  • とても思わず普通のフレームとジャンボフレームを行き来して言われた事実が心配です。同じネットワーク/ネットワークブロックでジャンボフレームと通常のフレームを混在させることはできません。ネットワーク全体がジャンボフレームまたは通常のフレームを送信します。みんなこのネットワークのインターフェース。
  • 集約リンクがある場合は、スイッチ側とシステム側の両方に配置する必要があります。幸いなことに、スイッチがループを検出し、他の不快なことが発生する可能性があります。リンクの 1 つだけを無効にします。
  • 速度が必要な場合は、ロードバランシングではなくリンク統合が必要です。
  • 単一のUDP(主にTCP)接続は、特定のしきい値に達した後は大幅に拡張されず、複数の同時接続をテストする必要があります。iperfこうしてください。
  • この速度では、2つのリンクと1つのリンクでリンク集約、特に割り込み処理を処理するときに他の制限要因が発生する可能性があります。

スイッチに関しては、私はTP-LINKについてよく知らないので、ここでスイッチのトピックを入力することはトピックから逸​​脱しました。私はこの考えをあなたに残したいと思います。専門的に働く場合は、より難解な機能のためにより多くのハイエンドデバイスを使用するか、高性能ネットワークを介してより良い結果を得ることをお勧めします。

関連ビューサーバーがジャンボフレーム(MTU)を使用する必要があるかどうかを確認する方法そして関連VMシステムでジャンボフレーム(MTU = 9000)を設定できますか?

同じVLAN/インターフェイスグループで9000と1500を混在させる場合:

サーバーが指定された構成で1500バイトを超えるパケットをクライアントに送信すると、断片化とは異なり、パケットは処理なしで破棄されます。

~からサーバー障害

これを行うときは、NICが別のネットワークブロックに存在することを確認してください。 Linuxを使用している場合、パケットはネットワークブロック内のシステムの最初のNICを介してルーティングされるため、eth1のMTUが9000であっても、そのパケットはeth0を介してルーティングできます。

ストレージネットワークに別々のVLANが設定されており、この動作を防ぐには、eth1に別々のネットワークブロックを設定する必要があります。 MTUを9000に増やすと、この特定のシステムはかなり大きなファイルのストリーミングを処理するため、スループットを簡単に向上できます。

おすすめ記事