[Cake] Getting Cake to work better with Steam and similar applications

Sebastian Moeller moeller0 at gmx.de
Fri Apr 21 09:25:01 EDT 2017


Hi Dendari,


> On Apr 21, 2017, at 10:34, Dendari Marini <dendari92 at gmail.com> wrote:
> 
> Hello, thanks for all of your replies.
> 
> First of all, my connection encapsulation should be ATM LLC and it can actually reach up to 17.5/1 Mbps, but that's kinda best case scenario which is why I wanted to play it safe with just 16/.9 (which I should reach more consistently).

	Okay, I read ATM LLC together with the fact that you have a choice of et0 and pppoe0 that you hace 32 bytes of overhead (well including the 8 byte pppoe header it would be 40):

	case 40
		disp('Connection: PPPoE, LLC/SNAP RFC-2684');
		disp('Protocol (bytes): PPP (2), PPPoE (6), Ethernet Header (14), ATM LLC (3), ATM SNAP (5), ATM pad (2), ATM AAL5 SAR (8) : Total 40');
		overhead_bytes_around_MTU = 32;
		overhead_bytes_in_MTU = 8;

So please add “atm overhead 32" to cake on eth0 or “atm overhead 40” to cake instances on pppoe (these packets do not have the PPPoE header added yet and hence appear 8 bytes to small).

With that information you can expect the following maximum TCP/IPv4 goodput:
17.5 * (48/53) * ((1500 - 8 - 20 -20)/(1500 + 32)) = 15.02 Mbps 
or 
(17.5 * (48/53) * ((1500 - 8 - 20 -20)/(1500 + 32))) * 1000^2/1024^2 = 14.32  Mibps or 1.79 MBps, still pretty close to the 1.75MBps you seem to measure. Please note that if you do not specify the “atm” keyword your shaper will not account for the static 100-100*48/53 = 9.43 % rate increase going from ethernet frames to atm’s AAL5, so to account for that part alone you would need to set your shaper to 17.5*0.9 = 15.75 Mbps, but that completely ignores the other overhead (and the interger atm cell per ethernet frame rule that AAL5 insists upon)


> Back to the Steam issue. Unfortunately I can't seem to get really consistent results, mainly because sometimes it's downloading the game from just a few connections and other times it's downloading from dozens and dozens connections. The latter is the one giving me more issues both in terms of latency/packet loss and in terms of evenly splitting the bandwidth across the hosts.

	Question: if you set the shaper’s to 50% of line rate (8.75/0.5?) do you still see that unfairness? And if you add “atm overhead 40” to cake on pppoe0 and set the shaper to 90% of line rates (15.75/0.9) how does the Steam affect per-host fairness? Also how transient are these connections team uses?

> 
> One thing that seems to give better results is changing the interface where Cake is used from eth0 to pppoe0. When I used fq_codel it seemed to give better results when using eth0 and so I went ahead and did the same with Cake.

	As far as I can tell cake can drill down to the required IP/TCP/UDP fields independent of whether there are VLAN tags or PPPoE headers so cake should not care (except for the different overhead specifications you need to add as stated above). BUT if instantiated on eth0 cake will see pppoe LCP packets and might decide to drop them, which can take down the link, so out of caution I would still instantiate on pppoe in your case.


> 
> Anyway more testing needed, will report if I notice any consistent result.
> 
> By the way this is the thread I opened on the Ubiquiti forums talking about this issue (not sure if it can give you some more info): https://community.ubnt.com/t5/EdgeMAX/Smart-Queue-seemingly-not-working-for-Steam-downloads/td-p/1890405
> Also the thread where I got Cake for the ER-X from: https://community.ubnt.com/t5/EdgeMAX/Cake-and-FQ-PIE-compiled-for-the-EdgeRouter-devices/td-p/1679844
> 
> On 20 April 2017 at 20:36, Sebastian Moeller <moeller0 at gmx.de> wrote:
> 
> > On Apr 20, 2017, at 18:05, Dendari Marini <dendari92 at gmail.com> wrote:
> >
> > Hello, thanks for your reply.
> >
> > Looks like most of your options are okay, including the correct “dual” modes and “ingress” mode in the right place.  However, I think you need to adjust your bandwidth and overhead settings, otherwise Cake isn’t reliably in control of the bottleneck queues.  Try these to begin with:
> >
> > … bandwidth 850Kbit conservative dual-srchost nat
> >
> > … bandwidth 15Mbit conservative dual-dsthost nat ingress
> >
> > That should give you correct operation, and you can fine-tune from there.
> >
> > Just did quick test with your settings. First thing I noticed is my final download bandwidth is about 12Mbps, Steam on PC1 downloads at 1.4-1.5MB/s while downloading a file on PC2 seems to max out at ~250KB/s. From my understanding I should see each PC download at ~700KB/s, or am I mistaken?
> 
> Assuming you measured good put in [M|K]iBytes this adds up to  1.5+0.25 = 1.75 * 1024^2 * 8 = 14680064 Bits or (1.4+0.25) * 8 *1024^2 / 1000^2 = 13.84 Mbps which seems a bit high for a 16Mbps ADSL link. I would ecpext something like 16 * (48/53)  * ((1500 - 8 - 20 -20) / (1500 + 32)) = 13.73 Mbps TCP/IPv4 goodput… so you seem to be running close to theoretical maximum of your link (assuming I am not totally off with the overhead (estimated ADSL overhead on top of MTU: 6 destination MAC + 6 source MAC + 2 ethertype + 3 ATM LLC + 5 ATM SNAP + 2 ATM pad + 8 ATM AAL5 SAR 32 bytes). But with your shaper set at 15Mbps without the atm option you will actually accept up to 15 * (53/48) = 16.5625 Mbps on the wire, which probably is above your link bandwidth. This fits well with the really low number of drops in your cake stats, you simply never have cake feel that shaping is needed?
> 
> Best Regards
> 
> 
> 
> 
> >
> > On 20 April 2017 at 17:32, Jonathan Morton <chromatix99 at gmail.com> wrote:
> >
> >> On 20 Apr, 2017, at 18:23, Dendari Marini <dendari92 at gmail.com> wrote:
> >>
> >>> Could you post the output of calling “tc -s qdisc” here on the list please? That should allow to figure out what you actually told cake to do ;0
> >
> >> qdisc cake 8001: dev eth0 root refcnt 2 bandwidth 900Kbit diffserv3 dual-srchost nat rtt 100.0ms raw
> >
> >> qdisc cake 8002: dev ifb4eth0 root refcnt 2 bandwidth 16Mbit diffserv3 dual-dsthost nat ingress rtt 100.0ms raw
> >
> > Looks like most of your options are okay, including the correct “dual” modes and “ingress” mode in the right place.  However, I think you need to adjust your bandwidth and overhead settings, otherwise Cake isn’t reliably in control of the bottleneck queues.  Try these to begin with:
> >
> > … bandwidth 850Kbit conservative dual-srchost nat
> >
> > … bandwidth 15Mbit conservative dual-dsthost nat ingress
> >
> > That should give you correct operation, and you can fine-tune from there.
> >
> > - Jonathan Morton
> >
> >
> >
> 
> 



More information about the Cake mailing list