From: Jonathan Morton <chromatix99@gmail.com>
To: Simon Barber <simon@superduper.net>
Cc: codel@lists.bufferbloat.net, cerowrt-devel@lists.bufferbloat.net,
bloat@lists.bufferbloat.net
Subject: Re: [Codel] [Bloat] Latest codel, fq_codel, and pie sim study from cablelabs now available
Date: Thu, 2 May 2013 15:04:13 +0300 [thread overview]
Message-ID: <71A0D0CD-9095-4AA5-93C3-FF55CC495788@gmail.com> (raw)
In-Reply-To: <5181CD56.9050501@superduper.net>
On 2 May, 2013, at 5:20 am, Simon Barber wrote:
> Or one could use more queues in SFQ, so that the chance of 2 streams sharing a queue is small.
CableLabs actually did try that - increasing the number of queues - and found that it made things worse. This, I think, extends to true "fair queueing" with flows explicitly rather than stochastically identified. The reason is that with a very large number of flows, the bandwidth (or the packet throughput) is still shared evenly between them, and there is not enough bandwidth in the VoIP flow's share to allow it to work correctly. With a relatively small number of flow buckets, the responsive flows hashed to the same bucket get out of the way of the unresponsive VoIP flow.
In short, a very large number of flow buckets prioritises BitTorrent over anything latency-sensitive, because BitTorrent uses a very large number of individual flows.
By contrast, putting all the BitTorrent flows into one bucket (or a depressed-priority queue with it's own SFQ buckets), or else elevating the VoIP traffic explicitly to a prioritised queue, would share the bandwidth more favourably to the VoIP flow, allowing it to use as much as it needed. Either, or indeed both simultaneously, would do the job reasonably well, although an elevated priority queue should be bandwidth limited to a fraction of capacity to avoid the temptation of abuse by bulk flows. Then there would be no performance objection to using a large number of flow buckets.
I can easily see a four-tier system working for most consumers, just so long as the traffic for each tier can be identified - each tier would have it's own fq_codel queue:
1) Network control traffic, eg. DNS, ICMP, even SYNs and pure ACKs - max 1/16th bandwidth, top priority
2) Latency-sensitive unresponsive flows, eg. VoIP and gaming - max 1/4 bandwidth, high priority
3) Ordinary bulk traffic, eg. web browsing, email, general purpose protocols - no bandwidth limit, normal priority
4) Background traffic, eg. BitTorrent - no bandwidth limit, low priority, voluntarily marked, competes at 1:4 with normal.
Obviously, the classification system implementing that must have some idea of what bandwidth is actually available at any given moment, but it is not necessary to explicitly restrict the top tiers' bandwidth when the link is otherwise idle. Practical algorithms could be found to approximate the correct behaviour on a saturated link, while simply letting all traffic through on an unsaturated link. Basic installations could already do this using HTB and assuming a link bandwidth.
Even better, of course, would be some system that allows BitTorrent to yield as though it were a smaller number of flows than it really is. The "swarm" behaviour is very unusual among network protocols. LEDBAT via uTP already does a good job on a per-flow basis, but since it's all under control of a single application, the necessary information should be available at that point. I am reminded of the way Azureus adjusts global bandwidth limits - both incoming and outgoing - to match reality, based on both periodic and continuous measurements.
- Jonathan Morton
next prev parent reply other threads:[~2013-05-02 12:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-01 11:23 [Codel] " Dave Taht
2013-05-01 20:26 ` [Codel] [Bloat] " Simon Barber
2013-05-02 0:00 ` Jonathan Morton
2013-05-02 2:20 ` Simon Barber
2013-05-02 4:59 ` Andrew McGregor
2013-05-02 12:04 ` Jonathan Morton [this message]
2013-05-02 13:29 ` Simon Perreault
2013-05-14 2:26 ` Dan Siemon
2013-05-14 4:56 ` Tristan Seligmann
2013-05-14 10:24 ` Dave Taht
2013-05-14 13:02 ` Eric Dumazet
2013-06-11 18:19 ` [Codel] [Cerowrt-devel] " Michael Richardson
2013-05-14 12:12 ` [Codel] " Jesper Dangaard Brouer
2013-05-06 17:54 ` Jesper Dangaard Brouer
2013-05-06 18:46 ` Jonathan Morton
2013-05-06 20:47 ` Jesper Dangaard Brouer
2013-05-07 16:22 ` Greg White
2013-05-07 13:31 ` [Codel] [Cerowrt-devel] " Michael Richardson
2013-05-07 16:30 ` [Codel] [Bloat] [Cerowrt-devel] " Greg White
2013-05-07 19:56 ` [Codel] [Bloat] " Wes Felter
2013-05-07 20:30 ` Eric Dumazet
2013-05-08 22:25 ` Dave Taht
2013-05-08 22:54 ` Eric Dumazet
2013-05-09 1:45 ` Andrew McGregor
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/codel.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=71A0D0CD-9095-4AA5-93C3-FF55CC495788@gmail.com \
--to=chromatix99@gmail.com \
--cc=bloat@lists.bufferbloat.net \
--cc=cerowrt-devel@lists.bufferbloat.net \
--cc=codel@lists.bufferbloat.net \
--cc=simon@superduper.net \
/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