• Tuong Lien's avatar
    tipc: reduce duplicate packets for unicast traffic · 382f598f
    Tuong Lien authored
    For unicast transmission, the current NACK sending althorithm is over-
    active that forces the sending side to retransmit a packet that is not
    really lost but just arrived at the receiving side with some delay, or
    even retransmit same packets that have already been retransmitted
    before. As a result, many duplicates are observed also under normal
    condition, ie. without packet loss.
    
    One example case is: node1 transmits 1 2 3 4 10 5 6 7 8 9, when node2
    receives packet #10, it puts into the deferdq. When the packet #5 comes
    it sends NACK with gap [6 - 9]. However, shortly after that, when
    packet #6 arrives, it pulls out packet #10 from the deferfq, but it is
    still out of order, so it makes another NACK with gap [7 - 9] and so on
    ... Finally, node1 has to retransmit the packets 5 6 7 8 9 a number of
    times, but in fact all the packets are not lost at all, so duplicates!
    
    This commit reduces duplicates by changing the condition to send NACK,
    also restricting the retransmissions on individual packets via a timer
    of about 1ms. However, it also needs to say that too tricky condition
    for NACKs or too long timeout value for retransmissions will result in
    performance reducing! The criterias in this commit are found to be
    effective for both the requirements to reduce duplicates but not affect
    performance.
    
    The tipc_link_rcv() is also improved to only dequeue skb from the link
    deferdq if it is expected (ie. its seqno <= rcv_nxt).
    Acked-by: default avatarYing Xue <ying.xue@windriver.com>
    Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarTuong Lien <tuong.t.lien@dektech.com.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    382f598f
msg.h 25.8 KB