• Gerrit Renker's avatar
    dccp ccid-3: Preventing Oscillations · a3cbdde8
    Gerrit Renker authored
    This implements [RFC 3448, 4.5], which performs congestion avoidance behaviour
    by reducing the transmit rate as the queueing delay (measured in terms of
    long-term RTT) increases.
    
    Oscillation can be turned on/off via a module option (do_osc_prev) and via sysfs
    (using mode 0644), the default is off.
    
    Overflow analysis:
    ------------------
     * oscillation prevention is done after update_x(), so that t_ipi <= 64000;
     * hence the multiplication "t_ipi * sqrt(R_sample)" needs 64 bits;
     * done using u64 for sqrt_sample and explicit typecast of t_ipi;
     * the divisor, R_sqmean, is non-zero because oscillation prevention is first
       called when receiving the second feedback packet, and tfrc_scaled_rtt() > 0.
    
    A detailed discussion of the algorithm (with plots) is on
    http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/ccid3/sender_notes/oscillation_prevention/
    
    The algorithm has negative side effects:
      * when allowing to decrease t_ipi (leads to a large RTT) and
      * when using it during slow-start;
    both uses are therefore disabled.
    Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    a3cbdde8
ccid3.c 25.3 KB