GRO(generic receive offload)はより高度なNICでどのように機能しますか?


14

私は特定の答えに興味があります:

  1. GROを備えたNICはTCP ACKまたはその他のパケットを編集/作成しますか(または、この機能は受信者/送信者TCPスタックに対して透過的ですか)?
  2. NICが「接着セグメント」をTCPスタックに渡す必要がある場合、タイムアウト/イベントが必要ですか?彼らは何ですか?
  3. パケット転送のセットアップで-GRO機能は受信側ACKの読み取りも試みますか(下記を参照してください)。
  4. GROおよびその他のNICオフロード機能(TSO、LSOなど)をウィキペディアやLinuxのマニュアルページよりも優れた方法で説明している情報源は本当にありがたいです。

詳細:

1つのIPSec実装でパフォーマンスの問題をトラブルシューティングしています。問題は、利用可能な帯域幅が4つのVPNトンネルすべてに均等に分散されていないことです(約200MBps / 200MBps / 1MBps / 1MBpsとして分散されます。各VPNトンネルは単一のTCP接続をカプセル化します)。PCAPでは、Webサーバーが約2秒間アイドル状態になることがあります(ACKを待機しています)。Webサーバーが未確認のセグメントを再送信すると、ダウンロードが再開されます。

PCAPからの私の内部の落ち込みは、NIC GRO機能がパケットを一緒に接着しますが、時々それらをタイムリーにTCPスタックに渡さず、それが問題を引き起こしていることです。

このVPNサーバーには、TCP接続を終了するインターフェイスはなく、パケットを転送するだけです。次に、GROを無効にしようとしましたが、その後、トラフィックがすべてのトンネルに均等に分散されていることに気付きました。また、WebサーバーでTCPウィンドウのスケーリングが無効になっている場合、GROが有効になっている場合でも帯域幅も分散されます(そのため質問#3がありました)。

Ubuntu 10.04サーバー(64ビット)で2.6.32-27 Linuxを使用しています。NICはIntel 82571EBです。すべてのインターフェイス(HTTPクライアント、VPNクライアント、VPNサーバー、Webサーバー)は、1Gbitイーサネットケーブルでチェーンで直接接続されています。

回答:


15

私はこの記事が驚くほど便利だと感じました:JLS2009:Generic receive offload。GROがどのように機能するかについての素晴らしい概要を提供します。

  1. 一部のアダプターはそれを行う場合がありますが、関連するドライバーも同様に認識している必要があります。また、ドライバー自体がソフトウェアでこれを行うことができます。これは、カーネルTCP / IPスタックに入る前に発生するため、カーネル空間TCP / IPスタックが完全に入力されるまでに、パケットは再配列されています。
  2. タイムアウトは、GRO仕様で1つのTCP / IP 'tick'(タイムスタンプフィールドの増分)として定義されます。これは非常に小さい数ですが、高速ネットワークでは複数のパケットを受信する可能性があります。
  3. GROはフォワーダーの受信側で機能します。実際、GROは、より貪欲なLROメソッドがフォワーダーでパケットを台無しにするのを防ぐために作成されました。
  4. 上記にリンクした記事は本当に役立ちます。

Ethtool 、特定のインターフェイスでGROを有効または無効にできる場合があります。バージョンに依存します。


1
質問を更新しました。すべてのオフロード機能のコンテキストで#1に答えたようです(IMHO GROだけではACKを生成しません-1つのTCP / IPティックのすべてのパケットを「接着」してからOSに処理します)。ありがとうございました!
user389238
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.