Development issues regarding the cerowrt test router project
 help / color / mirror / Atom feed
From: David Lang <david@lang.hm>
To: dpreed@reed.com
Cc: Jonathan Morton <chromatix99@gmail.com>,
	cerowrt-devel@lists.bufferbloat.net,
	make-wifi-fast@lists.bufferbloat.net
Subject: Re: [Cerowrt-devel] [Make-wifi-fast] [tsvwg] Comments on draft-szigeti-tsvwg-ieee-802-11e
Date: Mon, 3 Aug 2015 09:14:16 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.02.1508030902560.11825@nftneq.ynat.uz> (raw)
In-Reply-To: <1438616670.710822730@apps.rackspace.com>

[-- Attachment #1: Type: TEXT/Plain, Size: 5157 bytes --]

On Mon, 3 Aug 2015, dpreed@reed.com wrote:

> It's not infeasible to make queues shorter.  In any case, the throughput of a 
> link does not increase above the point where there is always one packet ready 
> to go by the time the currently outgoing packet is completed.  It physically 
> cannot do better than that.

change 'one packet' to 'one transmissions worth of packets' and I'll agree

> If hardware designers can't create an interface that achieves that bound I'd 
> be suspicious that they understand how to design hardware.  In the case of 
> WiFi, this also includes the MAC protocol being designed so that when the 
> current packet on the air terminates, the next packet can be immediately begun 
> - that's a little more subtle.

on a shared medium (like radio) things are a bit messier.

There are two issues

1. You shouldn't just transmit to a new station once you finish sending to the 
first. Fairness requires that you pause and give other stations a chance to 
transmit as well.

1. There is per-transmission overhead (including the pause mentioned above) that 
can be very significant for small packets, so there is considerable value in 
sending multiple packets at once. It's a lighter version of what you run into 
inserting into reliable databases. You can insert 1000 records in about the same 
time you can insert 2 records sperately.

The "stock" answer to this is for hardware and software folks to hold off on 
sending anything in case there is more to send later that it can be batched 
with. This maximizes throughput at the cost of latency.

What should be done instead is to send what you have immediatly, and while it's 
sending, queue whatever continues to arrive and the next chance you have to 
send, you will have more to send. This scales the batch size with congestion, 
minimizing latency at the cost of keeping the channel continually busy, but 
inefficiently busy if you aren't at capacity.

> But my point here is that one needs to look at the efficiency of the system as 
> a whole (in context), and paradoxically to the hardware designer mindset, the 
> proper way to think about that efficiency is NOT about link throughput 
> maximization - instead it is an end-to-end property.  One has very little to 
> do with the other.  Queueing doesn't affect link throughput beyond the "double 
> buffering" effect noted above: at most one packet queued behind the currently 
> transmitting packet.
> 
> Regarding TXOP overhead - rather than complicated queueing, just allow packets 
> to be placed in line *while the currently transmitting packet is going out*, 
> and changed up to the point in time when they begin transmitting. This is 
> trivial in hardware.

This is a key thing that a lot of hardware and software folks get wrong. All the 
complexity and bugs that you see around 'blocking/plugging' flows are the result 
of this mistake. As you say, send something as soon as you have it to send. If 
there's more arriving, let it accumulate while the first bit is being sent and 
the next chance you get to send, send everything that's accumulated. This 
minimizes latency, greatly simplifies the code (no need for timers to 
unblock/release the data if more doesn't arrive), and results in the exact same 
throughput under load.

It does have some interesting changes to the utilization curve at part load. 
These could be a problem with wifi under some conditions, but I think the 
trade-off is worth it since the wifi is going to end up running up to it's limit 
sometime anyway, and the part load problems are just previews of what you would 
run into at full load.

David Lang

>
> On Friday, July 31, 2015 1:04pm, "Jonathan Morton" <chromatix99@gmail.com> said:
>
>
>
>> I think that is achievable, *even if there is a WiFi network in the middle*, by thinking about the fact that the shared airwaves in a WiFi network behaves like a single link, so all the queues on individual stations are really *one queue*, and that the optimal behavior of that link will be achieved if there is at most one packet queued at a time.
> I agree that queues should be kept short in general. However I don't think single packet queues are achievable in the general case.
> The general case includes Wi-Fi networks, whose TXOP overhead is so ruinously heavy that sending single MTU sized packets is inefficient. Aggregating multiple packets into one TXOP requires those several packets to be present in the buffer at that moment.
> The general case includes links which vary in throughput frequently, perhaps on shorter timescales than an RTT, so either packets must be buffered or capacity is left unused. This also happens to include Wi-Fi, but could easily include a standard wired link whose competing load varies.
> The endpoints do not have and do not receive sufficient information in sufficient time to reliably make packets arrive at nodes just in time to be transmitted. Not even with ECN, not even with the wet dreams of the DCTCP folks, and not even with ELR (though ELR should be able to make it happen under steady conditions, there are still transient conditions in the general case).
> - Jonathan Morton

[-- Attachment #2: Type: TEXT/PLAIN, Size: 164 bytes --]

_______________________________________________
Cerowrt-devel mailing list
Cerowrt-devel@lists.bufferbloat.net
https://lists.bufferbloat.net/listinfo/cerowrt-devel

  reply	other threads:[~2015-08-03 16:14 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E9C29602-7F1D-43AD-980C-050B58FA0AC6@iii.ca>
2015-07-23  6:48 ` [Cerowrt-devel] Fwd: " Dave Taht
2015-07-23  7:44   ` Jonathan Morton
2015-07-23  7:49     ` Alan Jenkins
2015-07-24 10:38       ` [Cerowrt-devel] [Make-wifi-fast] " Sebastian Moeller
2015-07-30 20:29   ` [Cerowrt-devel] " Jonathan Morton
2015-07-30 21:35     ` [Cerowrt-devel] [Make-wifi-fast] " Sebastian Moeller
2015-07-30 21:56       ` Jonathan Morton
2015-07-31  3:27         ` Sebastian Moeller
2015-07-31 16:47           ` dpreed
2015-07-31 17:04             ` Jonathan Morton
2015-07-31 20:23               ` Michael Richardson
2015-07-31 20:45                 ` Jonathan Morton
2015-08-03 15:44               ` dpreed
2015-08-03 16:14                 ` David Lang [this message]
2015-08-03 23:37                   ` dpreed
2015-08-03 23:52                     ` Jonathan Morton
2015-08-04  0:13                     ` David Lang
2015-08-04 16:55                       ` dpreed
2015-08-07  8:28             ` Mikael Abrahamsson
2015-08-07 13:22               ` Rich Brown
2015-08-07 13:28                 ` Jonathan Morton
2015-08-07 17:35                   ` Rich Brown
2015-08-08 14:25                     ` Simon Barber
2015-08-07 20:03                   ` David Lang
2015-08-07 21:46                     ` dpreed
2015-08-07 22:31                       ` David Lang
2015-08-08 20:46                         ` dpreed
2015-08-08 23:23                           ` David Lang
2015-08-09 19:31                             ` Jonathan Morton
2015-08-09 21:50                               ` David Lang
2015-08-10  5:39                                 ` Mikael Abrahamsson
2015-08-13 21:48                               ` David Lang
2015-08-13 22:14                                 ` Jonathan Morton
2015-08-13 22:25                                   ` David Lang
2015-08-13 22:30                                     ` Jonathan Morton
2015-08-09 22:09                           ` David Lang
2015-08-10 13:48                         ` Simon Barber

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/cerowrt-devel.lists.bufferbloat.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1508030902560.11825@nftneq.ynat.uz \
    --to=david@lang.hm \
    --cc=cerowrt-devel@lists.bufferbloat.net \
    --cc=chromatix99@gmail.com \
    --cc=dpreed@reed.com \
    --cc=make-wifi-fast@lists.bufferbloat.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