Date: Wed, 30 Jan 2008 14:56:05 -1000 (HST) From: Jeff Roberson <jroberson@chesapeake.net> To: Attilio Rao <attilio@freebsd.org> Cc: ups@freebsd.org, arch@freebsd.org, rwatson@freebsd.org Subject: Re: rwlock patch to prefer writers and improve spinning. Message-ID: <20080130145548.P957@desktop> In-Reply-To: <3bbf2fe10801291659r650ec27eu5c346b1b85118713@mail.gmail.com> References: <20080128190244.R957@desktop> <3bbf2fe10801291201n7b355205o43b648791f5ca387@mail.gmail.com> <20080129143512.M957@desktop> <3bbf2fe10801291659r650ec27eu5c346b1b85118713@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 30 Jan 2008, Attilio Rao wrote: > 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 :) The patch is updated in place at: http://people.freebsd.org/~jeff/rwlock.diff > > 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?20080130145548.P957>