Subject: Re: Marvell Kirkwood - MV643XX: near 100% UDP RX packet loss

From: Rick Jones <[email-masked]>
Date: Mon, 29 Dec 2014 15:25:15 -0800

On 12/27/2014 03:17 AM, Bruno Prémont wrote:
> On Thu, 25 December 2014 Rick Jones <[email-masked]> wrote:
>>> Why are so many packets being discarded?
>>
>> You should also check the netstat statistics, particularly UDP on the
>> receiving side.  Look before and after the test and see how they change,
>> if at all.
>
> Here they go.
>
> Summary of numbers:
> iperf UDP run, 5 seconds @ 1Gb/s
>   lost 71216/71776 packets
>
>                                    before      after      delta
> ethtool:
>   rx_packets:                      420001     688424     268423
>   rx_bytes:                     433251917  809803463  376551546
>   rx_errors:                            0          0          0
>   rx_dropped:                           0          0          0
>   bad_octets_received:                  0          0          0
>   bad_frames_received:                  0          0          0
>   rx_discard:                      159691     323123     163432
>   rx_overrun:                           0          0          0
> netstat, udp:
>   packets received                  15559      16137        578
>   packets to unknown port received     18         18          0
>   packet receive errors             41599      83890      42291
>   packets sent                      34697      34770         73
>   receive buffer errors                 0          0          0
>   send buffer errors                    0          0          0
>

Well, it certainly looks like a decent fraction of your lost traffic are 
UDP packet receive errors.  Overrunning the SO_RCVBUF on the receiving 
side presumably.  You can either start walking-down the transmission 
rate of the iperf client, or try a larger receive socket buffer size on 
the iperf server, though that will only help if those drops are from the 
receiving side being only occasionally slower than the sending side. 
You might also want to make sure the UDP datagrams being sent are huge 
and so getting fragmented.  All it takes is to lose one fragment of an 
IP datagram to render the entire datagram useless.

As for the rx_discard in the ethtool stats, someone more familiar with 
the hardware will have to describe the various reasons for that stat to 
be incremented.

rick jones