Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Oct 2003 14:12:59 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Nate Lawson <nate@root.org>
Cc:        current@freebsd.org
Subject:   Re: umass(4)/uhci(4) REALLY slow
Message-ID:  <20031002135340.O8330@gamplex.bde.org>
In-Reply-To: <20031001111502.F85421@root.org>
References:  <20030930172903.S82394@root.org> <20031001142825.K4031@gamplex.bde.org> <20031001111502.F85421@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 1 Oct 2003, Nate Lawson wrote:

> On Wed, 1 Oct 2003, Bruce Evans wrote:
> > On Tue, 30 Sep 2003, Nate Lawson wrote:
> > > Here are "iostat 5" results for my USB thumb drive on a uhci(4) controller
> > > with 5.1-CURRENT.  On windows on the same box, it runs reasonably quickly.
> > > On FreeBSD, it really lags.  This is for a cp of a large file to a
> > ...
> > This is probably due to something we're not doing in msdosfs.  1K is
> > probably your msdosfs file system block size.
>
> Yes, I checked and it has a 1K block size.  The flash device is 64 MB.
>
> > msdosfs is missing support
> > for clustering.  None of the lower levels (buffer cache, driver, usb)
> > in FreeBSD does clustering (the buffer cache has some support for it,
> > ...
>
> What would need to be done to add msdosfs clustered reads/writes or
> perhaps do this in a more general way in the buffer cache?

Not a lot for msdosfs.  Basically, add some B_CLUSTEROK's and
vfs_bio_awrite()s, and 1 cluster_write() to msdosfs_write().  Merge
them from ffs_write().  Better, merge more of ffs_write().  IIRC, using
cluster_write() is only a small optimization -- write clustering mostly
work if you throw everything into the buffer cache using bdwrite()
without neglecting to set B_CLUSTEROK.  Not much more for the buffer
cache if you only do what bdwrite() and B_CLUSTEROK do.  Non-delayed
writes can't be clustered very effectively at the buffer cache level.

Similarly for read clustering except it is cluster_read() and larger
read-ahead instead of cluster_write() and B_CLUSTEROK/vfs_bio_awrite()
that are needed.  The file system must be more involved since reads are
less predictable than writes at the buffer cache level.

Bruce



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