Pipe queues
rihad
rihad at mail.ru
Tue Dec 11 02:17:05 PST 2007
Peter Jeremy wrote:
> On Tue, Dec 11, 2007 at 12:31:00PM +0400, rihad wrote:
>> Peter Jeremy wrote:
>>> On Tue, Dec 11, 2007 at 09:21:17AM +0400, rihad wrote:
>>>> And if I _only_ want to shape IP traffic to given speed, without
>>>> prioritizing anything, do I still need queues? This was the whole point.
>>> No you don't. I'm using pipes without queues extensively to simulate
>>> WANs without bothering with any prioritisation.
>> Great! One fine point remains, though:
>> # ipfw pipe 1 config bw 128Kbit/s
>> will use a queue of 50 slots by default. What good are they for, if I
>> didn't ask for queuing in the first place?
>
> 'queue' is used in two distinct ways within the ipfw/dummynet code:
> 1) There's a "queue" object created with 'ipfw queue NNN config ...'
> This is used to support WF2Q+ to allow a fixed bandwidth to be
> unevenly shared between different traffic types.
> 2) There is a "queue" option on the "pipe" object that defines a FIFO
> associated with the pipe.
>
> I had assumed you were talking about the former (and my response was
> related to this) but given your latest posting, and having re-read the
> thread, I suspect I may have been wrong. Whilst I don't use queue
> objects, I do use the queue option on my pipes.
>
Yup, I'm only setting up traffic speed limits.
> In your example, you have a pipe that can handle 128kbps (16kBps). If
> you write a 1600byte packet to it, then the packet will reappear
> 100msec later. Any further packets written to that pipe during that
> time will be dropped if they can't be placed on a queue. The
> practical throughput depends on the number of queue slots available
> and the number of writers. I suggest you do some reading on queueing
> theory for the gory details.
>
You've just explained this quite clearly. It follows that pipe queues
are only used as a last line of defense before having to drop the
packet. All fine so far. The reason of my OP was primarily this excerpt
from man ipfw which I seem to be misinterpreting:
Note that for slow speed links you should keep the queue size short or
your traffic might be affected by a significant queueing delay. E.g.,
50 max-sized ethernet packets (1500 bytes) mean 600Kbit or 20s of queue
on a 30Kbit/s pipe. Even worse effects can result if you get packets
from an interface with a much larger MTU, e.g. the loopback interface
with its 16KB packets.
Does it look like they were talking of item 1) or 2) as you explained?
As I only care of bandwidth limitation, and not of any packet
prioritizing, should I be concerned with what they're saying? How on
earth could increasing queue size limit actual throughput? Isn't the
manpage saying that if I give a 128Kbit pipe an unnecessarily large
queue (say, 160Kbyte - 10 seconds worth of data) clients will have to
wait for 10 seconds before starting to get any data?
More information about the freebsd-net
mailing list