[PATCH] Make fdescfs MPSAFE
Ulf Lilleengen
lulf at stud.ntnu.no
Thu Oct 18 01:34:42 PDT 2007
On tor, okt 18, 2007 at 09:33:40 +0200, Kris Kennaway wrote:
> Ulf Lilleengen wrote:
> >On tor, aug 16, 2007 at 12:05:26 +0200, Ulf Lilleengen wrote:
> >>Hi,
> >>
> >>To be able to better understand VFS and locking in general, I started
> >>making
> >>fdescfs MPSAFE. I'm not experienced with any of these things, so there
> >>might be
> >>some errors, although I've looked through much VFS code and code for
> >>other FS
> >>like nullfs. I've tested it by running two pthreads on the same fd, and
> >>that seamt
> >>to work, but there might be other cases where it will fail.
> >>
> >>Patch is attached.
> >>
> >
> >Attached is a new patch that uses rwlocks instead of mutexes (since reading
> >the hash_table is frequently done). Also, it adds checking so that there
> >is no
> >duplicates in the hash table before inserting the new fdescnode. And add a
> >mising hashfree().
> >
> >I also checked to see if there was any issues regarding Jeffs new patch to
> >use atomic operations on the file structure, but there wasn't any obvious
> >places where this affects fdescfs.
> >
> >Patch here:
> >http://folk.ntnu.no/lulf/patches/freebsd/fdescfs/fdescfs_lock.diff
>
> This might be OK but you should be aware that rwlocks can be slower than
> mutexes when there is a suitably mixed read/write workload. We don't do
> the same adaptive spinning for wlocks as for mutexes when they are held
> by shared holders (since we don't track who they are so can't track
> whether they're running), and it is possible for readers to starve writers.
>
> If possible some benchmarks trying to find the worst case behaviour
> would be useful.
Good point. I guess having a benchmark where one would open #hashentries
files, and then have #hashentries threads reading (accessing the files) and
one thread writing (closing perhaps) could produce the starvation?
I got the impression from locking(9) that a mutex was essentially a wrwlock,
but if that's not exactly true... then I don't think this part is very heavy
contested anyway, so perhaps changing it back to a mutex saves me for a lot
of trouble. (nullfs does this with mutexes btw).
--
Ulf Lilleengen
More information about the freebsd-fs
mailing list