From: Jonathan Morton <chromatix99@gmail.com>
To: Dan Siemon <dan@coverfire.com>
Cc: "Toke Høiland-Jørgensen" <toke@toke.dk>,
"Dave Taht" <dave.taht@gmail.com>,
"Cake List" <cake@lists.bufferbloat.net>
Subject: Re: [Cake] Using cake to shape 1000’s of users.
Date: Fri, 27 Jul 2018 21:58:40 +0300 [thread overview]
Message-ID: <EAA0E2EF-81AF-4835-BDEF-470BE4A39B5A@gmail.com> (raw)
In-Reply-To: <ad3fa37755c1ba8b96f0973726a5afdd54167ec8.camel@coverfire.com>
> On 27 Jul, 2018, at 5:04 pm, Dan Siemon <dan@coverfire.com> wrote:
>
> Obviously I can't speak for other potential users but we follow the
> upstream kernel very aggressively and have no interest in porting
> something like this to older kernels.
That's a useful data point. Honestly it shouldn't be too difficult to install the latest kernels on a dedicated box in general.
> We have some deployments with multiple access technologies (eg DOCSIS,
> DSL and wireless) behind the same box so per customer overhead would be
> useful.
The design I presently have in mind would allow setting the overhead per speed tier. Thus you could have "10Mbit DOCSIS" and "10Mbit ADSL" as separate tiers. That is, there's likely to be far fewer unique overhead settings than customers.
> I am interested in the diffserv class ideas in Cake but need to do some
> experimentation to see if that helps in this environment. It would be
> interesting to be able to target sub-classes (not sure what the proper
> Cake terminology is) based on a eBPF classifier.
The trick with Diffserv is classifying the traffic correctly, given that most traffic in the wild is not properly marked, and some actively tries to hide its nature. As an ISP, applying your own rules could be seen as questionable according to some interpretations of Net Neutrality. With Cake that's not an issue by default, since it relies entirely on the DSCP on the packet itself, but it does mean that a lot of traffic which *should* probably be classified other than best-effort is not.
Cake does cope well with unclassified latency-sensitive traffic, due to DRR++, so it's not actually necessary to specifically identify such applications. What it has trouble with, in common with all other flow-isolating qdiscs, is applications which open many parallel connections for bulk transfer (eg. BitTorrent, which is used by many software-update mechanisms as well as file-sharing). Classifying this traffic as Bulk (CS1 DSCP) gets it out of the way of other applications while still permitting them to use available capacity.
I have some small hope that wider deployment of sensible, basic Diffserv at bottlenecks will encourage applications to start using it as intended, thereby solving a decades-long chicken-egg problem. Presently Cake has such an implementation by default, but is not yet widely deployed enough to have any visible impact.
This is something we should probably discuss in more detail later.
> Re accounting, we currently count per-IP via eBPF not via qdisc counts.
Fine, that's a feature I'm happy to leave out.
> Each subscriber can have several IPs in which case the traffic for
> those IPs needs to go to a single class so that their entire traffic
> envelope is shaped to the desired plan rate. At present we do this via
> eBPF since it is essentially a map lookup operation.
>
> A few of the above points touch on something that may be somewhat
> unique service provider deployments vs homes, there are many situations
> where the classification logic has to be a map lookup and cannot be
> done just by looking at a given packet.
Yes, eBPF does seem to be a good fit for that.
So in summary, the logical flow of a packet should be:
1: Map dst or src IP to subscriber (eBPF).
2: Map subscriber to speed/overhead tier (eBPF).
3: (optional) Classify Diffserv (???).
4: Enqueue per flow, handle global queue overflow (rare!) by dropping from head of longest queue (like Cake).
--- enqueue/dequeue split ---
5: Wait for shaper on earliest-scheduled subscriber link with waiting traffic (borrow sch_fq's rbtree?).
6: Wait for shaper on aggregate backhaul link (congestion can happen here too).
7: Choose one of subscriber's queues, apply AQM and deliver a packet (mostly like Cake does).
If that seems reasonable, we can treat it as a baseline spec for others' input.
- Jonathan Morton
next prev parent reply other threads:[~2018-07-27 18:58 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-17 7:24 Felix Resch
2018-07-17 16:59 ` Dave Taht
2018-07-26 15:46 ` Dan Siemon
2018-07-26 15:48 ` Dave Taht
2018-07-26 18:07 ` Dan Siemon
2018-07-28 15:51 ` Dave Taht
2018-07-28 16:11 ` Jonathan Morton
2018-07-28 16:36 ` Dave Taht
2018-07-26 17:42 ` Toke Høiland-Jørgensen
2018-07-26 18:10 ` Dan Siemon
2018-07-26 21:09 ` Toke Høiland-Jørgensen
2018-07-26 21:38 ` Jonathan Morton
2018-07-27 9:25 ` Pete Heist
2018-07-27 14:04 ` Dan Siemon
2018-07-27 18:58 ` Jonathan Morton [this message]
2018-07-28 8:56 ` Toke Høiland-Jørgensen
2018-07-28 15:04 ` Dave Taht
2018-07-28 16:19 ` Jonathan Morton
2018-07-28 16:39 ` Dave Taht
2018-07-28 17:01 ` Pete Heist
2018-07-28 17:37 ` Pete Heist
2018-07-28 17:52 ` Dave Taht
2018-07-28 17:56 ` Dave Taht
2018-07-28 18:12 ` Toke Høiland-Jørgensen
2018-07-29 0:17 ` Pete Heist
2018-07-29 19:14 ` Toke Høiland-Jørgensen
2018-07-30 9:14 ` Pete Heist
2018-07-30 10:09 ` Sebastian Moeller
2018-07-30 10:55 ` Toke Høiland-Jørgensen
2018-07-30 11:05 ` Pete Heist
2018-07-30 11:28 ` Toke Høiland-Jørgensen
2018-07-30 22:10 ` Pete Heist
2018-07-30 22:17 ` Toke Høiland-Jørgensen
2018-07-31 7:31 ` Jonathan Morton
2018-07-30 10:55 ` Pete Heist
2018-07-30 11:05 ` Jonathan Morton
2018-07-28 17:53 ` Jonathan Morton
2018-07-28 18:07 ` Dave Taht
2018-07-28 18:17 ` Toke Høiland-Jørgensen
2018-07-28 19:35 ` [Cake] 1000s " Dave Taht
2018-07-29 23:24 ` [Cake] Using cake to shape 1000’s " Dave Taht
2018-08-07 1:46 ` Dan Siemon
2018-07-28 7:18 ` Pete Heist
2018-07-28 8:06 ` Jonathan Morton
2018-07-28 16:41 ` Pete Heist
2018-07-28 17:32 ` [Cake] isp economics Dave Taht
2018-07-28 18:39 ` Pete Heist
2018-07-28 19:03 ` Dave Taht
2018-07-28 20:00 ` Pete Heist
2018-07-29 5:49 ` Loganaden Velvindron
2018-07-28 19:09 ` Dave Taht
-- strict thread matches above, loose matches on Subject: below --
2018-07-16 18:39 [Cake] Using cake to shape 1000’s of users Mike
2018-07-16 19:01 ` Jonathan Morton
2018-07-16 19:13 ` Michel Blais
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.bufferbloat.net/postorius/lists/cake.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=EAA0E2EF-81AF-4835-BDEF-470BE4A39B5A@gmail.com \
--to=chromatix99@gmail.com \
--cc=cake@lists.bufferbloat.net \
--cc=dan@coverfire.com \
--cc=dave.taht@gmail.com \
--cc=toke@toke.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox