2009-10-31 13 views
6

Ich habe eine einfache C# -Anwendung, die UDP Multicast in einem Single-Receiver, Single-Sender-Szenario verwendet. Ziel ist es, die Zustellung von Nachrichten so schnell wie möglich in einer lokalen Netzwerkumgebung zu erreichen.UDP-Multicast-Leistung unter Last

Ich habe SocketAsyncEventArgs/SendAsync/ReceiveAsync, BeginSend/BeginReceive, Threads/Senden/Empfangen verwendet und habe sowohl PGM als auch UDP Multicast versucht.

Jeder Implementierungsversuch funktioniert für wiederholte Nachrichtenübermittlung bis zu 1000 Nachrichten mit lokalem Senden, lokalem Empfang. Danach beginnt die Performance exponentiell zu fallen. Wo 1000 Nachrichten ein paar Hundertstel Sekunden dauern, können 10.000 Nachrichten zwischen 2 und 10 Sekunden dauern.

Hat jemand Erfahrung mit leistungsstarkem UDP/PGM Multicasting? Was ist das beste Design für maximalen Durchsatz?

aktualisiert

Gerade jetzt, es ist nur ein einziges Programm lokal ausgeführt - 1 Anwendung mit 1 Sender und 1 Empfänger. Die Testnachrichten sind 4 Bytes.

Antwort

9

Versuchen Sie, den Sende- oder Empfangspuffer (Server oder Client) Ihres Sockels groß genug für die zu erwartende Datenmenge zu machen. Hier einige Beispiele-C# -Code aus meinem eigenen UDP-Multicast-Server/Client auf dem Server, wo dataSock ist meine Socket gebunden an die UDP-Multicast-Gruppe:

dataSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, (NumberOfPackets * PacketSize) + SmallEpsilonForExtraHeadroom); 

Auch sicher sein, und stellen Sie SocketOptionName.SendBuffer auf Client-Seite, um das Spiel Puffergröße, die Ihr Server produziert.

Ich würde auch empfehlen, wenn Sie nicht schon wussten, Ihre Paketgrößen weniger als die MTU. Standardmäßig sind MTUs auf 1500 Byte festgelegt. (MTU ist maximale Übertragungseinheitsgröße)

Sie können immer noch verworfene Pakete erhalten, es sei denn, Sie drosseln auch Ihre Sendungsrate, um sicherzustellen, dass Ihre Kunden mithalten können. Ihre Netzwerkhardware ist höchstwahrscheinlich nicht der Flaschenhals hier. Siehe meine Frage Need microsecond delay in .NET app for throttling UDP multicast transmission rate für eine Antwort auf dieses Problem (mit Stopwatch in einer While-Schleife für Verzögerungen in der Größenordnung von Mikrosekunden).

+0

Danke für die gut durchdachten Informationen. – Anton

+0

Kein Problem. Ich bin gerade mit diesem Zeug im Graben. :) –

1

Ich bin kein Experte auf diesem, aber es klingt wie Sie stoßen gegen die Kapazität Ihres Netzwerks. Möglicherweise müssen Sie Ihre Hardware aktualisieren, um einen besseren Durchsatz zu erzielen. Aber ohne die Größe der Pakete, die Netzwerkbandbreite oder wie viele Rechner versuchen zu kommunizieren usw., ist das nur eine Vermutung.

Verwandte Themen