Forum: Mikrocontroller und Digitale Elektronik STM32F1xxx LwIP Datendurchsatz


von Verwunderter (Gast)


Lesenswert?

Hallo Leute, würde gerne eure Werte der LAN Übertragung erfahren, habe 
LwIP auf einem STM32F107 laufen und erreiche beim versenden von HTML 
Files (fsdata) aus dem internen Flash über http ca. 11Kb/s, das ist sehr 
mager. LAN ist im DMA Mode konfiguriert und in der main->while() 
Schleife wird nur geprüft, ob http Daten angekommen sind. Habe das 
Gefühl, als würde irgendwas den ganzen Verkehr ausbremsen. Wireshark 
kriege ich auf dem PC nicht zum laufen. Getestet habe ich mit dem tool 
DownTester.exe von nirsoft. Mit  Webseiten wie yahoo etc. erziele ich ca 
2Mb/s http downstream. Habe mir die LwIP Optimierungsmöglichkeiten 
durchgelesen, bringen tut es aber nichts.

von Juergen (Gast)


Lesenswert?

Also mit LwIP kenne ich mich nicht aus aber uIP hat ein grosses Problem 
mit dem "TCP delayed acknowledgment", das unter Windows standardmässig 
eingeschaltet ist. Da gibts die wildesten Hacks um das zu umschiffen wie 
z.B. jedes Paket in 2 kleine zu teilen oder einfach jedes Paket doppelt 
zu senden. Da LwIP vom selben Autor kommt ist die Gefahr groß, dass es 
auch da so ist. Laut meinem Verständnis ist das so, wenn der Client 
(insbesondere Windows) ein TCP-Paket empfängt sendet er einfach noch 
kein ACK zurück sondern wartet erst mal 100ms oder mehr. Kommt kein 
weiteres Paket sendet er dann das ACK. Dadurch bricht die Kommunikation 
bei vielen kleinen Paketen total ein, da uIP erst dann das nächste Paket 
sendet wenn das ACK vom vorhergehenden gekommen ist. Sendet der Server 2 
Pakete hintereinander, u.U. auch das selbe 2 mal, dann antwortet der 
Client sofort mit einem ACK und alles läuft wie am Schnürchen. 
Untersuche mal ob das bei dir die Ursache ist, denn dann musst du an 
einer völlig anderen Stelle suchen. Gerade wenn man mit einem Windows 
Web Browser auf den Server zugreift bringen die o.g. Hacks gefühlte 
Lichtjahre Verbesserung. Oder mal zum Testen einen Linux-Browser 
verwenden oder versuchen das "TCP delayed acknowledgment" unter Windows 
auszuschalten.

von Juergen (Gast)


Lesenswert?

noch ein Nachtrag:

im lwIP Wiki (http://lwip.wikia.com/wiki/Maximizing_throughput)

steht ganz unten:

Try to prevent sending small chunks of data waiting for an ACK: delayed 
ACK on the remote host might destroy performance (often, only every 2nd 
packet is ACKed)

Das bestätigt meine Vermutung.

von Kurt (Gast)


Lesenswert?

Konnte der Stack nicht per Option mehrere Pakete gleichzeitig 
versenden!?

von (prx) A. K. (prx)


Lesenswert?

Ein Problem kleiner Stacks besteht in der Tat darin, dass die 
Gegenstellen erst einen Timeout abwarten, bevor sie ein einzelnes Paket 
bestätigen. Allerdings hätte ich gedacht, dass LwIP darauf eingeht, das 
ist ja doch nicht ganz so minimalistisch wie das uIP mit seinem einzigen 
Puffer.

Im uIP gibt es dazu eine Optimierung, die das Paket in zwei Teile 
splittet, aber damit war ich nicht glücklich geworden.

Aus dem Tracing des Verhaltens eines Wiznet-Chips ergibt sich ein 
simpler Workaround (mit uIP ungetestet): Auf der Ebene des 
Adaptertreibers jedes Paket zweimal direkt hintereinander versenden. Das 
ergibt zwar doppelte Bandbreite in dieser Richtung, bringt aber die 
Gegenstelle dazu, das Paket pronto zu bestätigen.

von Juergen (Gast)


Lesenswert?

genau das habe ich bei uIP auch gemacht. Das Splitten hatte ich auch 
erst probiert, aber nur mäßige Erfolge erzielt. Das verdoppeln wirkt 
Wunder, auch wenn's nicht ganz Regelkonform ist.

von Verwunderter (Gast)


Lesenswert?

>lwIP Wiki (http://lwip.wikia.com/wiki/Maximizing_throughput)
Die Optionen habe ich mir angeschaut. Also so klein sind die Pakete 
nicht. Die Files (Bilder, CSS, HTML) sind im Bereich von 1-4Kb. Die 
letzten Pakete der jeweiligen Datei können natürlich kleiner ausfallen, 
falls nicht der ganze Rahmen gesendet wird. Ich hab jetzt endlich hin 
bekommen Wireshark zu installieren, werde mir die Zeiten angucken, wann 
mein PC ein ACK zurücksendet, wobei wie gesagt, mit anderen Webseiten 
klappt es ja wunderbar. Die sind von der Struktur ja ähnlich.

von Juergen (Gast)


Lesenswert?

4k im Stück geht ja sowieso nicht wegen der MTU. Selbst wenn jedes Paket 
die MTU maximal nutzt und dann aber 100ms bis zum ACK vergehen, sind das 
pro Sec 10 Pakete. Dazu kommen dann noch die favicon.ico Abfrage bei 
jedem Request. Alles in allem ergibt das ein Verhalten so wie du es 
beschreibst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.