TCP Zynq performance
Greetings
a bigger project, which runs on a Zynq device I have converted to FreeRTOS from another rtos.
Additionally I now have to add TCP connectivity.
Therefore I’ve implemented and tried LwIP-141 as well as FreeRTOS+TCP.
For the latter I used the newest Version (160919) with additions I found here in the forum (Zynqplustcpdriver2017731.7z).
The LwIP stack comes with Xilinx demo-source and they offer an app-note to test the performance.
I have to note that I’m looking for ultimate performance from device to host-PC (WIN64), That is, using the
1 gbps ethernet interface I would like to have nearly full-speed.
In the app-note for Lwip Xilinx indicates 542 Mb/s for socket-mode and 949 Mb/s for RAW-mode.
The first mode I was able to reproduce, the second not yet due to build-errors.
Because I would obviously prefer the socket-mode I thougt to test FreeRTOS+TCP.
First problem was to have a demo-project with iperf server/client for TCP.
These are not contained in the demo, so I’ve written them by myself taking the LWip files as template.
The result was 523 Mb/s for receive (server on device) and 620 Mb/s for transmit (client on device).
Then I’ve tested Hein Tibosch’ iperftaskv10 and later iperftaskv30.
The first using iperf2, the latter with iperf3.
The result was similar, meaning, the best I achived, was depending of buffer-sizes etc. about 550 Mb/s for
receive.
BUT can I also use the iperf_task to test transmit-speed? How are the settings then and how
to invoke iperf3 on the host?
I tried the –reverse option but got nothing but 1 byte sent from device to PC. 🙂
And secondly: What remains to improve the transmit speed?
Is zero-copy implemented for tcp-transmit and if it exists, what definition has to be set to use it?
Any other ideas to get tcp-socket-transmit running at highest speed?
I would be thankful for advice and hints, because I’d rather like the FreeRTOS version instead of LwIP.
With best regards,
Hannes