2012-04-13 3 views
3

UDPに基づいた大規模なシステムで通信を最適化しようとしています。 最適化すると、パケットの損失を最小限に抑えることになります。 私たちは、各.exeのいくつかの複数のスレッドを持っている(はい、私は別のプロトコルを示唆していない、UDPの固有の限界を知っている)、そして私たちは多くのソケットには非常に大きなバッファを設定することが劣化することを経験しているWindows XPでUDPバッファを監視する方法

setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers. 

使用します全体のパフォーマンス(より多くのパケット損失) しかし、どのようにこれらの増加したバッファサイズの影響を監視するのですか? 。特に受信側では、バッファが不足しているためにポートが破棄されたポートがあるかどうかを確認したいと思います。

(ユーザまたはカーネルモードでWindbgの、特別なプログラムは、何かの自己をwitting)、これを行う方法 を提案してください

EDIT: @EdChum: 私はすでにWireSharkのを使用している、とイエスにその痛みを伴いますワイヤ上のパケットをアプリケーションが受信したパケットと相関させる。そして、私は、パケットがワイヤー上にある(Wiresharkによって捕捉された)が、アプリケーションによって受信されなかったいくつかの機会を見た。 これらのパケットは、通常、大きなユニキャストパケットの後に少しの時間差で送信されるマルチキャスト宛先への小さなパケットです。ユニキャストの受信者はマルチキャストを失いますが、他の受信者は受信します。

私の疑惑は、XPがNDISまたはIP層のどこかでバッファ飢餓状態に陥り、パケットを静かに破棄してしまうことです。どこかにカウンターがあれば、これを確認することができます。

+0

おそらくWindows Performance Toolkitのxperf.exeが役立つかもしれません。関心のある "NETWORKTRACE"というカーネルフラグがあります。さらに、Win7の「xperf -providers i」ボックスには、TCP/IP、Winsock、AFDのusermode ETWプロバイダが表示されます。 –

答えて

1

WinDbgを使用してこれを行う方法がわかりませんが、NetMonまたはWireSharkのいずれかを使用してパケットを監視し、破棄されているかどうかを確認するには、再生するのが簡単で習得する必要があります興味のあるものが表示されるようにパケットをフィルタリングする方法ですが、両方のアプリケーションのヘルプは非常に便利です。

パケットを監視するには、ループバックアドレスではなく、物理ソケットをリッスンする必要があります。