ネットワーク アダプターのパフォーマンス
ネットワーク アダプターに実装するハードウェア機能を決定する際には、常にトレードオフがあります。 割り込みモデレーションを可能にするタスク オフロード機能の追加、ハードウェアでの動的チューニング、PCI バスの使用率の改善、ジャンボ フレームのサポートを検討することがますます重要になっています。 これらは、最高のパフォーマンスを必要とする構成で使用されるハイエンド ネットワーク アダプターにとって特に重要です。
- TCP および IP チェックサム オフロードのサポート
- 大量送信オフロード (LSO) のサポート
- IP セキュリティ (IPSec) オフロードのサポート
- 割り込みモデレーションの改善
- PCI バスの効率的な使用
- ジャンボ フレームのサポート
TCP および IP チェックサム オフロードのサポート
ほとんどの一般的なネットワーク トラフィックでは、チェックサム計算をネットワーク アダプター ハードウェアにオフロードすると、バイトあたりに必要な CPU サイクルの数を減らすことで、パフォーマンス上の大きな利点が得られます。 チェックサム計算は、次の 2 つの理由から、ネットワーク スタックで最もコストの高い関数です。
- パスの長さに影響します。
- キャッシュチャーン効果が発生します (通常は送信者に対して)。
チェックサム計算を送信側にオフロードすると、ホスト CPU の負荷を軽減し、キャッシュの有効性を高めることで、システム全体のパフォーマンスが向上します。
Windows パフォーマンス ラボでは、ネットワークを集中的に使用するワークロード中に チェックサムがオフロードされたときに TCP スループットが 19% 向上したことを測定しました。 この改善の分析では、全体の改善の 11% がパス長の減少によるもので、8% はキャッシュの効率の向上によるものです。
受信側でのチェックサムのオフロードには、送信側のチェックサムをオフロードするのと同じ利点があります。 ソケット プロキシ サーバーなど、クライアントとサーバーのいずれとしても機能するシステムでは、大きな利点が見られます。 クライアント システムなど、CPU が必ずしもビジーでないシステムでは、スループットが著しく向上するのではなく、チェックサムをオフロードする利点がネットワーク応答時間の向上に見られる場合があります。
大量送信オフロード (LSO) のサポート
Windows では、ネットワーク アダプター/ドライバーが MTU よりも大きい最大セグメント サイズ (MSS) を最大 64K の TCP にアドバタイズできます。 これにより、TCP は最大 64K のバッファーをドライバーに割り当てることができます。これにより、大きなバッファーがネットワーク MTU 内に収まるパケットに分割されます。
TCP セグメント化作業は、ホスト CPU ではなく、ネットワーク アダプター/ドライバー ハードウェアによって行われます。 これにより、ネットワーク アダプターの CPU が追加の作業を処理できる場合、パフォーマンスが大幅に向上します。
テスト対象のネットワーク アダプターの多くでは、ホスト CPU がネットワーク アダプター ハードウェアよりも強力であった場合に、純粋なネットワーク アクティビティの改善はほとんど見つかりませんでした。 ただし、一般的なビジネス ワークロードでは、ホスト CPU がほとんどのサイクルを使用してトランザクションを実行するため、スループットの最大 9% の全体的なシステム パフォーマンスの向上が測定されています。 このような場合、TCP セグメント化をハードウェアにオフロードすると、セグメント化の負荷からホスト CPU が解放され、より多くのトランザクションを実行するサイクルが増えます。
IP セキュリティ (IPSec) オフロードのサポート
Windows には、IPSec の暗号化作業をネットワーク アダプター ハードウェアにオフロードする機能が用意されています。 暗号化 、特に 3 DES (トリプル DES とも呼ばれます) には、非常に高いサイクル/バイト比があります。 したがって、IPSec をネットワーク アダプター ハードウェアにオフロードすると、セキュア インターネットと VPN のテストで 30% のパフォーマンス向上が測定されたのは驚くことではありません。
割り込みモデレーションの改善
単純なネットワーク アダプターは、パケットの到着時またはパケット送信要求の完了を通知するために、ホストにハードウェア割り込みを生成します。 割り込み待機時間とその結果のキャッシュ チャーン効果により、全体的なネットワーク パフォーマンスにオーバーヘッドが生じます。 多くのシナリオ (システムの使用率が高い、ネットワーク トラフィックが多いなど) では、割り込みごとに複数のパケットを処理することで、ハードウェア割り込みのコストを削減することをお勧めします。
負荷の高いネットワーク ワークロードでは、スループットの最大 9% のパフォーマンス向上が、ネットワーク集中型ワークロードを介して測定されています。 ただし、スループットを向上させるためにのみ割り込みモデレーション パラメーターをチューニングすると、応答時間にパフォーマンス ヒットが発生する可能性があります。 最適な設定を保持し、さまざまなワークロードに対応するには、この記事で後述する自動チューニングで説明するように、動的に調整されたパラメーターを許可することをお勧めします。
PCI バスの効率的な使用
ネットワーク アダプターのハードウェア パフォーマンスの最も重要な要因の 1 つは、PCI バスを使用する効率です。 さらに、ネットワーク アダプターの DMA パフォーマンスは、同じ PCI バス上にあるすべての PCI カードのパフォーマンスに影響します。 PCI の使用を最適化する場合は、次のガイドラインを考慮する必要があります。
必要に応じてターゲット ページを集計することで、DMA 転送を効率化します。
大きなチャンク (少なくとも 256 バイト) で DMA を実行することで、PCI プロトコルのオーバーヘッドを軽減します。 可能であれば、パケット全体が単一の PCI トランザクションで転送されるように、データのフローの時間を計算します。 ただし、転送の実行方法を検討してください。 たとえば、待機すると待機時間が長くなり、追加のバッファー領域が消費されるため、転送を開始する前にすべてのデータが到着するのを待つ必要はありません。
パケットの最後の数バイトを転送して「クリーン アップ」に短い余分な転送を要求するのではなく、DMA パケット転送を追加のバイトで埋め込むことをお勧めします。
PCI 仕様で推奨されているように、Memory Read、Memory Read Line、および Memory Read Multiple のトランザクションを使用します。
ネットワーク アダプター バス インターフェイス ハードウェアは、ホスト メモリ コントローラーの制限を検出し、それに応じて動作を調整する必要があります。 たとえば、ネットワーク アダプター バス インターフェイス ハードウェアは、DMA Memory Read でメモリ コントローラーのプリフェッチ制限を検出し、トランザクションを再試行する前に少し待つ必要があります。 ハードウェアは、ネットワーク アダプターの一部で過剰な再試行を検出し、ホストによって切断された後のトランザクションで最初に再試行されるまでの時間を長くする必要があります。 次の順次データ セットのフェッチでまだビジー状態であることが確実な場合に、メモリ コントローラーにトランザクションを送信し続ける意味はありません。
待機状態の挿入を最小限に抑えます (特にデータ転送中)。 複数の待機状態が挿入される場合は、バスを放棄し、バスを使用する別の PCI アダプターに何らかの作業を行わせるようにすることをお勧めします。
プログラミングされた I/O の代わりにメモリ マップ I/O を使用 これはドライバーにも当てはまります。
ジャンボ フレームのサポート
より大きな Maximum Transmission Unit (MTU) をサポートするため、フレーム サイズ (特にジャンボ フレーム) が大きくなると、バイトごとに発生するネットワーク スタックのオーバーヘッドが削減されます。 MTU が 1514 から 9000 に変更されたときに、20% の TCP スループットの増加が測定されました。 また、ネットワーク スタックからネットワーク ドライバーへの呼び出しの数が少ないため、CPU 使用率が大幅に低下します。