web-dev-qa-db-ja.com

リンク集約(LACP / 802.3ad)の最大スループット

Linuxでのボンディングされたインターフェースに関して混乱する動作が見られます。誰かが私のためにそれを片付けてくれることを期待して、状況をそこに捨てたいと思います。

サーバーが2台あります。サーバー1(S1)には4つの1ギガビットイーサネット接続があります。サーバー2(S2)には、2つの1ギガビットイーサネット接続があります。カーネル3.11.0-15(lts-saucy linux-genericパッケージから)を使用していますが、どちらのサーバーもUbuntu 12.04を実行しています。

両方のサーバーには、それぞれのネットワークインターフェイスがすべて、次の構成(/etc/network/interfaces):

bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]

サーバー間には、問題のポートでLACP用に正しく構成されている(私が思うに)いくつかのHPスイッチがあります。

これでリンクが機能します。ネットワークトラフィックは両方のマシンとの間でスムーズに送受信されます。そして、それぞれのインターフェースがすべて使用されているため、集約が完全に失敗しているわけではありません。ただし、これらの2つのサーバー間で可能な限り多くの帯域幅が必要であり、期待どおりの2Gビット/秒を取得できません。

私のテストでは、各サーバーが各TCP接続(たとえば、iperf、scp、nfsなど))を単一のスレーブインターフェースに割り当てているように見えることがわかります。基本的に、すべてが最大1ギガビット。

設定することにより bond-xmit-hash-policy layer3+4、 私は使えます iperf -c S1 -P2 2つのスレーブインターフェイスで送信しますが、サーバー側では、受信はまだ1つのスレーブインターフェイスでのみ発生しているため、合計スループットは1ギガビット/秒に制限されます。つまり、クライアントは2つのスレーブインターフェイスで〜40-50MB /秒を示します。 、サーバーは1つのスレーブインターフェースで〜100MB/sを示しています。設定なしbond-xmit-hash-policy送信も1つのスレーブインターフェイスに制限されます。

LACPはこの種の接続バンドリングを許可し、たとえば、単一のscp転送が2つのホスト間で利用可能なすべてのインターフェースを利用できるようにするべきだという印象を受けました。

LACPについての私の理解は間違っていますか?または、どこかにいくつかの設定オプションを見逃しましたか?調査のための提案や手がかりは大歓迎です!

10
Zetten

LACPを使用した1行の通信では、パケットが複数のインターフェイスに分割されないということは、簡単でわかりにくい説明です。たとえば、単一のTCP接続ストリーミングパケットがHostAからHostBにある場合、それらのパケットを送信するためにインターフェースをスパンすることはありません。私はここLACPで多くのソリューションを探しています。 LACPで複数のネットワークインターフェイスを「結合」または「トランキング」すると、結合されたインターフェイスの「スループット」が得られるという一般的な誤解があります。一部のベンダーは、複数のインターフェイスを介してルーティングする独自のドライバーを作成していますが、LACP標準では私が読んだものからではなく、同様の問題を検索しているときにHPから見つけた適切な図と説明へのリンクは次のとおりです: http://www.hp.com/rnd/library/pdf/59692372.pdf

18
Mike Naylor

bond-xmit-hash-policy layer3+4は、ソースサーバーからスイッチへの負荷分散を設定します。スイッチから2番目のサーバーへの負荷分散アルゴリズムは設定されません。これはほぼ確実に、レイヤー2またはレイヤー3のバランスがとれている、つまりまったくバランスが取れていないことです。

3
MSalters

まず、チーム化ドライバーを使用している場合、オーバーヘッドが発生し、予想される最大スループット(1 GBアダプターで最大940 MB /秒)が最大10%低下します。

お使いのアダプターの種類はわかりませんが、インボックスドライバーを使用している場合は、最大スループットに最適な設定ではない可能性があります。アダプタ上の単一のキューがワイヤレートに到達できない可能性があるため、最大4つのキューを追加することを検討できます。

もう1つの考慮事項は、iperfの1つのスレッドがおそらく最高速にならないことです。 1GBの場合、2-6スレッドがおそらくより理想的です。単純なbashスクリプトを使用して、複数のスレッドを同時に起動できます。

Intel NICの場合、RSSおよびハードウェアRSCがスループットに影響を与える可能性があるため、BroadcomでTOEが機能していることを確認してください。

ただし、ステップ1はLAGを削除し、各システムでトラフィックの1ポートをテストして、どの程度のスループットが得られるかを確認し、すべてのポートでこれを実行してから、2を試してみます。LACPは、設定が簡単な獣ですそう、私はこれをHPスイッチで設定しようとしたことがなく、Force10(Dell以前)だけでした。

また、なぜいくつかのスイッチがあるのですか?

2
mortenya