Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!newshost.telstra.net!act.news.telstra.net!psgrain!news.uoregon.edu!news.rediris.es!ordago.gsyc.inf.uc3m.es!usenet
From: carlos <calb@ordago.gsyc.inf.uc3m.es>
Newsgroups: comp.unix.bsd.netbsd.misc
Subject: Re: ring buffer overflow with 386PC and 16 bit SMC ethernet card..
Date: Sat, 02 Mar 1996 10:38:17 +0100
Organization: GSyC, Universidad Carlos III, Madrid, Spain.
Lines: 86
Message-ID: <31381709.41C67EA6@ordago.gsyc.inf.uc3m.es>
References: <4gl05b$no@news.iastate.edu>
NNTP-Posting-Host: fantasma.gsyc.inf.uc3m.es
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mailer: Mozilla 2.0 (X11; I; BSD/386 uname failed)
hello
------------------------------------------------------------------------
6.4.5 I get a lot of 'ring buffer overflow' messages using NFS and the
ed0 driver. Is there a problem?
David Greenman (davidg@implode.rain.com), the original author of
the ed0 driver, provides us with some insight into the inner
workings of the ed0 driver.
It always surpises me that people don't just ask the original
author these questions. :-) Anyway, the reason these are
happening
is that the access to the 8bit boards shared memory simply isn't
fast enough to deal with full wire speeds...but the driver tries
hard...so even though packets get dropped, your performance only
drops to about what the ethernet board is capable of (should be
in the 400-600k range with an 8bit card). NFS is especially bad
because the UDP window is quite large (40k last time I looked),
so the overflow condition can happen easily. I've explained this
for the most part in the release notes for the driver, but these
didn't make it into either the FreeBSD or NetBSD releases (we
couldn't find an appropriate place to put them).
>From the release notes:
receive
-------
The 8390 implements a shared memory ring-buffer to store
incoming packets. The 8bit boards (3c503, and 8003) usually
have
only 8k bytes of shared memory. This is only enough room for
about
4 full size (1500 byte) packets. This can sometimes be a
problem,
especially on the original WD8003E and 3c503. This is because
these
boards' shared memory access speed is also quite slow compared
to
newer boards - typically only about 1MB/second. The additional
overhead of this slow memory access, and the fact that there is
only room for 4 full-sized packets means that the ring-buffer
will occassionally overflow. When this happens, the board must
be reset to avoid a lockup problem in early revision 8390's.
Resetting the board will cause all of the data in the
ring-buffer
to be lost - requiring it to be
re-transmitted/received...slowing
things even further. Because of these problems, maximum
throughput
on boards of this type is only about 400-600k per second. The
16bit
boards (8013 series), however, have 16k of memory as well as
much
faster memory access speed. Typical memory access speed on these
boards is about 4MB/second. These boards generally have no
problems
keeping up with full ethernet speed. The only problem I've seen
with these boards is related to the (slow) performance of
386BSD's
malloc code when additional mbufs must be added to the pool.
This
can sometimes increase the total time to remove a packet enough
for a ring-buffer overflow to occur.
With NFS, the problem is really bad, though. The 3c503 does not
have enough memory on the card to support the default 8k packets
that NFS and other protocols use as their default. The solution
for folks that are having a problem with ring buffer overflows
in NFS is for them to either use the -r and -w flags to limit
the packet size or use the define "NFS_BOOT_RWSIZE=8192". If
NFS doesn't work with this defined, the code will automatically
step down to the next smaller increment. If you KNOW that you
will always be running a 3c503, you can set this define to 4096
instead, just to make sure. This should eliminate the bulk of
the ring buffer overflows in NFS.
----------------------------------------------------------------------
calb.
____________________________________________________
___ _____ _ ____
/ __// _ // / / o) calb
/ /_ / /_/ // /_ / \ ordago.gsyc.inf.uc3m.es
/___//_/ /_//___//__)
____________________________________________________