Re: Success with new futex code from 2.6.0-test5
Ingo Molnar <[email protected]> Thu, 11 Sep 2003 00:12:43 +0200 (CEST)
| Newsgroups | gmane.comp.lib.phil |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 10 Sep 2003, Jamie Lokier wrote: > Here's an example: split mmap_sem into an array of semaphores using > current CPU as hash key (it's ok if the value changes due to > scheduling), or anything else as hash key. Reader just has to lock one > of them (any one), writer has to lock them all in order. like brlocks. well, if we make the read path completely per-CPU that will always introduce some sort of cost on the write path. It could be made statistical perhaps: there would be a 'readers faster' and a 'writers same speed' mode - and if there had been like 5 reads in a row then the lock switches over into the 'readers faster mode' - if 5 writes then the other mode. 'readers faster' would be the brlock-alike array structure. 'writers same speed' would be a central lock. Switchover between modes happens by modifying a flag - this flag would not bounce if the access is either typically read or typically write. although a 128-entry lock table on a 128 CPU system certainly sounds like overkill - but there's no other way to reduce bouncing but to make (some of) the reference counters per-CPU. Ingo