• Jon Maloy's avatar
    tipc: eliminate gap indicator from ACK messages · 02288248
    Jon Maloy authored
    When we increase the link send window we sometimes observe the
    following scenario:
    
    1) A packet #N arrives out of order far ahead of a sequence of older
       packets which are still under way. The packet is added to the
       deferred queue.
    2) The missing packets arrive in sequence, and for each 16th of them
       an ACK is sent back to the receiver, as it should be.
    3) When building those ACK messages, it is checked if there is a gap
       between the link's 'rcv_nxt' and the first packet in the deferred
       queue. This is always the case until packet number #N-1 arrives, and
       a 'gap' indicator is added, effectively turning them into NACK
       messages.
    4) When those NACKs arrive at the sender, all the requested
       retransmissions are done, since it is a first-time request.
    
    This sometimes leads to a huge amount of redundant retransmissions,
    causing a drop in max throughput. This problem gets worse when we
    in a later commit introduce variable window congestion control,
    since it drops the link back to 'fast recovery' much more often
    than necessary.
    
    We now fix this by not sending any 'gap' indicator in regular ACK
    messages. We already have a mechanism for sending explicit NACKs
    in place, and this is sufficient to keep up the packet flow.
    Acked-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    02288248
link.c 75.7 KB