• Eric Dumazet's avatar
    tcp_cubic: make Hystart aware of pacing · ede656e8
    Eric Dumazet authored
    For years we disabled Hystart ACK train detection at Google
    because it was fooled by TCP pacing.
    
    ACK train detection uses a simple heuristic, detecting if
    we receive ACK past half the RTT, to exit slow start before
    hitting the bottleneck and experience massive drops.
    
    But pacing by design might delay packets up to RTT/2,
    so we need to tweak the Hystart logic to be aware of this
    extra delay.
    
    Tested:
     Added a 100 usec delay at receiver.
    
    Before:
    nstat -n;for f in {1..10}; do ./super_netperf 1 -H lpaa24 -l -4000000; done;nstat|egrep "Hystart"
       9117
       7057
       9553
       8300
       7030
       6849
       9533
      10126
       6876
       8473
    TcpExtTCPHystartTrainDetect     10                 0.0
    TcpExtTCPHystartTrainCwnd       1230               0.0
    
    After :
    nstat -n;for f in {1..10}; do ./super_netperf 1 -H lpaa24 -l -4000000; done;nstat|egrep "Hystart"
       9845
      10103
      10866
      11096
      11936
      11487
      11773
      12188
      11066
      11894
    TcpExtTCPHystartTrainDetect     10                 0.0
    TcpExtTCPHystartTrainCwnd       6462               0.0
    
    Disabling Hystart ACK Train detection gives similar numbers
    
    echo 2 >/sys/module/tcp_cubic/parameters/hystart_detect
    nstat -n;for f in {1..10}; do ./super_netperf 1 -H lpaa24 -l -4000000; done;nstat|egrep "Hystart"
      11173
      10954
      12455
      10627
      11578
      11583
      11222
      10880
      10665
      11366
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ede656e8
tcp_cubic.c 15.3 KB