Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Jan 2008 21:01:01 +0100
From:      "Attilio Rao" <attilio@freebsd.org>
To:        "Jeff Roberson" <jroberson@chesapeake.net>
Cc:        ups@freebsd.org, arch@freebsd.org, rwatson@freebsd.org
Subject:   Re: rwlock patch to prefer writers and improve spinning.
Message-ID:  <3bbf2fe10801291201n7b355205o43b648791f5ca387@mail.gmail.com>
In-Reply-To: <20080128190244.R957@desktop>
References:  <20080128190244.R957@desktop>

next in thread | previous in thread | raw e-mail | index | archive | help
2008/1/29, Jeff Roberson <jroberson@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?

Attilio


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



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