we have just made basic TCP/IP server application on ZYNQ-7000 using FreeRTOS v10.0.0 and it’s TCP/IP stack. LAN on our ZYNQ board is 1Gb. We have two tasks (of equal priorities = configMAX_PRIORITIES - 3), one for sending to and other for receiving data from PC (Windows 7) over single TCP socket. PC and ZYNQ are connected via dedicated Ethernet cable.
We are measuring throughputs in our Windows TCP client. We have around 24MB/s in total . However, even though we expect to have divided throughput between Rx and Tx side (for example Rx - 13MB/s and Tx - 11MB/s), it seems that Rx side (PC Rx <- ZYNQ Tx) is more dominant i.e. have higher priority. When this Rx side is active other side seems completely inactive, thus we are getting 24MB/s for Rx side, and once Rx side is finished, Tx “gets activated” and we get 24MB/s for Tx. Of course, Tx and Rx are implemented concurrently (as threads) in Windows TCP client app i.e. they are always working at the same time. We exchange data in chunk sizes of 4kB.
It seems like TCP send function has higher priority than TCP receive function on FreeRTOS TCP/IP stack. I say “it seems”, it is just my guess, but I have no real clue what is going on. Maybe the problem is on Windows side. We are investigating this.
Does anyone have any idea what might be a cause of this or which methods to use in order to investigate this? If any more information is needed, let me know.