[Cake] overhead and mpu
Sebastian Moeller
moeller0 at gmx.de
Thu Sep 7 04:07:44 EDT 2017
Hi Dennis,
> On Sep 7, 2017, at 09:58, Dennis Fedtke <dennisfedtke at gmail.com> wrote:
>
> Hi Sebastian,
>
> here is the outout:
>
> config queue
> option debug_logging '0'
> option interface 'eth1.100'
> option qdisc 'cake'
> option enabled '1'
> option qdisc_advanced '1'
> option qdisc_really_really_advanced '1'
> option linklayer 'none'
> option egress_ecn 'NOECN'
> option upload '19000'
> option verbosity '5'
> option ingress_ecn 'ECN'
> option script 'layer_cake.qos'
> option download '150000'
> option squash_ingress '1'
> option squash_dscp '1'
> option iqdisc_opts 'docsis nat'
> option eqdisc_opts 'docsis nat'
Ah, there goes my typo or forgotten keyword hypothesis...
I bet the reason is that on the IFB the vlan tag might not be visible, while on egress it is; unexpectedly cake will not report the overhead if the specified overhead equals the hard_header_len (@Jonathan, what is the rationale for the behavior? could you live with reporting the hard_header_len unconditionally somewhere in the "tc -s qdisc" output?). Since with a vlan tag the kernel accounts for 18 bytes (a vlan tag takes 4 bytes and 14+4=18) cake simply omits this during reporting. Now why the kernel deos not seem to see/account for the VLAN tag on ingress I do not know. But this certainly shows that cake does the right thing by automatically adjusting for hard_header_len... this certainly is more complicated than it should be...
>
> But also see my last email please.
>
> it seems that both devices use different default overhead (14 vs 18)
I agree, but I have no time to dive into the kernel sources to figure out why...
Best Regards
Sebastian
>
> Thanks.
>
>
> Am 07.09.2017 um 09:47 schrieb Sebastian Moeller:
>> Hi Dennis,
>>
>>> On Sep 7, 2017, at 06:11, Dennis Fedtke <dennisfedtke at gmail.com> wrote:
>>>
>>> Hi everyone!
>>>
>>> thanks for your answers again.
>>>
>>> So what about from should i expect from using the docsis keyword?
>>> (This layer cake script + nat docsis set in advanced config)
>>>
>>> tc -s qdisc show dev eth1.100:
>>> qdisc cake 8064: root refcnt 2 bandwidth 19Mbit diffserv3 triple-isolate nat rtt 100.0ms raw mpu 64
>>> Sent 246233450 bytes 1316430 pkt (dropped 65, overlimits 126706 requeues 0)
>>> backlog 0b 0p requeues 0
>>> memory used: 2372672b of 4Mb
>>> capacity estimate: 19Mbit
>>> Bulk Best Effort Voice
>>> thresh 1187Kbit 19Mbit 4750Kbit
>>> target 15.3ms 5.0ms 5.0ms
>>> interval 110.3ms 100.0ms 10.0ms
>>> pk_delay 0us 298us 10us
>>> av_delay 0us 13us 2us
>>> sp_delay 0us 1us 1us
>>> pkts 0 1315692 803
>>> bytes 0 246260830 59314
>>> way_inds 0 733 0
>>> way_miss 0 5012 29
>>> way_cols 0 0 0
>>> drops 0 65 0
>>> marks 0 0 0
>>> sp_flows 0 1 0
>>> bk_flows 0 0 0
>>> un_flows 0 0 0
>>> max_len 0 1514 405
>>>
>>> tc -s qdisc show dev ifb4eth1.100
>>> qdisc cake 8065: root refcnt 2 bandwidth 150Mbit diffserv3 triple-isolate nat wash rtt 100.0ms noatm overhead 18 via-ethernet mpu 64
>>> Sent 869520280 bytes 2153104 pkt (dropped 30, overlimits 270811 requeues 0)
>>> backlog 0b 0p requeues 0
>>> memory used: 624320b of 7500000b
>>> capacity estimate: 150Mbit
>>> Bulk Best Effort Voice
>>> thresh 9375Kbit 150Mbit 37500Kbit
>>> target 5.0ms 5.0ms 5.0ms
>>> interval 100.0ms 100.0ms 10.0ms
>>> pk_delay 121us 448us 1us
>>> av_delay 40us 158us 0us
>>> sp_delay 2us 2us 0us
>>> pkts 58805 1362429 731900
>>> bytes 77433974 748216627 43914060
>>> way_inds 0 118167 0
>>> way_miss 5 5911 3
>>> way_cols 0 0 0
>>> drops 1 29 0
>>> marks 0 0 0
>>> sp_flows 0 0 0
>>> bk_flows 0 0 1
>>> un_flows 0 0 0
>>> max_len 1486 1514 90
>>>
>>> Why is there no overhead showing for egress?
>> Could you post post the output of "cat /etc/config/sqm" (assuming you use LEDE/OpenWrt); i have a hunch that you might have forgotten to put the docsis keyword into both advanced configuration fields (or there is a typo n one of those words).
>>
>>
>>> Why is there overhead18 + via-ethernet showing for ingress?
>> This tells you that cake is using ethernet_payload + 18 bytes overhead, and that it automatically effectively subtracted the 14 bytes overhead the kernel added before applying its 18 bytes (so that you do not need to worry about how much the kernel added).
>>
>> BTW, cake reports the maximum of the pkt_len field of all packets as max_len and on ethernet interfaces the kernel automatically adds 14 bytes (already to skb->len), this is why you see max_len 1514 instead of 1500. If you use tc's stab method for overhead accounting things will look different, as stab will add the full header size to pkt_len, so using tc stab you would probably see 1532 for an ecplicit overhead of 18 (as tc stab does not take the already accounted for header into account so if you request 18 on an ethernet interface you will effectively get 18+14 = 32.) It really is a great feature of cake to undo the kernel's automagic length adjustment so that one can request overhead on top of the ethernet payload/the IP packets.
>>
>> Best Regards
>> Sebastian
>>
>>> Thanks again =)
>>>
>
More information about the Cake
mailing list