On Fri, 7 Aug 2015, Jonathan Morton wrote:

On 7 Aug, 2015, at 15:22, Rich Brown <richb.hano...@gmail.com> wrote:

- At that time, the wifi driver requests packets from fq_codel until a) the the fq_codel queues are empty, or b) the wifi frame is full. In either case, the wifi driver sends what it has.

There’s one big flaw with this: if packets are available for multiple destinations, fq_codel will generally give you a variety pack of packets for each of them. But a wifi TXOP is for a single destination, so only some of the packets would be eligible for the same aggregate frame.

So what’s needed is a way for the wifi driver to tell the queue that it wants packets for the *same* destination as it’s transmitting to.

how about when the queue hands packets to the wifi driver, it hands all packets to that same destination, no matter where they are in the queue (up to a max size, and the queue may adjust that max size within a range for fairness)

- Once the transmit opportunity has come around, it's a matter of microseconds (I assume) to pull in a wifi frame's worth of packets from fq_codel

This is hard to guarantee in software in a general-purpose OS.

you really want to have the pckets assembled and ready to go rather than trying to pull them at that point.

But what happens right now is that the queue hands packets to the wifi driver, then the wifi driver has it's own queues that it uses to gather the packets for each destination.

If we can find a way to make it reasonable to short-circuit the wifi driver queues by making it efficient to work from the main network queues, we can work to eliminate the second layer of queues.



so thinking about the requierments from the driver point of view

It needs to be able to pull a chunk of data to transmit (multple packets), it isn't going to know very much ahead of time what speed it's going to use to talk to this destination, and this is going to drastically affect how long it takes to transmit the bits. so when it grabs data from the queue, it needs to feed back to the queue the transmit time for those bits, and the queue uses that instead of the count of bits to determine fairness.

The queue will be deciding fairness based on whois behind in their 'fair share' of transmit time. So the wifi driver isn't going to know when it asks for the net chunk of data to transmit, who it will be going to. So it will need to get the destination, see the speed to use to that destination, pass the speed to a calculation for how much data to send, then grab that much data (rounded to a packet boundry)



Is this sort of logic useful anywhere other than in wifi?

Wifi is the only place I know of where the transmit bit rate is going to vary depending on the next hop address.

I know that the inter-packet gap defined for ethernet can amount to a large percentage of bandwidth at high speeds. Can multiple packets to the same destination be combined with a smaller gap between packets? (the gap timing was based on the speed-of-light time needed for the entire shared bus to quiece back in the 10mb half-duplex hub days). If so, then there's value in bundling packets to the same destination together.


If this sort of logic is not useful anywhere other than in wifi, maby the right answer is to have a way of short-circuiting the main OS queues and have a wifi specific queue that can directly look at the per-client speeds/etc when deciding who goes next and how much to dispatch?

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

Reply via email to