Hallo Welt, auf meinem Microblaze läuft LWIP. Jetzt möchte ich in einem IP-Core die empfangenen Daten verarbeiten. Ich habe mir das so gedacht, daß der IP-Core den Pointer und Länge bekommt. Der IP greift jetzt selber auf den RAM. Sobald er damit fertig ist, schickt er den Pointer zurück, damit Microblaze weiß, welche Daten er löschen kann. Was haltet ihr davon? Den Pointer wieder zurückzugeben scheint anfangs etwas ungeschickt, aber ich habe keine Lust auch noch die Funktion pbuf_free( struct *p ), also Speicher freigeben, in HW zu machen. Ich hätte den IP und µBlaze jetzt über PLBus verbunden. Ist das über den Bus schnell genug, oder gibt es da bessere Methoden? Schreibt einfach mal, was euch zu meinem Design einfällt. Ich brauche halt einen hohen Durchsatz.
Es sollten mindesten 100 MegaBIT/s sein. Im Xilinx Datenblatt steht, daß der LWIP auf Virtex5 maximal 129Mb/s schafft.
Der LwIP ist wirklich Murks, denn der nutzt kaum die HW-Features des MAC. Wir hatten das damals auf dem Virtex 4 FX mal probiert. Da ging kein Checksum offloading, kein DMA und keine großen Puffer. Also Stack selber geschrieben und schon kam man unter Ausnutzung all der Sachen auf knapp über 100MByte/s im UDP mit dem GbE und einer PCIe Karte auf der Gegenseite. Wenn´s schnell sein soll, musst du den LwIP zumindest bearbeiten. Aber über 100MBit/s hat der mit dem GbE MAC schon geschafft. Zumindest auf dem PPC.
Ich habe ja gesagt, daß ich pbuf_free( struct *p ) in SW machen will und dafür der IP den Pointer p über PLB an µBlaze senden muss. Microblaze muss also ständig horchen: PLB_read( addr) [oder so ähnlich]. Jetzt ist die Frage, wo stecke ich das PLB_read(addr) hin, so daß es die Maschine am wenigsten ausbremst? Ich sehe da zwei Möglichkeiten: Als Thread in der Callback-Funktion oder im main(). Dort läuft sowieso
1 | while(1){ |
2 | recv_data(); |
3 | } |
Was wird weniger Ressourcen verschwenden? LWIP läuft im RAW Modus ohne BS. Oder bremsen beide Methoden zu stark aus? Wie könnte ich denn sonst die Daten im Puffer wieder freigeben?
Christian R. schrieb: > Der LwIP ist wirklich Murks, denn der nutzt kaum die HW-Features des > MAC Ist halt ein generisch geschriebener Stack, aber in der Tat für EMACs und schnelle Anwendungen nicht zu gebrauchen. Full Ack :-) Für lokale Netzwerke tut's meistens ein handgeschriebener, auf die DMA-Engine optimierter UDP-Stack, der IP-Core macht dann nur noch bisschen Sequencing-Arbeit und ev. ARP, ICMP usw. -Requests. Für weiteren Speed kann man auch Jumbo-Pakete (8k) benutzen (wenns der Router auch kann). IMHO macht es mehr Sinn, speziell optimierte UDP-Stacks zu benutzen anstatt bestehende TCP/IP-Lösungen doch noch irgendwie schneller zu kriegen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.