Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Oct 2006 15:23:43 +0300 (EEST)
From:      Dmitry Pryanishnikov <dmitry@atlantis.dp.ua>
To:        "Andrey V. Elsukov" <bu7cher@yandex.ru>
Cc:        freebsd-ipfw@freebsd.org
Subject:   Queue size maximum too low [Was: ipfw versions - /usr/src/sbin]
Message-ID:  <20061009150437.X6632@atlantis.atlantis.dp.ua>
In-Reply-To: <45264233.3050406@yandex.ru>
References:  <200610060938.k969cCiO020772@Maggie.Linux-Consulting.com> <45264233.3050406@yandex.ru>

next in thread | previous in thread | raw e-mail | index | archive | help

Hello!

On Fri, 6 Oct 2006, Andrey V. Elsukov wrote:
>> the 100 need to be changed to 10,000  to allow for a bigger queue according 
>> to the customer that wants to use ipfw + dummynet for
>> testing gigE thruput
>
> I think this is not good idea. This limit will be checked later in
> kernel, and if you'll set qsize value greater  that 100 - kernel will
> correct this to 50. (if i correctly understood a kernel sources..)

   Well, frankly, the following code (as in RELENG_6) annoys me a lot:

src/sys/netinet/ip_dummynet.c:

set_fs_parms(struct dn_flow_set *x, struct dn_flow_set *src)
{
     x->flags_fs = src->flags_fs;
     x->qsize = src->qsize;
     x->plr = src->plr;
     x->flow_mask = src->flow_mask;
     if (x->flags_fs & DN_QSIZE_IS_BYTES) {
         if (x->qsize > 1024*1024)
             x->qsize = 1024*1024 ;
     } else {
         if (x->qsize == 0)
             x->qsize = 50 ;
         if (x->qsize > 100)
             x->qsize = 50 ;
     }

So the absolute maximum for the pipe's queue size is either 1Mbyte or 100 
packets. If one wants to provide fixed maximum _delay_ by the pipe (e.g., full 
pipe gives increasing delays up to, say, 5 sec, before dropping packets), 
[s]he should set pipe's queue size in bytes to bw * delay (bw is in 
bytes/sec), which gives that with this (artificial IMHO) 1Mbyte queue limit 
we can provide max. delay of 5 seconds for bw of 209715.2 bytes/sec (approx.
1.6Mbit/s), which is _way_ too low by today's standards. We've got _a lot_
kernel memory to burn on modern machines. So my question is:
what (except this limit) prevents large queues (> 1 Mbytes) from functioning
correctly? If I just remove this limit, will I hit some other limits in
dummynet code (except overall KVA or UMA zone limit)?

Sincerely, Dmitry
-- 
Atlantis ISP, System Administrator
e-mail:  dmitry@atlantis.dp.ua
nic-hdl: LYNX-RIPE



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061009150437.X6632>