Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Nov 2010 03:12:25 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Maxim Sobolev <sobomax@FreeBSD.org>
Cc:        svn-src-stable@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, svn-src-stable-7@FreeBSD.org
Subject:   Re: svn commit: r215368 - in stable/7/sys: arm/at91 arm/xscale/ixp425 contrib/dev/oltr dev/ae dev/an dev/ar dev/arl dev/ath dev/awi dev/ce dev/cm dev/cnw dev/cp dev/cs dev/ctau dev/cx dev/cxgb dev/ed d...
Message-ID:  <20101117030118.X1203@besplex.bde.org>
In-Reply-To: <201011160440.oAG4e3YU039413@svn.freebsd.org>
References:  <201011160440.oAG4e3YU039413@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 16 Nov 2010, Maxim Sobolev wrote:

> Log:
>  MFC r207554:
>
>      Add new tunable 'net.link.ifqmaxlen' to set default send interface
>      queue length. The default value for this parameter is 50, which is
>      quite low for many of today's uses and the only way to modify this
>      parameter right now is to edit if_var.h file. Also add read-only
>      sysctl with the same name, so that it's possible to retrieve the
>      current value.

This was quite low for yestdeay's uses (starting in about 1995), but today
it is little missed since only yesterday's low-end hardware uses it.  Most
of today's interfaces are 1Gbps, and for this it is almost essential for
the hardware to have a ring buffer with > 50 entries, so most of today's
drivers ignore ifqmaxlen and set the queue length to the almost equally
bogus value of the ring buffer size (-1).  I set it to about 10000 instead
in bge and em (10000 is too large, but fixes streaming under certain loads
when hz is small).

> Modified:
>  stable/7/sys/arm/at91/if_ate.c
>  stable/7/sys/arm/xscale/ixp425/if_npe.c
>  stable/7/sys/contrib/dev/oltr/if_oltr.c
>  stable/7/sys/dev/ae/if_ae.c
>  stable/7/sys/dev/an/if_an.c
>  stable/7/sys/dev/ar/if_ar.c
>  stable/7/sys/dev/arl/if_arl.c
>  stable/7/sys/dev/ath/if_ath.c
>  stable/7/sys/dev/awi/awi.c
>  stable/7/sys/dev/ce/if_ce.c
>  stable/7/sys/dev/cm/smc90cx6.c
>  stable/7/sys/dev/cnw/if_cnw.c
>  stable/7/sys/dev/cp/if_cp.c
>  stable/7/sys/dev/cs/if_cs.c
>  stable/7/sys/dev/ctau/if_ct.c
>  stable/7/sys/dev/cx/if_cx.c
>  stable/7/sys/dev/cxgb/cxgb_main.c
>  stable/7/sys/dev/ed/if_ed.c
>  stable/7/sys/dev/ep/if_ep.c
>  stable/7/sys/dev/ex/if_ex.c
>  stable/7/sys/dev/ie/if_ie.c
>  stable/7/sys/dev/iicbus/if_ic.c
>  stable/7/sys/dev/ipw/if_ipw.c
>  stable/7/sys/dev/iwi/if_iwi.c
>  stable/7/sys/dev/le/lance.c
>  stable/7/sys/dev/malo/if_malo.c
>  stable/7/sys/dev/my/if_my.c
>  stable/7/sys/dev/nxge/if_nxge.c
>  stable/7/sys/dev/pdq/pdq_ifsubr.c
>  stable/7/sys/dev/ppbus/if_plip.c
>  stable/7/sys/dev/ral/rt2560.c
>  stable/7/sys/dev/ral/rt2661.c
>  stable/7/sys/dev/ray/if_ray.c
>  stable/7/sys/dev/sbni/if_sbni.c
>  stable/7/sys/dev/sbsh/if_sbsh.c
>  stable/7/sys/dev/sn/if_sn.c
>  stable/7/sys/dev/snc/dp83932.c
>  stable/7/sys/dev/sr/if_sr.c
>  stable/7/sys/dev/usb/if_aue.c
>  stable/7/sys/dev/usb/if_axe.c
>  stable/7/sys/dev/usb/if_cdce.c
>  stable/7/sys/dev/usb/if_cue.c
>  stable/7/sys/dev/usb/if_kue.c
>  stable/7/sys/dev/usb/if_rue.c
>  stable/7/sys/dev/usb/if_rum.c
>  stable/7/sys/dev/usb/if_udav.c
>  stable/7/sys/dev/usb/if_ural.c
>  stable/7/sys/dev/usb/if_zyd.c
>  stable/7/sys/dev/usb/udbp.c
>  stable/7/sys/dev/vx/if_vx.c
>  stable/7/sys/dev/wi/if_wi.c
>  stable/7/sys/dev/wl/if_wl.c
>  stable/7/sys/dev/wpi/if_wpi.c
>  stable/7/sys/dev/xe/if_xe.c
>  stable/7/sys/i4b/capi/capi_l4if.c
>  stable/7/sys/i4b/driver/i4b_ing.c
>  stable/7/sys/i4b/driver/i4b_isppp.c
>  stable/7/sys/i4b/driver/i4b_trace.c
>  stable/7/sys/i4b/layer1/ifpi/i4b_ifpi_pci.c
>  stable/7/sys/i4b/layer1/ifpi2/i4b_ifpi2_pci.c
>  stable/7/sys/i4b/layer1/ifpnp/i4b_ifpnp_avm.c
>  stable/7/sys/i4b/layer1/ihfc/i4b_ihfc_drv.c
>  stable/7/sys/i4b/layer1/isic/i4b_bchan.c
>  stable/7/sys/i4b/layer1/itjc/i4b_itjc_pci.c
>  stable/7/sys/i4b/layer1/iwic/i4b_iwic_bchan.c
>  stable/7/sys/i4b/layer4/i4b_i4bdrv.c

Note that there is only yeterday's hardware in this list.

The queue length should be per-interface and configured only by a sysctl,
or better, drivers dynamically configure it to a good value.

Bruce



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