2012-04-13 17 views
3

Ich versuche, die Kommunikation in einem großen System zu optimieren, das auf UDP basiert. Durch Optimierung, ich meine, den Verlust von Paketen zu minimieren. (Ja, ich weiß, die inhärenten Einschränkungen von UDP, nicht ein anderes Protokoll vorschlagen) Wir haben mehrere Exe mit jeweils mehreren Threads und verwendenWie überwache ich die UDP-Puffer in Windows XP?

setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers. 

Wir erfahren haben, dass sehr große Puffer für viele Steckdosen Einstellung degradieren die Gesamtleistung (mehr Paketverlust) Aber wie überwacht man die Auswirkungen dieser erhöhten Puffergrößen? . Vor allem auf der Empfangsseite würde ich gerne sehen, ob irgendwelche Ports Nachrichten bekommen, die wegen fehlendem Puffer verworfen werden.

Bitte vorschlagen, wie dies getan werden kann, (Windbg Benutzer oder Kernel-Modus, spezielle Programme, etwas Selbst Witting)

EDIT: @EdChum: Ich habe bereits verwendet Wireshark, und ja seine schmerzlich Korrelieren der Pakete auf der Leitung mit den von der Anwendung empfangenen Paketen. Und ich habe mehrere Male gesehen, wo das Paket auf der Leitung ist (von Wireshark erfasst), aber nicht von der Anwendung empfangen wurde. Diese Pakete verloren sind in der Regel ein kleines Paket zu einem Multicast-Ziel, das mit einem sehr kleinen Zeitabstand nach einem großen Unicast-Paket gesendet wird. Der Empfänger der Unicast verliert das Multicast, aber andere empfängt es.

Mein Verdacht ist, dass XP manchmal irgendwo in den NDIS- oder IP-Schichten an irgendeinem Puffermangel leiden und daher Pakete stillschweigend fallen lassen. Wenn es irgendwo einen Schalter gibt, kann ich das bestätigen.

+0

Vielleicht kann xperf.exe aus dem Windows Performance Toolkit helfen. Es gibt ein Kernel-Flag namens "NETWORKTRACE", das von Interesse sein könnte. Außerdem zeigt "xperf -providers i" auf meiner Win7-Box usermode-ETW-Provider für TCP/IP, Winsock und AFD. –

Antwort

1

nicht sicher, wie dies mit WinDbg zu tun, aber ich würde entweder NetMon oder WireShark verwenden, um die Pakete zu überwachen und sehen, ob verworfen werden, wird es schmerzhaft sein, je nachdem, wie einfach es ist, zu reproduzieren, und Sie werden lernen müssen, wie man die Pakete filtert, so dass das Display zeigt, was Sie interessiert, aber die Hilfe für diese beiden Apps ist sehr nützlich.

Sie müssen einen physischen Socket und nicht die Loopback-Adresse abhören, um die Pakete zu überwachen.