TCP Zynq performance

hannes23 wrote on Tuesday, October 24, 2017:

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 (Zynq_plus_tcp_driver_2017_7_31.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’ iperf_task_v1_0 and later iperf_task_v3_0.
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

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. :slight_smile:

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,