This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM625: UDP performance issues

Part Number: AM625
Other Parts Discussed in Thread: SK-AM62-LP

Tool/software:

We are implementing a udp protocol, but were surprised by the high packet loss we were observing. We therefore tried to run the enet_lwip_cpsw example since it includes iperf support.

Running the suggested command from the docs ( https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/latest/exports/docs/api_guide_am62x/EXAMPLES_ENET_LWIP_CPSW.html )

iperf -c 192.168.1.100 -i 5 -t 20 -d

works, although the throughput was maybe a bit lower than expected. However the udp test did not work out of the box, e.g.:

iperf -c 10.14.15.60 -i 1 -t 5 -b 10m -u

As far as I can tell, udp_iperf.c expects iperf to start with datagram_id 0, but in both my setups (one Mac and one linux, one with SK-AM62-LP, one with our own board), it starts with 1 (or, the network consistently drops the first packet, but that seems strange).

Changing line 205 to 

if (first && (recv_id == 1)) {
and line 174 to
udp_server_stats.expected_datagram_id = 1;
makes the first part of the test run at least. However, the test output is disappointing (although it matches the experience with our own program):

[  1]  0.0- 5.1 sec  11.9 MBytes  19.6 Mbits/sec  7536/16009 (47%)
[  1]  0.0- 5.1 sec  7506 datagrams received out-of-order

A packet loss of around 50% is quite consistent (and very high). Increasing (e.g. -b 40m) or decreasing the bandwidth doesn't make much difference until we go down to below 150k (ish). Then it (sometimes) improves a little bit (40%). At -b 10k 17%.

The high number of datagrams out of order I find even more surprising. My first thought is that something goes wrong in the incoming queue(?). I have tested both with a switch and the device connected directly to the PC.

Do you see the same behavior on your end? Do you know what causes this behavior and if there is a way to fix it?