UDP に基づく大規模なシステムで通信を最適化しようとしています。最適化とは、パケットの損失を最小限に抑えることを意味します。(はい、UDP の固有の制限を知っています。別のプロトコルを提案しないでください) それぞれ複数のスレッドを持つ複数の .exe があり、使用します
setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers.
多くのソケットに非常に大きなバッファーを設定すると、全体的なパフォーマンスが低下する (パケット損失が増える) ことを経験しましたが、これらの増加したバッファー サイズの影響を監視するにはどうすればよいでしょうか? . 特に受信側では、バッファ不足のためにメッセージが破棄されたポートがあるかどうかを確認したいと思います。
これを行う方法を提案してください(ユーザーまたはカーネルモードでのWindbg、特別なプログラム、何かを自分で考えて)
編集: @EdChum: 私はすでに WireShark を使用しています。はい、ワイヤ上のパケットとアプリケーションが受信したパケットを関連付けるのは面倒です。また、パケットがネットワーク上にある (Wireshark によってキャプチャされた) が、アプリケーションによって受信されない場合も何度か見てきました。失われたこれらのパケットは通常、マルチキャスト宛先への小さなパケットであり、大きなユニキャスト パケットの後に非常に短い時間間隔で送信されます。ユニキャストの受信者はマルチキャストを失いますが、他の受信者はそれを受信します。
私の疑惑は、XP が NDIS または IP レイヤーのどこかでバッファ不足に悩まされることがあり、そのためパケットを静かにドロップすることです。どこかにカウンターがあれば、これを確認できます。