rwlock patch to prefer writers and improve spinning.

Attilio Rao attilio at freebsd.org
Tue Jan 29 16:59:57 PST 2008


2008/1/30, Jeff Roberson <jroberson at chesapeake.net>:
> On Tue, 29 Jan 2008, Attilio Rao wrote:
>
> > 2008/1/29, Jeff Roberson <jroberson at chesapeake.net>:
> >> http://people.freebsd.org/~jeff/rwlock.diff
> >>
> >> Attilio and I have come up with a rwlock patch that prevents writer
> >> starvation by blocking readers whenever there are writers waiting on the
> >> turnstile.
> >>
> >> To avoid deadlocks caused by recursive readers a new per-thread count of
> >> outstanding rw read locks is maintained.  When a thread is known to own
> >> read locks it will bypass the pending writers checks.  This could lead to
> >> writer starvation in pathological cases but will not deadlock.
> >>
> >> In addition, I have added code to optimistically spin in the write lock
> >> path when there are readers.  The spin is limited by two counters.  One
> >> controls the number of spins while waiting for the lock state to change
> >> and another controls the number of lock state changes we'll observe before
> >> we give up.
> >>
> >> To add these two features new flags were required.  I removed the
> >> recursion flag and instead there is an extra branch in the inlined code to
> >> check the recursion count before the atomic.  Another option would be to
> >> further increase the alignment of struct thread, however, I don't really
> >> think that is necessary.
> >>
> >> This has been thoroughly tested with nokia's stack but it had to be
> >> forward ported to current.  Any rwlock users are encouraged to test before
> >> I commit.
> >>
> >> Feedback is welcome.
> >
> > Jeff,
> > it is not missing a kern/subr_witness.c part where some checks are axed out?
>
> Oh you are right I forgot to include some turnstile pieces as well.  I
> will provide them soon.

Gah, I meant kern/subr_turnstile.c really :)

Attilio


-- 
Peace can only be achieved by understanding - A. Einstein


More information about the freebsd-arch mailing list