12-22-2015 09:05 AM
I'm trying to figure out how can I reach 1 Gbit/s ethernet transfer speed with the ZedBoard (which has Zynq 7020). I booted the ZedBoard with PetaLinux 2015.2.1. Then, I used scp to copy a big file from PetaLinux to my host PC (running Ubuntu). I got a speed of about 7.0 MByte/s = about 56 Mbit/s. I verified using ethtool that both PetaLinux and the host are running on "speed: 1000Mb/s" and "Duplex: Full" mode. Is the 7MB/s transfer speed kind of expected? (I'm not very experienced with embedded Linux.) How can I achieve a better transfer speed? I would like to get 4-5x faster speed.
12-22-2015 09:22 AM
20GB sustained is possible with ZYNQ and linux
with some super tweaking maybe 55-60M sustained, but not more. peak can be better of course.
zynq has no jumbo frames support, so it kills the performance
12-22-2015 09:56 AM
It's just about impossible to saturate a GbE link from a processor running linux. Your 7MB/s is pretty typical. I think the best I've seen with linux is 10-20MB/s. To really saturate the link you need to get the processor and linux out of the way. It can almost be done from the PL (state machine) using UDP transfers. I work on high-speed video cameras where large video captures (8GB to 16GB) need to be downloaded to a PC in a reasonable amount of time. It's relatively easy to achieve > 100MB/s (800Mbps), but 1Gbps (100% wire throughput) is impossible due to overhead. Jumbo frames help a lot to minimize the overhead.
One issue to be aware of when saturating a GbE link is that you have to be sending to something that can catch the traffic. That can require special attention on a PC. And some PCs can't do it at all due to hardware and/or driver limitations.
12-22-2015 10:51 AM
correct zynq PS ETH can do 20MB with some tweaking from linux, anymore is way troublesome and for sustained BW really problem.
but this is all the OP has, zedboard has PS ETH PHY only
12-22-2015 01:22 PM
Thanks for answering my question. If 20 MB/s is possible with Linux, I'd happily take that. So, what are some things that I can tweak to get closer to that speed?
12-23-2015 12:38 AM
the tweaking is up to you fiigure out, thats why it is tweaking.
optimze everything and then start randomize some settings, and test and test... and maybe you get there.
there is no single recipe: do only this any you get so much bw guaranteed.
12-23-2015 08:46 AM
If you haven't done it already, make sure you're running the PS memory and core clocks as fast as possible. The defaults are usually not maxed out in my experience, especially if you started with a reference design. This may only help marginally, but every little bit helps.
12-23-2015 08:09 PM
Yes I'm using the default (processor at 667 MHz and DDR at 533 MHz). I'll try to tweak them as you suggested.
12-25-2015 06:45 AM
If you run iperf or netperf you can find that you can do much faster than what is described above. The downside is that iperf throws away the data immediately upon reception. And it seems that kernel 4.0 is even faster.
The key in my experience is to request and transmit large chunks, use cached memory and sleep a few hundred microseconds before reading the next big chunk of data coming in.