[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: rwlock changes
-----BEGIN PGP SIGNED MESSAGE-----
Andrew Doran wrote:
| This diff does the following:
| - Use atomic ops directly, since rwlocks work the same way on all
| - Try to make it a bit more cache efficient, and use branch hints.
| - Fix a bug in rw_downgrade() where the turnstile lock was not released.
| - Remove a couple of redundant assertions.
| - Use atomic_swap instead of atomic_cas in one place where it's safe.
| - After acquiring turnstile lock in rw_vector_enter, check if owner is
| running again and spin if so.
| It also changes the handoff/release algorithm to work like this:
| * If we are releasing a write lock, then prefer to wake all
| * outstanding readers. Otherwise, wake one writer if there
| * are outstanding readers, or all writers if there are no
| * pending readers. If waking one specific writer, the writer
| * is handed the lock here. If waking multiple writers, we
| * set WRITE_WANTED to block out new readers, and let them
| * do the work of acquring the lock in rw_vector_enter().
| So, direct handoff is only done when there are readers involved (wakeing
| readers, or readers pending on the lock). Otherwise threads being awoken
| must acquire the lock themselves, making it work like an adaptive mutex in
| that case. It weakens the defence against starvation slightly but I'm
| fairly confident that it shouldn't be a problem.
| The sum of these changes is a reduction of 4% in build time on an 8-core
| machine. There is less idle time during the build because the windows
| a rwlock can be held but the owner is not running is reduced.
What do you think about "Sequential locks" ?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
-----END PGP SIGNATURE-----
Main Index |
Thread Index |