rwlock patch to prefer writers and improve spinning.
Jeff Roberson
jroberson at chesapeake.net
Mon Jan 28 21:08:23 PST 2008
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.
Thanks,
Jeff
More information about the freebsd-arch
mailing list