[Cake] [PATCH 0/3] Add Common Applications Kept Enhanced (sch_cake) qdisc

Sebastian Moeller moeller0 at gmx.de
Thu Nov 23 16:43:45 EST 2017


Hi Dave,

So it seems that 9789742cfc596d48583ba4cdbc8f38d026121fa6 from the beginning of this year stil worked okay (this is also the version that is currently in lede and also seems to work for ar71xx).

moeller at work-horse:~/CODE/sch_cake$ git checkout 9789742cfc596d48583ba4cdbc8f38d026121fa6

moeller at work-horse:~/CODE/sch_cake$ sudo ../iproute2-cake-next/tc/tc qdisc delete root  dev eth0 ; sudo ../iproute2-cake-next/tc/tc qdisc add root dev eth0 cake ethernet ; ../iproute2-cake-next/tc/tc -s qdisc show dev eth0
sudo: unable to resolve host work-horse
RTNETLINK answers: No such file or directory
sudo: unable to resolve host work-horse
qdisc cake 801b: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms noatm overhead 38 via-ethernet total_overhead 38 hard_header_len 14 mpu 84 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
 memory used: 0b of 15140Kb
 capacity estimate: 0bit
                 Bulk   Best Effort      Voice
  thresh          0bit        0bit        0bit
  target         5.0ms       5.0ms       5.0ms
  interval     100.0ms     100.0ms      10.0ms
  pk_delay         0us         0us         0us
  av_delay         0us         0us         0us
  sp_delay         0us         0us         0us
  pkts               0           0           0
  bytes              0           0           0
  way_inds           0           0           0
  way_miss           0           0           0
  way_cols           0           0           0
  drops              0           0           0
  marks              0           0           0
  sp_flows           0           0           0
  bk_flows           0           0           0
  un_flows           0           0           0
  max_len            0           0           0

moeller at work-horse:~/CODE/sch_cake$ sudo ../iproute2-cake-next/tc/tc qdisc delete root  dev eth0 ; sudo ../iproute2-cake-next/tc/tc qdisc add root dev eth0 cake overhead 11 ; ../iproute2-cake-next/tc/tc -s qdisc show dev eth0
sudo: unable to resolve host work-horse
sudo: unable to resolve host work-horse
qdisc cake 801c: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms noatm overhead 11 via-ethernet total_overhead 11 hard_header_len 14 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
 memory used: 0b of 15140Kb
 capacity estimate: 0bit
                 Bulk   Best Effort      Voice
  thresh          0bit        0bit        0bit
  target         5.0ms       5.0ms       5.0ms
  interval     100.0ms     100.0ms      10.0ms
  pk_delay         0us         0us         0us
  av_delay         0us         0us         0us
  sp_delay         0us         0us         0us
  pkts               0           0           0
  bytes              0           0           0
  way_inds           0           0           0
  way_miss           0           0           0
  way_cols           0           0           0
  drops              0           0           0
  marks              0           0           0
  sp_flows           0           0           0
  bk_flows           0           0           0
  un_flows           0           0           0
  max_len            0           0           0


Hum-ho, off to try my first git bisect session, I guess.

Best Regards



> On Nov 22, 2017, at 19:03, Dave Taht <dave.taht at gmail.com> wrote:
> 
> at what commit it worked properly?
> 
> On Wed, Nov 22, 2017 at 3:02 AM, Sebastian Moeller <moeller0 at gmx.de> wrote:
>> Hi All,
>> 
>> Tl;dr: Automatic accounting of the kernel added dev->hard_header_len seems currently broken at least in the cobalt branch...
>> 
>> 
>> as far as I can tell overhead accounting is still busted:
>> 
>> 
>> user at work-horse:~/CODE/sch_cake$ sudo ../tc-adv/tc/tc qdisc delete dev eth0 root; sudo ../tc-adv/tc/tc qdisc replace dev eth0 root cake raw overhead 5; ../tc-adv/tc/tc -s qdisc show dev eth0
>> sudo: unable to resolve host work-horse
>> sudo: unable to resolve host work-horse
>> qdisc cake 8014: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms noatm overhead 19 via-ethernet total_overhead 19 hard_header_len 14
>> Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
>> backlog 0b 0p requeues 0
>> memory used: 0b of 15140Kb
>> capacity estimate: 0bit
>>                 Bulk   Best Effort      Voice
>>  thresh          0bit        0bit        0bit
>>  target         5.0ms       5.0ms       5.0ms
>>  interval     100.0ms     100.0ms      10.0ms
>>  pk_delay         0us         0us         0us
>>  av_delay         0us         0us         0us
>>  sp_delay         0us         0us         0us
>>  pkts               0           0           0
>>  bytes              0           0           0
>>  way_inds           0           0           0
>>  way_miss           0           0           0
>>  way_cols           0           0           0
>>  drops              0           0           0
>>  marks              0           0           0
>>  ack_drop           0           0           0
>>  sp_flows           0           0           0
>>  bk_flows           0           0           0
>>  un_flows           0           0           0
>>  max_len            0           0           0
>> 
>> user at work-horse:~/CODE/sch_cake$ sudo ../tc-adv/tc/tc qdisc delete dev eth0 root; sudo ../tc-adv/tc/tc qdisc replace dev eth0 root cake overhead 5; ../tc-adv/tc/tc -s qdisc show dev eth0
>> sudo: unable to resolve host work-horse
>> sudo: unable to resolve host work-horse
>> qdisc cake 8015: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms raw total_overhead 14 hard_header_len 14
>> Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
>> backlog 0b 0p requeues 0
>> memory used: 0b of 15140Kb
>> capacity estimate: 0bit
>>                 Bulk   Best Effort      Voice
>>  thresh          0bit        0bit        0bit
>>  target         5.0ms       5.0ms       5.0ms
>>  interval     100.0ms     100.0ms      10.0ms
>>  pk_delay         0us         0us         0us
>>  av_delay         0us         0us         0us
>>  sp_delay         0us         0us         0us
>>  pkts               0           0           0
>>  bytes              0           0           0
>>  way_inds           0           0           0
>>  way_miss           0           0           0
>>  way_cols           0           0           0
>>  drops              0           0           0
>>  marks              0           0           0
>>  ack_drop           0           0           0
>>  sp_flows           0           0           0
>>  bk_flows           0           0           0
>>  un_flows           0           0           0
>>  max_len            0           0           0
>> 
>> user at work-horse:~/CODE/sch_cake$
>> 
>> 
>> The first seems okay, but the second should not have reported "raw" but rather total_overhead 5 hard_header_len 14 if I understand the intention of the overhead keyword correctly. This also affects the keywords like conservative:
>> 
>> user at work-horse:~/CODE/sch_cake$ sudo ../tc-adv/tc/tc qdisc delete dev eth0 root; sudo ../tc-adv/tc/tc qdisc replace dev eth0 root cake conservative; ../tc-adv/tc/tc -s qdisc show dev eth0
>> sudo: unable to resolve host work-horse
>> sudo: unable to resolve host work-horse
>> qdisc cake 8019: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms atm overhead 14 via-ethernet total_overhead 14 hard_header_len 14
>> Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
>> backlog 0b 0p requeues 0
>> memory used: 0b of 15140Kb
>> capacity estimate: 0bit
>>                 Bulk   Best Effort      Voice
>>  thresh          0bit        0bit        0bit
>>  target         5.0ms       5.0ms       5.0ms
>>  interval     100.0ms     100.0ms      10.0ms
>>  pk_delay         0us         0us         0us
>>  av_delay         0us         0us         0us
>>  sp_delay         0us         0us         0us
>>  pkts               0           0           0
>>  bytes              0           0           0
>>  way_inds           0           0           0
>>  way_miss           0           0           0
>>  way_cols           0           0           0
>>  drops              0           0           0
>>  marks              0           0           0
>>  ack_drop           0           0           0
>>  sp_flows           0           0           0
>>  bk_flows           0           0           0
>>  un_flows           0           0           0
>>  max_len            0           0           0
>> 
>> user at work-horse:~/CODE/sch_cake$ sudo ../tc-adv/tc/tc qdisc delete dev eth0 root; sudo ../tc-adv/tc/tc qdisc replace dev eth0 root cake raw conservative; ../tc-adv/tc/tc -s qdisc show dev eth0
>> sudo: unable to resolve host work-horse
>> sudo: unable to resolve host work-horse
>> qdisc cake 801a: root refcnt 6 unlimited diffserv3 triple-isolate rtt 100.0ms atm overhead 62 via-ethernet total_overhead 62 hard_header_len 14
>> Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
>> backlog 0b 0p requeues 0
>> memory used: 0b of 15140Kb
>> capacity estimate: 0bit
>>                 Bulk   Best Effort      Voice
>>  thresh          0bit        0bit        0bit
>>  target         5.0ms       5.0ms       5.0ms
>>  interval     100.0ms     100.0ms      10.0ms
>>  pk_delay         0us         0us         0us
>>  av_delay         0us         0us         0us
>>  sp_delay         0us         0us         0us
>>  pkts               0           0           0
>>  bytes              0           0           0
>>  way_inds           0           0           0
>>  way_miss           0           0           0
>>  way_cols           0           0           0
>>  drops              0           0           0
>>  marks              0           0           0
>>  ack_drop           0           0           0
>>  sp_flows           0           0           0
>>  bk_flows           0           0           0
>>  un_flows           0           0           0
>>  max_len            0           0           0
>> 
>> user at work-horse:~/CODE/sch_cake$
>> 
>> 
>> So in other words currently the automatic accounting for the kernel added hard_header_len seems broken as the raw keyword disables that functionality. I will try to look deeper into that, but I guess with my limited C skills this might do more harm than good...
>> 
>> Best Regards
>>        Sebastian
>> 
>> 
>>> On Nov 22, 2017, at 01:09, Dave Taht <dave.taht at gmail.com> wrote:
>>> 
>>> sch_cake is intended to squeeze the most bandwidth and lowest 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 an ISP uplink:
>>> 
>>> tc qdisc add dev eth0 cake bandwidth 20Mbit nat docsis ack-filter
>>> 
>>> Cake can also be used in unlimited mode to drive packets at the speed
>>> of the underlying link.
>>> 
>>> 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 unique "triple-isolate" mode (the default) which balances per-flow
>>> and per-host flow FQ even through NAT.
>>> * An integral deficit based shaper with extensive dsl and docsis support
>>> that can also be used in unlimited mode.
>>> * 8 way set associative queuing to reduce flow collisions to a minimum.
>>> * A reasonable interpretation of various diffserv latency/loss tradeoffs.
>>> * Support for washing diffserv for entering and exiting traffic.
>>> * Perfect support for interacting with Docsis 3.0 shapers.
>>> * Extensive support for DSL framing types.
>>> * (New) Support for ack filtering.
>>> - 20 % better throughput at a 16x1 down/up ratio on the rrul test.
>>> * Extensive statistics for measuring loss, ecn markings, latency variation.
>>> 
>>> There are some features still considered experimental, notably the
>>> ingress_autorate bandwidth estimator and cobalt itself.
>>> 
>>> Various versions shipping 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 easier configuration.
>>> 
>>> Cake's principal author is Jonathan Morton, with contributions from
>>> Kevin Darbyshire-Bryant, Toke Høiland-Jørgensen, Sebastian Moeller,
>>> Ryan Mounce, Dean Scarff, Guido Sarducci, Nils Andreas Svee, Dave Täht, and
>>> Loganaden Velvindron.
>>> 
>>> Dave Taht (3):
>>> pkt_sched.h: add support for sch_cake API
>>> Add Common Applications Kept Enhanced (sch_cake) qdisc
>>> Add support for building the new cake qdisc
>>> 
>>> include/net/cobalt.h           |  152 +++
>>> include/uapi/linux/pkt_sched.h |   58 +
>>> net/sched/Kconfig              |   11 +
>>> net/sched/Makefile             |    1 +
>>> net/sched/sch_cake.c           | 2551 ++++++++++++++++++++++++++++++++++++++++
>>> 5 files changed, 2773 insertions(+)
>>> create mode 100644 include/net/cobalt.h
>>> create mode 100644 net/sched/sch_cake.c
>>> 
>>> --
>>> 2.7.4
>>> 
>>> _______________________________________________
>>> Cake mailing list
>>> Cake at lists.bufferbloat.net
>>> https://lists.bufferbloat.net/listinfo/cake
>> 
> 
> 
> 
> -- 
> 
> Dave Täht
> CEO, TekLibre, LLC
> http://www.teklibre.com
> Tel: 1-669-226-2619



More information about the Cake mailing list