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>