web-dev-qa-db-ja.com

超低遅延が必要ですか、最小化する方法は?

クライアントとして機能し、同じデータセンター内の別のサーバーに接続されているWindows Server 2008R2マシンがいくつかあります。サーバーにアクセスできません。クライアントとサーバー間の遅延を最小限に抑える必要があります。 Macromedia Flash(Winsockets)を介して通信し、非常に小さなコマンド(20〜30バイト)を交換します。通常の遅延は200〜400マイクロ秒ですが、私の経験といくつかのテスト(MS Network Monitorで実行)から、Flashアプリケーションでは、応答時間は少なくとも数ミリ秒であることが非常に多いようです。これは、ソフトウェア。

Nagleアルゴリズムまたは遅延ACKが原因である可能性があります。レジストリを介して両方を無効にしようとしましたが、Server 2008R2には影響がないようです。レジストリを使用してMTUとその他の値を微調整できることはわかっています:DefaultSendWindow、DefaultReceiveWindow、GlobalMaxTcpWindowSize、TcpWindowSize。送信バッファーを0に設定し、受信バッファーを大きな値に設定する必要があると思いますが、これは正しい戦略ですか?

取得できるCPUが最速で、ネットワークカードの割り込みモデレーションを無効にしました。遅延を最小限に抑えるために他に何ができますか? 100マイクロ秒でさえ私にとって重要です。

3
Yekoor

これは、Windows Server 2008R2用のMicrosoftのパフォーマンスチューニングガイドラインドキュメントです。

http://download.Microsoft.com/download/6/B/2/6B2EBD3A-302E-4553-AC00-9885BBF31E21/Perf-tun-srv-R2.docx

このドキュメントには、136ページのパフォーマンスチューニングガイドラインがあります。

Support.Microsoft.com/kb/214397/en-usから興味深い情報を入手することもできます。

また、Windowsフィルタリングプラットフォームを無効にしてみることもできます。これは一般的には推奨されていませんが、オペレーティングシステムを介したI/Oの移動を短縮するのに役立つ場合があります。

また、MicrosoftがWindowsに組み込んだ、低遅延ネットワーク向けに特別に調整された多数のテクノロジがありますが、これらのほとんどは、2008 R2ではなく、2012年の特定の改善です。

http://technet.Microsoft.com/en-us/library/hh831415.aspx

  1. データセンターブリッジング

  2. データセンター伝送制御プロトコル(DCTCP)

  3. カーネルモードリモートダイレクトメモリアクセス(kRDMA)

  4. ネットワークインターフェイスカード(NIC)チーミング

  5. NetworkDirect

  6. 受信セグメント合体(RSC)

  7. 受信サイドスケーリング(RSS)

  8. 登録入出力(RIO)API拡張機能

  9. 伝送制御プロトコル(TCP)ループバックの最適化

  10. 低遅延のワークロードの管理と運用

しかし、ソフトウェアの調整でできることはたくさんあります。ハードウェアを Infiniband/RDMA over Converged Ethernet にアップグレードするだけで、Windowsレジストリのビットを反転するだけでは達成できない、大幅な遅延の削減が得られます。

最後に、もう少し直接的なものがあります 遅延ACKに関する質問への回答 。それが本当にあなたの問題なのかどうかはわかりませんが、:

サブキー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces \

エントリ:TcpAckFrequency

値のタイプ:REG_DWORD、数値有効な範囲:0〜255デフォルト:2
説明:遅延ACKタイマーが無視される前に未処理になるACKの数を指定します。 Microsoftは、環境を注意深く検討せずにデフォルト値を変更することをお勧めしません。

値を1に設定すると、未処理のTCP ACKが1つしかないため、すべてのパケットがすぐに確認応答されます。セグメントが受信されたばかりです。値0(ゼロ)は無効であり、処理されます。デフォルトとして2。ACK番号が0の場合は、セグメントが受信されず、ホストがデータを確認しない場合のみです。

4
Ryan Ries

大きな送信オフロードを無効にすることから始めます。ネットワークスタックは、バッファを満たすためにパケットの送信を待機します。オフのオプションを使用すると、より小さなパケットを送信しますが、速度を重視するアプリに役立ちます。

2
yagmoth555