we are using latest FreeRTOS v10 with lwIP 2.0.2 provided by Xilinx SDK 2018.2. We have modified example application FreeRTOS lwIP TCP Perf Server so that TCP Iperf Client is also run from the same application. Our goal is to test throughput when both Rx and Tx are active at the same time. So, in one FreeRTOS task we run start_application function from FreeRTOS lwIP TCP Perf Server example and from other FreeRTOS task we run start_application function from FreeRTOS lwIP TCP Perf Client application. Server listens on 5002, client connects to 5001.
We have Windows 7 host. Once we start running everything, really soon Tx path (Zynq->PC) becomes completely unresponsive. It seems that at one point it gets stuck in lwip_send function. Other path (Rx) is OK all the time. Even when Tx path hangs we are still able to connect to Zynq server and send data from PC.
The interesting thing is that we succeeded to make it responsive by reducing TCP_MSS from default 1460 to 1024. After this change we are getting these results (in red we have marked part of communication when both Rx and Tx were active at the same time):
However, sometimes Tx path becomes unresponsive again but in short periods of time. For example:
We would like to know if anyone has succeeded to do anything similar and make Rx and Tx TCP work from multiple threads i.e. FreeRTOS tasks.
Can anyone from Xilinx explain us if this is even possible from Ethernet drivers perspective?
By the way, we have the same problem when using lwIP RAW, without FreeRTOS.