Date: Wed, 30 Jan 2008 01:59:53 +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: <3bbf2fe10801291659r650ec27eu5c346b1b85118713@mail.gmail.com> In-Reply-To: <20080129143512.M957@desktop> References: <20080128190244.R957@desktop> <3bbf2fe10801291201n7b355205o43b648791f5ca387@mail.gmail.com> <20080129143512.M957@desktop>
next in thread | previous in thread | raw e-mail | index | archive | help
2008/1/30, Jeff Roberson <jroberson@chesapeake.net>: > On Tue, 29 Jan 2008, Attilio Rao wrote: > > > 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? > > 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3bbf2fe10801291659r650ec27eu5c346b1b85118713>