On Thu, 18 Jun 2009, Igor Sysoev wrote:

On Thu, Jun 11, 2009 at 11:54:29AM +1000, Bruce Evans wrote:

On Wed, 10 Jun 2009, Igor Sysoev wrote:
...
I has left only static coalescing parameters in the patch
and has added a loader tunable to set number of receive descriptors and
read only sysctl to read the tunable. I usually use these parameters:

/boot/loader.conf:
hw.bge.rxd=512

/etc/sysctl.conf:
dev.bge.0.rx_coal_ticks=500
dev.bge.0.tx_coal_ticks=10000
dev.bge.0.rx_max_coal_bds=64

These rx settings give to high a latency for me.

Probably, however, I use this on a host that has 6000 packets/s.

6000 is not very high, so you might be able to tune for latency at no
significant cost.  The normal (unpatched) value for rx_coal_ticks is
150 uS.  This tends to give an interrupt rate of 6666 packets/S, and
this is a good default maximum rate (it takes about 100000 interrupts/S
to eat up 2GHz of CPU).  If packets normally arrive at 6000/S, then
you can tune for minimal latency = no rx interrupt moderation at all
by setting rx_coal_ticks to 1, without affecting the interrupt rate
at all (there will always by 6000 interrupts/S, but with rx_coal_ticks=1
the packets will br processed with minimal delay (more like 20 uS than
1 uS) instead of after 150 uS (default).  Your settings should give
about 2000 interrupts/S, with 3 packets handled every interrupt after
a delay of up to 500 uS.

dev.bge.0.tx_max_coal_bds=128
# apply the above parameters
dev.bge.0.program_coal=1

Could anyone commit it ?

Not me, sorry.

The patch is quite clean.  If I committed then I would commit the
dynamic coalescing configuration separately anyway.

So have you any objections if some one else will commit this patch ?

No objections.

You can probably make hw.bge.rxd a sysctl too (it would take a down/up
to get it changed, but that is already needed for too many parameters
in network drivers anyway).  I should use a sysctl for the ifq length
too.  This could be done at a high level for each driver.  Limiting
queue lengths may be a good way to reduce cache misses, while increasing
them is sometimes good for reducing packet loss.

Do you mean simple command sequence:

sysctl hw.bge.rxd=512
ifconfig down
ifconfig up

or SYSCTL_ADD_PROC for hw.bge.rxd ?

The simple command sequence.  It's painful to write a SYSCTL_ADD_PROC()
for every sysctl, even if the procedure is trival, and the procedure
would be highly nontrivial for at least reducing rxd since for reduction
it would have to wait for descriptors to become inactive, and decouple
them without races...  I made program_coal a SYSCTL_PROC() because I
wanted to change the settings a lot for testing, but I didn't make the
individual coal settings SYSCTL_PROC()s since there is no need to change
1 at a time and it might be wrong to change 1 at a time (they have some
interactions).

Bruce
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to