Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Mar 2000 15:44:20 +0000 (GMT)
From:      Richard Wendland <richard@netcraft.com>
To:        Paul Richards <paul@originative.co.uk>
Cc:        Richard Wendland <richard@netcraft.com>, Alfred Perlstein <bright@wintelcom.net>, Poul-Henning Kamp <phk@critter.freebsd.dk>, Matthew Dillon <dillon@apollo.backplane.com>, current@FreeBSD.ORG, fs@FreeBSD.ORG
Subject:   Re: FreeBSD random I/O performance issues
Message-ID:  <200003221544.PAA08760@ns0.netcraft.com>
In-Reply-To: <38D833BC.A082DF09@originative.co.uk> from Paul Richards at "Mar 22, 2000 02:45:16 am"

next in thread | previous in thread | raw e-mail | index | archive | help
> > With sync it's ~20,000 operations matching the total of reads &
> > writes.  This demonstrates another aspect of the bug, sync behaviour
> > should cause 10,000 operations; the reads aren't being cached.
> 
> This isn't quite true. It's 20,000 *write* operations. I put this down
> to the mtime update for each write doubling the number of actual write
> operations. No read operations take place, the data *does* come out of
> the cache. There's nothing wrong with reading as far as I can tell.

Yes, you're absolutely right, I should have looked at my own data
more closely.

If I change the test program to call fsync after write, and run on
a default mount filesystem I also see 20,000 I/O operations from
10,000 writes.  This probably impacts more real programs out there
than sync mounts.

If this is mtime updates being does synchronously, that seems a
separate issue to the clustering/VM issue, and seems to me it should
be fixed.  It'll normally double the number of all writes won't
it, possibly forcing seeks between otherwise localised access.

Can anyone offer an alternative hypothesis to mtime updates being
done synchronously?

Looking at my logs for the sync filesystem test, mount output before
and after shows all ~20,000 operations are writes::

	mount
	/dev/wd0s2e on /var (local, synchronous, writes: sync 182 async 10)

	time ./seekreadwrite xxx 10000
	0.1u 7.8s 1:47.61 7.4% 5+179k 0+20000io 0pf+0w

	mount
	/dev/wd0s2e on /var (local, synchronous, writes: sync 20190 async 15)

But when using fsync on a default mount filesystems, 10000 writes
are sync and 10000 async:

	mount
	/dev/wd0s2e on /var (local, writes: sync 682 async 2764)

	time ./seekreadwrite xxx 10000
	0.0u 1.7s 0:54.34 3.3% 4+171k 0+20000io 0pf+0w

	mount
	/dev/wd0s2e on /var (local, writes: sync 10682 async 12777)

This is on the ATA machine that could run the test in 4 seconds
without fsync, 54 seconds with fsync, suggesting some head movements
may be being forced, though not 20000 as that would imply 2.7ms
per seek.

	Richard
-- 
Richard Wendland				richard@netcraft.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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