On 4/25/2017 3:16 AM, pupkin wrote:
> Greetings,
>
> I need to send large quantities of data reliably from a Zynq-based
device to
> a PC.
> I'm looking for a data transfer protocol which can get as close as
possible
> to wire speed on a dedicated 1Gb ethernet link. It would be nice
although
> not strictly required it it worked over arbitrary internet connections.
>
> Currently I'm considering either porting http://enet.bespin.org/ or
> http://udt.sourceforge.net/ to lwIp or rolling my own UDP-based
protocol. I
> will need support for zero-copy with scatter-gather DMA.
>
> Has anyone done this before? Any suggestions?
>
> Regards
> VP
For what it's worth, I've done some tests on a dedicated 100Mb link and
they are quite reliable. I suspect the same could be said about a
dedicated 1Gb link? I ran a test once on a dedicated link between an
embedded system and a Windows computer with no lost packets for hours
(maybe even overnight - I forget the exact details).
That means that you should be able to implement a high speed UDP based
transfer protocol with very little overhead to make it "reliable". I
would bet that creating a "window" of UDP packets (with sequence
numbers) will do what you want with the receiver sending back an ACK of
sorts for every so many packets or if it sees a sequence number missing.
I'm not sure about the zero-copy scatter-gather support - you'll
probably just have to try it. The lwIP stack might scan your pbuf and
decide to copy the packet to a single buffer pbuf depending on the
capabilities of the ethernet interface. Even so, your Zynq processor
will probably be able to handle the copies faster than a 1Gb link could
transfer the data?
Good luck!
Patrick Klos
Klos Technologies, Inc.