Lists
2006-03-23 17:06:24 UTC
Hi,
I'm using the raw api (single threaded) on a Nios2 processor running at 50 Mhz.
I'm having trouble getting lwip to process udp packets at a high enough rate.
I'm sending udp packets to the nios2 in bursts of 16+ packets (~600 bytes) at
~60Mbps, then leaving a break of ~40ms. The 60 Mbps is probably a bit too fast,
but I would have thought that the 40ms break would give it enough time to catch
up if the buffer was of a sufficient size. I've got the following in lwipopts.h
and I've tried increasing them with no effect:
#define MEM_SIZE 64*1024
#define MEMP_NUM_PBUF 16
#define PBUF_POOL_SIZE 32
#define PBUF_POOL_BUFSIZE 1536
#define PBUF_LINK_HLEN 16
(I've included my lwipopts.h file in case it helps)
The behaviour I've observed is that the first 4 packets of each burst get
processed just fine, but only a few of the remaining packets get through.
Currently to test performance, my application increments a counter when it gets a
udp packet and that's pretty much all it does, so it shouldn't be slowing it down
from that end.
So a few questions:
* What kind of performance can I expect? What kind of peak performance?
* Should lwip be able to handle 60Mbps bursts of data?
* Is lwip polled or interrupt driven. I've had a look at the code and looks like
it's a bit of both... (I call lan91c111if_service(&netif); from main, the
function is part of the driver provided for nios2.)
* Does lwip do buffer copying or is the data passed up through the stack using
pointers?
* Is there an option to disable the udp checksum check? Or is it a case of
modifying the code?
* Any suggestions on how to get maximum udp performance?
Any feedback welcome.
Thanks,
Aidan
I'm using the raw api (single threaded) on a Nios2 processor running at 50 Mhz.
I'm having trouble getting lwip to process udp packets at a high enough rate.
I'm sending udp packets to the nios2 in bursts of 16+ packets (~600 bytes) at
~60Mbps, then leaving a break of ~40ms. The 60 Mbps is probably a bit too fast,
but I would have thought that the 40ms break would give it enough time to catch
up if the buffer was of a sufficient size. I've got the following in lwipopts.h
and I've tried increasing them with no effect:
#define MEM_SIZE 64*1024
#define MEMP_NUM_PBUF 16
#define PBUF_POOL_SIZE 32
#define PBUF_POOL_BUFSIZE 1536
#define PBUF_LINK_HLEN 16
(I've included my lwipopts.h file in case it helps)
The behaviour I've observed is that the first 4 packets of each burst get
processed just fine, but only a few of the remaining packets get through.
Currently to test performance, my application increments a counter when it gets a
udp packet and that's pretty much all it does, so it shouldn't be slowing it down
from that end.
So a few questions:
* What kind of performance can I expect? What kind of peak performance?
* Should lwip be able to handle 60Mbps bursts of data?
* Is lwip polled or interrupt driven. I've had a look at the code and looks like
it's a bit of both... (I call lan91c111if_service(&netif); from main, the
function is part of the driver provided for nios2.)
* Does lwip do buffer copying or is the data passed up through the stack using
pointers?
* Is there an option to disable the udp checksum check? Or is it a case of
modifying the code?
* Any suggestions on how to get maximum udp performance?
Any feedback welcome.
Thanks,
Aidan