CAKE w/ DSCPs - cake-qos-simple

Yes, but think about a "good queue" as sort of a shock absorber that is beneficial:
Say 5 full sized packets are sent at 1Gbps without any gap and hit a cake instance with 12 Mbps egress limit (so each packet takes roughly 1ms to transmit), the first is passed on to the next stage, while the other 4 are now entering a queue waiting for their transmission-slot. If we would allow no queue we would need to drop those immediately, as this sort of transient queueing is to be expected at places where the capacity decreases... now we need to strike a deal, so we prefer lowest latency for those packets that win the lottery and hit cake when the queue is empty at the cost that other packets encounter extreme latency (being dropped and having to be retransmitted takes quite a while) and that the throughput tanks (all the dropped packets likely will be retransmitted), or do we accept some transient queueing to smooth things out a bit? Say in our example if after the five packets there would be no more packet for the next second, should we really drop 4 of those or accept that the last of these will encounter ~4ms queueing delay? I think you get where I am going with this :wink:

That is something that I think is named strict rate policing, and it is quite unpopular, as it has severe effects on throughput and introduces unpleasantly high packet loss rates, and loss recovery than introduces delay into the flows again (not by queuing in the bottleneck, but unacknowledged packets stay queued in the senders network stack, assuming something like TCP). The idea behind AQMs is to not wait for a queue to overflow before dropping, but to selectively use drops to signal flows to reduce their sending rate... to do that gently one better waits for a flow to actually react, and a flow can at best respond to a signal in a single roundtrip time (the drop/ECN signal needs to travel from the AQM to the remote end point, and the remote endpoint needs to send that back to the other side, that needs to change its sending rate, and this changed rate needs to arrive at the AQM location), but that means that one should be able to queue up the excess rate of a flow for a full RTT of that flow.

Ah, so in my experience with codel based droppers the average delay often ends up in the range of ~2 times target or ~10ms for the default target of 5ms... this has reasons, like codel (all of codel, fq_codel, cake use the same logic here) will only engage when the minimal sojourn time encountered says above "target" magnitude for a duration of "interval"*, but that likely means that the actual sojourn times exceed target considerably, and these longer sojourn time samples are averaged with the short sojourn time samples from flows below their capacity share...

So, at least av_delay and peak_delay under load likely will show higher values than target...

*) If codel engages that way it will then change the value of interval reducing it, so if that flow stays above threshold it will get the next signal quicker...

1 Like

BTW, @dtaht wrote a nice explanation for the cake statistics over here:

1 Like

I see much larger delays than that when I max my download. 1Gb/s, 150 flows:

@Lynx
I have tired your script today on a FRITZBox 7530 with a internal DSL modem with a fibre PPPoE connection, However it seems that my upload speed is.my download speed on the script.

I did select the pppoe-wan interface.

  1. How could i fix this to make it work with a DSL/PPPoE?
  2. If there a way i can force a my google pixel to use VoWiFI on port 500/4500 with my devices IP (have set a static DHCP on mobile devices) as my google pixel 8 dos not make any DSCP requests for EF, I did see a MAC address but this would mean all my traffic is bulked, right?

heres is the log if i kept wan.

Setting up nftables rules for cake-qos-simple using: /root/cake-qos-simple/nft.rules.

Setting up ingress handle for interface: 'wan'.
Cannot find device "wan"

No dl_if specified, so setting up appropriate IFB.

Creating IFB device: 'ifb-wan'.

Setting interface: 'ifb-wan' up.

Setting up tc filter to restore DSCPs from conntrack on ingress packets on interface: 'wan' and redirecting to IFB interface: 'ifb-wan'.
Cannot find device "wan"

Setting up CAKE on interface: 'wan' with bandwidth: '20Mbit/s' and options: 'diffserv4 dual-srchost nonat wash no-ack-filter split-gso rtt 100ms pppoe-ptm ether-vlan noatm'.
Cannot find device "wan"

Setting up tc filter to restore DSCPs from conntrack on egress packets on interface 'wan'.
Cannot find device "wan"

Setting up CAKE on interface: 'ifb-wan' with bandwidth: '20Mbit/s' and options: 'diffserv4 dual-dsthost nonat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34'.

Started cake-qos-simple.
root@DSL:~# /etc/init.d/cake-qos-simple stop
Removing ingress handle for interface: 'wan'.
Cannot find device "wan"

Removing CAKE on interface: 'wan'.
Cannot find device "wan"

Removing CAKE on interface: 'ifb-wan'.

Setting IFB interface: 'ifb-wan' down.

Removing IFB interface: 'ifb-wan'.

Removing nftables rules for cake-qos-simple

Stopped cake-qos-simple.

@francisuk1989 I'm not sure how that would work. @moeller0 in respect of:

	ul_if=wan # upload interface	ul_if=wan # upload interface
	dl_if=""  # download interface override (normally left blank and IFB derived for $ul_if ingress)

	cake_ul_rate_Mbps=20  # cake upload rate in Mbit/s
	cake_dl_rate_Mbps=20 # cake download rate in Mbit/s

	cake_ul_options="diffserv4 triple-isolate nat wash ack-filter noatm overhead 0"
	cake_dl_options="diffserv4 triple-isolate nat nowash ingress no-ack-filter noatm overhead 0"

	overwrite_ul_ect_0_val="" # overwrite upload ECT(1) values with decimal value (e.g. 0, 1, 2, 3), else "" to disable
	overwrite_ul_ect_1_val="" # overwrite upload ECT(0) values with decimal value (e.g. 0, 1, 2, 3), else "" to disable
	overwrite_dl_ect_0_val="" # overwrite download ECT(1) values with decimal value (e.g. 0, 1, 2, 3), else "" to disable
	overwrite_dl_ect_1_val="" # overwrite download ECT(1) values with decimal value (e.g. 0, 1, 2, 3), else "" to disable

for an internal DSL modem with fibre PPPoE would you expect the above to be reversed?

@francisuk1989 if it's just reversal then perhaps the solution is just to flip everything around (swap upload and download), no?

So you can assign voice DSCPs based on MAC addresses like how I did in respect of bulk DSCPs for IoT devices:

	# local MAC addresses to set to bulk (e.g. IoT devices)
	# replace MAC address below with comma separated entries
	define BULK_MACS = {
	        02:00:00:00:00:00
	}

	chain classify-dscp {
	
	         meta l4proto . th dport vmap @rules_proto_dport
	
	         # IoT devices (uncomment to use)
	         ether saddr \$BULK_MACS goto dscp_set_bulk
	
	}

Namely define a new entry like:

VOICE_MACS = { ... 

and then:

ether saddr \$BULK_MACS goto dscp_set_bulk
ether saddr \$VOICE_MACS goto dscp_set_voice

Yes.
I dont know this this is any help but qosify and sqm seems to working the right way, @elan 's script what can be found here https://github.com/Last-times/CAKE-QoS-Script-OpenWrt/blob/main/cake.sh and based on nftables however seems to crash out my router where i would get internet but if went on the openwrt forums it just crashes but dosnt reboot? strange eh? - Now if i did eth0 what is my LAN, i get reversed like cake-qos-simple

Might be something to do with is? I seen something like this in SQM, Would this work do you think as this worked for me in SQM?

nat dual-dsthost ingress diffserv4
nat dual-srchost ack-filter diffserv4

I'd just stick with the defaults but make sure the upload/download are appropriate for the true state. So you might need to swap these around if your interface is reversed for some reason.

I hope @moeller0 can offer more insight here since I'm not feeling so sure about it.

Good news @Lynx
managed to fix it by;

cake_ul_options="diffserv4 dual-srchost nonat wash no-ack-filter split-gso rtt 100ms pppoe-ptm ether-vlan noatm"
cake_dl_options="diffserv4 dual-dsthost nonat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34"

The upload part, i got from https://allysmith.uk/vdsl2-overheads what suites as this person is also in UK and with openreach. :smile:

logs, i used pppoe-wan, There is dsl0 but it might work also. Have submitted a pull request but ill leave it upto your if you wont to help others?

root@DSL:~# /etc/init.d/cake-qos-simple start

Checking validity of nft.rules file.
Validity check of nft.rules file passed.

Setting up nftables rules for cake-qos-simple using: /root/cake-qos-simple/nft.rules.

Setting up ingress handle for interface: 'pppoe-wan'.

No dl_if specified, so setting up appropriate IFB.

Creating IFB device: 'ifb-pppoe-wan'.

Setting interface: 'ifb-pppoe-wan' up.

Setting up tc filter to restore DSCPs from conntrack on ingress packets on interface: 'pppoe-wan' and redirecting to IFB interface: 'ifb-pppoe-wan'.

Setting up CAKE on interface: 'pppoe-wan' with bandwidth: '10Mbit/s' and options: 'diffserv4 dual-srchost nonat wash no-ack-filter split-gso rtt 100ms pppoe-ptm ether-vlan noatm'.

Setting up tc filter to restore DSCPs from conntrack on egress packets on interface 'pppoe-wan'.

Setting up CAKE on interface: 'ifb-pppoe-wan' with bandwidth: '20Mbit/s' and options: 'diffserv4 dual-dsthost nonat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34'.

Could you please post the output of the following commands:

  1. ifstatus wan | grep -e device
  2. tc -s qdisc

just to check how the cake instances end up being configured, and what OpenWrt considers the wan interface.

The dsl0.101 will be my ISP using VLAN 101 on a VDSL 2, The router is based on `ipq40xx/generic

Keep it mind, I did a silly 10/20 just to double check the right DL and UL was right and not reversed

root@DSL:~# ifstatus wan | grep -e device
        "l3_device": "pppoe-wan",
        "device": "dsl0.101",
root@DSL:~# tc -s qdisc

qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc mq 0: dev eth0 root
 Sent 1001712960 bytes 758314 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev eth0 parent :4 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 843176756 bytes 585921 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 7570 drop_overlimit 0 new_flow_count 36 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :3 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 58512700 bytes 65519 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 3028 drop_overlimit 0 new_flow_count 2 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 40109990 bytes 50300 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 1274 drop_overlimit 0 new_flow_count 14 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :1 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 59913514 bytes 56574 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 215 drop_overlimit 0 new_flow_count 1 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev lan1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan2 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan3 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan4 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy0-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy1-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev dsl0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 138709829 bytes 815662 pkt (dropped 5, overlimits 0 requeues 1050)
 backlog 0b 0p requeues 1050
  maxpacket 1514 drop_overlimit 0 new_flow_count 834 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev dsl0.101 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 1: dev pppoe-wan root refcnt 2 bandwidth 10Mbit diffserv4 dual-srchost nonat wash no-ack-filter split-gso rtt 100ms noatm overhead 34
 Sent 49626469 bytes 565601 pkt (dropped 10495, overlimits 53875 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 177408b of 4Mb
 capacity estimate: 10Mbit
 min/max network layer size:           28 /    1492
 min/max overhead-adjusted size:       62 /    1526
 average network hdr offset:            0

                   Bulk  Best Effort        Video        Voice
  thresh        625Kbit       10Mbit        5Mbit     2500Kbit
  target         29.1ms          5ms          5ms       7.29ms
  interval        124ms        100ms        100ms        102ms
  pk_delay         45us       8.48ms         25us         29us
  av_delay          0us       1.63ms          1us         11us
  sp_delay          0us        168us          1us         11us
  backlog            0b           0b           0b           0b
  pkts                5       575908           10          173
  bytes             200     65253588          760        18021
  way_inds            0          433            0            0
  way_miss            2         1716           10           11
  way_cols            0            0            0            0
  drops               0        10495            0            0
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            1            1            1            0
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len            40        16018           76          352
  quantum           300          305          300          300

qdisc ingress ffff: dev pppoe-wan parent ffff:fff1 ----------------
 Sent 821549398 bytes 586997 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 1: dev ifb-pppoe-wan root refcnt 2 bandwidth 20Mbit diffserv4 dual-dsthost nonat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34
 Sent 805470979 bytes 576197 pkt (dropped 10800, overlimits 1100826 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 461504b of 4Mb
 capacity estimate: 20Mbit
 min/max network layer size:           30 /    1492
 min/max overhead-adjusted size:       64 /    1526
 average network hdr offset:            0

                   Bulk  Best Effort        Video        Voice
  thresh       1250Kbit       20Mbit       10Mbit        5Mbit
  target         14.5ms          5ms          5ms          5ms
  interval        110ms        100ms        100ms        100ms
  pk_delay       1.22ms       7.49ms         14ms       25.2ms
  av_delay         57us       5.43ms       4.01ms        6.9ms
  sp_delay         13us          9us          9us         19us
  backlog            0b           0b           0b           0b
  pkts               50       578085         2942         5920
  bytes           25057    814020249      2295710      5208382
  way_inds            0          478            0            0
  way_miss            5         1482          159          201
  way_cols            0            0            0            0
  drops               0        10747           11           42
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            1            1            1            2
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len          1492         1492         1492         1452
  quantum           300          610          305          300

Seems about right... after all this is not rocket science...

According to this things should work (you might want to add the ack-filter keyword to the upload) and both qdiscs actually see traffic.

So please run the following capacity-test and post a screenshot off the full page after it finished (ATTENTION, by default this contains your IP address which you might want to redact before posting, or not):

Mmmh, there is something quite off here, with a shaper setting on 20/10 Mbps you should not be able to get a 60/16 Mbps result... Could you hypothesise what is going on?

I tried 20/10 at first to test if the download and upload was working fine.
but i have now added to my proper connection speeds (95%) eatch way.

Ah, could I then ask you to re-post the output of
tc -s qdisc
again, please? That way we can compare it against the test result...

Sure :slight_smile:

root@DSL:~# tc -s qdisc

qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc mq 0: dev eth0 root
 Sent 8318430051 bytes 5755111 pkt (dropped 0, overlimits 0 requeues 2)
 backlog 0b 0p requeues 2
qdisc fq_codel 0: dev eth0 parent :4 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 2577416339 bytes 1803910 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 7570 drop_overlimit 0 new_flow_count 105 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :3 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 2066511006 bytes 1452458 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 3028 drop_overlimit 0 new_flow_count 9 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 304570471 bytes 234080 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 1274 drop_overlimit 0 new_flow_count 17 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :1 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 3369932235 bytes 2264663 pkt (dropped 0, overlimits 0 requeues 2)
 backlog 0b 0p requeues 2
  maxpacket 1506 drop_overlimit 0 new_flow_count 21 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev lan1 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan2 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan3 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev lan4 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy0-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev phy1-ap0 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev dsl0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 4Mb ecn drop_batch 64
 Sent 480187549 bytes 5006688 pkt (dropped 5, overlimits 0 requeues 8705)
 backlog 0b 0p requeues 8705
  maxpacket 1514 drop_overlimit 0 new_flow_count 1696 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc noqueue 0: dev dsl0.101 root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 1: dev pppoe-wan root refcnt 2 bandwidth 17Mbit diffserv4 dual-srchost nonat wash ack-filter split-gso rtt 100ms noatm overhead 34
 Sent 55529429 bytes 1206053 pkt (dropped 336, overlimits 11130 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 701120b of 4Mb
 capacity estimate: 17Mbit
 min/max network layer size:           29 /    1492
 min/max overhead-adjusted size:       63 /    1526
 average network hdr offset:            0

                   Bulk  Best Effort        Video        Voice
  thresh       1062Kbit       17Mbit     8500Kbit     4250Kbit
  target         17.1ms          5ms          5ms          5ms
  interval        112ms        100ms        100ms        100ms
  pk_delay       2.75ms       14.1ms          0us         42us
  av_delay        285us       1.21ms          0us         19us
  sp_delay         19us         12us          0us         13us
  backlog            0b           0b           0b           0b
  pkts           129776      1076087            0          526
  bytes         7285097     48222506            0        44247
  way_inds           18           25            0            0
  way_miss          410          722            0          353
  way_cols            0            0            0            0
  drops               0            6            0            0
  marks               0            0            0            0
  ack_drop           23          307            0            0
  sp_flows            0            0            0            2
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len          1963        14760            0          341
  quantum           300          518          300          300

qdisc ingress ffff: dev pppoe-wan parent ffff:fff1 ----------------
 Sent 2246384304 bytes 1551760 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc cake 1: dev ifb-pppoe-wan root refcnt 2 bandwidth 65Mbit diffserv4 dual-dsthost nonat nowash ingress no-ack-filter split-gso rtt 100ms noatm overhead 34
 Sent 2244164887 bytes 1550225 pkt (dropped 1535, overlimits 2962085 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 272000b of 4Mb
 capacity estimate: 65Mbit
 min/max network layer size:           31 /    1492
 min/max overhead-adjusted size:       65 /    1526
 average network hdr offset:            0

                   Bulk  Best Effort        Video        Voice
  thresh       4062Kbit       65Mbit    32500Kbit    16250Kbit
  target            5ms          5ms          5ms          5ms
  interval        100ms        100ms        100ms        100ms
  pk_delay       10.8ms       2.01ms         70us        162us
  av_delay       1.33ms       1.76ms          2us         22us
  sp_delay         10us          8us          2us         11us
  backlog            0b           0b           0b           0b
  pkts           155118      1396145           23          474
  bytes       219023011   2027295485         1033        64775
  way_inds           15           31            0            0
  way_miss          219          898           22          357
  way_cols            0            0            0            0
  drops            1301          234            0            0
  marks               0            0            0            0
  ack_drop            0            0            0            0
  sp_flows            0            1            0            0
  bk_flows            0            1            0            0
  un_flows            0            0            0            0
  max_len          1492         1492           57          318
  quantum           300         1514          991          495
1 Like

Okay with these settings the expected maximal goodput (TCP payload rate) for IPv4 will be around

65 * ((1500-8-20-20) / (1500-8+34)) = 61.85 Mbps
17 * ((1500-8-20-20) / (1500-8+34)) = 16.18 Mbps

Getting 60.3/15.8 is pretty decent given the theoretical limits...

3 Likes

@francisuk1989 I appreciate the pull request. Iā€™d like to explore different possible ways of addressing this issue you helpfully raised.

@moeller0 is there an elegant or generic way to address that which this pull request seeks to address:

Why are the download and upload directions reversed when using an integrated modem?

Are situations like this sufficiently irregular that the complexity associated with dispensing with the terms download and upload and replacing them with ingress and egress is not warranted?

Fudging it with just telling user to swap download and upload is also not especiallly intellectually satisfactory.

So Iā€™m not sure how to handle this.

Since I really do not know/understand what the PR aims at I am not in a position assess elegance here. Maybe @francisuk1989 could clue me in what he considers the the improvement here? (I would not go nonat, as that will not work all that well with dual-dsthost and dual-srchost, but since I do not know the rationale behind switching from nat to nonat this is a rather undirected comment).

What I took as the aim is guiding the user to swap around the download and upload calls. Iā€™m trying to work out if having to flip those is something that could be a regular occurrence and should be addressed in a generic way?

Upload is normally egress, right?