Skip to content
  • Eric Dumazet's avatar
    tcp: add tcp_reset_xmit_timer() helper · 3f80e08f
    Eric Dumazet authored
    
    
    With EDT model, SRTT no longer is inflated by pacing delays.
    
    This means that RTO and some other xmit timers might be setup
    incorrectly. This is particularly visible with either :
    
    - Very small enforced pacing rates (SO_MAX_PACING_RATE)
    - Reduced rto (from the default 200 ms)
    
    This can lead to TCP flows aborts in the worst case,
    or spurious retransmits in other cases.
    
    For example, this session gets far more throughput
    than the requested 80kbit :
    
    $ netperf -H 127.0.0.2 -l 100 -- -q 10000
    MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.2 () port 0 AF_INET
    Recv   Send    Send
    Socket Socket  Message  Elapsed
    Size   Size    Size     Time     Throughput
    bytes  bytes   bytes    secs.    10^6bits/sec
    
    540000 262144 262144    104.00      2.66
    
    With the fix :
    
    $ netperf -H 127.0.0.2 -l 100 -- -q 10000
    MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 127.0.0.2 () port 0 AF_INET
    Recv   Send    Send
    Socket Socket  Message  Elapsed
    Size   Size    Size     Time     Throughput
    bytes  bytes   bytes    secs.    10^6bits/sec
    
    540000 262144 262144    104.00      0.12
    
    EDT allows for better control of rtx timers, since TCP has
    a better idea of the earliest departure time of each skb
    in the rtx queue. We only have to eventually add to the
    timer the difference of the EDT time with current time.
    
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3f80e08f