UDP Durchsatz schlecht

Alles rund um die Programmierung mit Qt
Antworten
tigertap
Beiträge: 3
Registriert: 17. März 2008 09:36

UDP Durchsatz schlecht

Beitrag von tigertap »

Hello,

i've programmed a test-application in QT4-3-4 for Windows (Commercial eval for VS2003) to get maximum UDP-throghput.
The application is a simple receiver, that gets UDP-datagrams and calculates throughput. We also have a sender (written in C, WinAPI) and several receivers (C, C#, Java...). Now we are testing QT's performance. With C, WSA, we got results of astonishing 900-950MBit/s.
The QT-application has two threads, one for GUI and one only for receiving. I used QUdpSocket-class, but results were as bad as 35-40MBit/s.
What is wrong it?? Has anyone same experiences??
Here is how i did it (only the receiving function in the 2nd thread):

Code: Alles auswählen

void sTestThread::run()
{
	quint32	dgs = 0;

	started = true;
	initRecv();
	while ( started )
	{
		psock->waitForReadyRead( 20 );
		if ( psock->hasPendingDatagrams() )
		{
			fill = psock->pendingDatagramSize();
			psock->readDatagram( buffer, MAX_UDPSIZE, 0, 0 );
			dgs++;
			checkDg();
		}
	}
	deinitRecv();
}
regards and thanks

tigertap
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Kann das jemand mal übersetzen? :-/
Das hier ist ein deutsches Forum Mensch...
tigertap
Beiträge: 3
Registriert: 17. März 2008 09:36

Beitrag von tigertap »

Hello,

Hello,

Entschuldigung.
Wir führen gerade Durchsatz-Tests mit verschiedenen Programmiersprachen durch.
Nun habe ich ein Programm in QT4-3-4 für Windows (Kommerzielle Eval für VS2003) erstellt, dass den max. UDP-Durchsatz testen soll.
Mit anderen Libraries (z.B. WSA) haben wir Durchsätze von bis zu 900-950MBit/s erreicht
Die QT-Anwendung hat 2 Threads, einen zum Empfangen einen für die GUI. Dabei habe ich die QUdpSocket-Klasse verwendet,
aber die Resultate waren schlecht, etwa 35-40MBit/s.
Was geht schief oder hat jemand ähnliche Erfahrungen??

Gruß

tigertap
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

1. Wenn du in mehreren Foren die gleichen Fragen stellst, bitte poste noch die Links dazu, damit jemand beim surfen die Loesung findet..
2. was macht "checkDg()" (code)? Warum ueberhaupt eine GUI parallel zu einem Performance-Test laufen lassen?
3. Wird zwar kaum was ausmachen, aber eigentlich fragst du 2x das gleiche ab:

Code: Alles auswählen

while ( started )
  {
      if ( psock->waitForReadyRead() )
      {
         fill = psock->pendingDatagramSize();
         psock->readDatagram( buffer, MAX_UDPSIZE, 0, 0 );
         dgs++;
         checkDg();
      }
   } 
tigertap
Beiträge: 3
Registriert: 17. März 2008 09:36

Beitrag von tigertap »

Hallo,

http://www.qtcentre.org/forum/f-qt-prog ... #post65845

Die Funktion checkDG() berechnet im Wesentlichen den Durchsatz. Auch wenn man diese auskommentiert (man kann ja die Anzahl der empf. Datagramme zählen: var "dgs") verbessert sich der Durchsatz nur geringfügig.
Die GUI soll einfach die Bedienung erleichtern, zumal wir das bei den anderen Testprogrammen auch schon hatten.

Wieso 2mal dasselbe? waitForReadyRead() um die Auslastung klein zu halten und dann im nächsten Schritt mit pendingDatagramSize() die Größe der Nutzdaten im Datagram erfragen oder meinst Du was anderes?


Grüße
Christian
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

ich konnte locker 400-500MBytes/s (Bytes, nicht Bits) messen.. kannst du mal den kompletten Qt-Source attachen?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hübsch, geht das alles über localhost oder was habt ihr für Netzwerkanbindungen...
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Rauchzeichen waren es auf jeden Fall nicht :wink:
im ernst: ich geh mal davon aus, dass tap nur die Software (via localhost) testen möchte.. bei der ganzen I/O würde sich die Applikation ja nur langweilen und sich kaum ein Unterschied messen lassen..
Antworten