Messages in this thread | | | Date | Tue, 5 Jan 2010 10:25:43 -0800 (PST) | From | Linus Torvalds <> | Subject | Re: [RFC][PATCH 6/8] mm: handle_speculative_fault() |
| |
On Tue, 5 Jan 2010, Christoph Lameter wrote: > > If the critical section protected by the spinlock is small then the > delay will keep the cacheline exclusive until we hit the unlock. This > is the case here as far as I can tell.
I hope somebody can time it. Because I think the idle reads on all the (unsuccessful) spinlocks will kill it.
Think of it this way: under heavy contention, you'll see a lot of people waiting for the spinlocks and one of them succeeds at writing it, reading the line. So you get an O(n^2) bus traffic access pattern. In contrast, with an xadd, you get O(n) behavior - everybody does _one_ acquire-for- write bus access.
Remember: the critical section is small, but since you're contending on the spinlock, that doesn't much _help_. The readers are all hitting the lock (and you can try to solve the O(n*2) issue with back-off, but quite frankly, anybody who does that has basically already lost - I'm personally convinced you should never do lock backoff, and instead look at what you did wrong at a higher level instead).
Linus
| |