rwlock patch to prefer writers and improve spinning.
Jeff Roberson
jroberson at chesapeake.net
Wed Jan 30 16:52:03 PST 2008
On Wed, 30 Jan 2008, Attilio Rao wrote:
> 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 :)
The patch is updated in place at:
http://people.freebsd.org/~jeff/rwlock.diff
>
> Attilio
>
>
> --
> Peace can only be achieved by understanding - A. Einstein
>
More information about the freebsd-arch
mailing list