• Toke Høiland-Jørgensen's avatar
    sch_cake: Add ingress mode · 7298de9c
    Toke Høiland-Jørgensen authored
    The ingress mode is meant to be enabled when CAKE runs downlink of the
    actual bottleneck (such as on an IFB device). The mode changes the shaper
    to also account dropped packets to the shaped rate, as these have already
    traversed the bottleneck.
    
    Enabling ingress mode will also tune the AQM to always keep at least two
    packets queued *for each flow*. This is done by scaling the minimum queue
    occupancy level that will disable the AQM by the number of active bulk
    flows. The rationale for this is that retransmits are more expensive in
    ingress mode, since dropped packets have to traverse the bottleneck again
    when they are retransmitted; thus, being more lenient and keeping a minimum
    number of packets queued will improve throughput in cases where the number
    of active flows are so large that they saturate the bottleneck even at
    their minimum window size.
    
    This commit also adds a separate switch to enable ingress mode rate
    autoscaling. If enabled, the autoscaling code will observe the actual
    traffic rate and adjust the shaper rate to match it. This can help avoid
    latency increases in the case where the actual bottleneck rate decreases
    below the shaped rate. The scaling filters out spikes by an EWMA filter.
    Signed-off-by: default avatarToke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7298de9c
sch_cake.c 49.1 KB