On Tue, 2011-10-11 at 16:50 +0200, Mason wrote: > > So the hardware + driver is indeed able to handle the load. > > I must be doing something wrong in my driver when I pass > data to lwip.
In this UDP test did you use lwIP to process the UDP traffic, or was it just a test that interfaced directly to your driver? > > If the hardware > > is really fast enough, you seem to have a bottleneck somewhere in > > your code, supposedly either somewhere around your netif driver or > in > > your OS threading? If your netif driver uses PBUF_POOL for rx > > packets, you might want to check that PBUF_POOL_BUFSIZE is large > > enough to hold a complete frame. > > In the RX part, I copy the incoming frame : > > packet_descriptor *desc = wait_for_next_packet( ); > /*** PROCESS THE PACKET ***/ > struct pbuf *pbuf = pbuf_alloc(PBUF_RAW, desc->length, PBUF_RAM); > memcpy(pbuf->payload, desc->buffer, desc->length); > mynetif->input(pbuf, mynetif); > > I've disabled TCPIP checksum verification with > #define CHECKSUM_CHECK_TCP 0 Yikes! I hope this is just for experimenting to find the source of your performance problems, rather than something you intend to disable permanently. > In the TX part, I copy the outgoing pbuf : > > packet_descriptor *desc = get_packet_descriptor( ); > assert(p->next == NULL); > memcpy(desc->buffer, p->payload, p->len); > desc->length = p->len; > // add desc to list of frames to send Did your UDP test involve copying data to/from descriptors like this? If not, this is likely to be a large part of the explanation why the UDP test was fast, but your original experiments were slow. Kieran _______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users