• Toke Høiland-Jørgensen's avatar
    sched: Add Common Applications Kept Enhanced (cake) qdisc · 046f6fd5
    Toke Høiland-Jørgensen authored
    sch_cake targets the home router use case and is intended to squeeze the
    most bandwidth and latency out of even the slowest ISP links and routers,
    while presenting an API simple enough that even an ISP can configure it.
    
    Example of use on a cable ISP uplink:
    
    tc qdisc add dev eth0 cake bandwidth 20Mbit nat docsis ack-filter
    
    To shape a cable download link (ifb and tc-mirred setup elided)
    
    tc qdisc add dev ifb0 cake bandwidth 200mbit nat docsis ingress wash
    
    CAKE is filled with:
    
    * A hybrid Codel/Blue AQM algorithm, "Cobalt", tied to an FQ_Codel
      derived Flow Queuing system, which autoconfigures based on the bandwidth.
    * A novel "triple-isolate" mode (the default) which balances per-host
      and per-flow FQ even through NAT.
    * An deficit based shaper, that can also be used in an unlimited mode.
    * 8 way set associative hashing to reduce flow collisions to a minimum.
    * A reasonable interpretation of various diffserv latency/loss tradeoffs.
    * Support for zeroing diffserv markings for entering and exiting traffic.
    * Support for interacting well with Docsis 3.0 shaper framing.
    * Extensive support for DSL framing types.
    * Support for ack filtering.
    * Extensive statistics for measuring, loss, ecn markings, latency
      variation.
    
    A paper describing the design of CAKE is available at
    https://arxiv.org/abs/1804.07617, and will be published at the 2018 IEEE
    International Symposium on Local and Metropolitan Area Networks (LANMAN).
    
    This patch adds the base shaper and packet scheduler, while subsequent
    commits add the optional (configurable) features. The full userspace API
    and most data structures are included in this commit, but options not
    understood in the base version will be ignored.
    
    Various versions baking have been available as an out of tree build for
    kernel versions going back to 3.10, as the embedded router world has been
    running a few years behind mainline Linux. A stable version has been
    generally available on lede-17.01 and later.
    
    sch_cake replaces a combination of iptables, tc filter, htb and fq_codel
    in the sqm-scripts, with sane defaults and vastly simpler configuration.
    
    CAKE's principal author is Jonathan Morton, with contributions from
    Kevin Darbyshire-Bryant, Toke Høiland-Jørgensen, Sebastian Moeller,
    Ryan Mounce, Tony Ambardar, Dean Scarff, Nils Andreas Svee, Dave Täht,
    and Loganaden Velvindron.
    
    Testing from Pete Heist, Georgios Amanakis, and the many other members of
    the cake@lists.bufferbloat.net mailing list.
    
    tc -s qdisc show dev eth2
     qdisc cake 8017: root refcnt 2 bandwidth 1Gbit diffserv3 triple-isolate split-gso rtt 100.0ms noatm overhead 38 mpu 84
     Sent 51504294511 bytes 37724591 pkt (dropped 6, overlimits 64958695 requeues 12)
      backlog 0b 0p requeues 12
      memory used: 1053008b of 15140Kb
      capacity estimate: 970Mbit
      min/max network layer size:           28 /    1500
      min/max overhead-adjusted size:       84 /    1538
      average network hdr offset:           14
                        Bulk  Best Effort        Voice
       thresh      62500Kbit        1Gbit      250Mbit
       target          5.0ms        5.0ms        5.0ms
       interval      100.0ms      100.0ms      100.0ms
       pk_delay          5us          5us          6us
       av_delay          3us          2us          2us
       sp_delay          2us          1us          1us
       backlog            0b           0b           0b
       pkts          3164050     25030267      9530280
       bytes      3227519915  35396974782  12879808898
       way_inds            0            8            0
       way_miss           21          366           25
       way_cols            0            0            0
       drops               5            0            1
       marks               0            0            0
       ack_drop            0            0            0
       sp_flows            1            3            0
       bk_flows            0            1            1
       un_flows            0            0            0
       max_len         68130        68130        68130
    Tested-by: default avatarPete Heist <peteheist@gmail.com>
    Tested-by: default avatarGeorgios Amanakis <gamanakis@gmail.com>
    Signed-off-by: default avatarDave Taht <dave.taht@gmail.com>
    Signed-off-by: default avatarToke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    046f6fd5
Makefile 3.11 KB