On Sat, Jul 25, 2020 at 12:28 PM Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > What I tried to say. AFAICS before that commit we had (almost) the same > behaviour you propose now: unlock_page/etc wakes all the non-exclusive > waiters up. > > No? Yes, but no. We'd wake them _up_ fairly aggressively, but then they'd be caught on the bit being set again by the exclusive locker (that we also woke up). So they'd get woken up, and then go to sleep again. So the new behavior wakes things up more aggressively (but a different way), but not by letting them go out of order and early, but simply by not going back to sleep again. So the "wake up more" is very different - now it's about not going to sleep again, rather than by ordering the wakeup queue. We _could_ order the wakeup queue too, and put all non-exclusive weiters at the head again. And make it *really* aggressive. But since one of ourissues has been "latency of walking the wait queue", I'm not sure we want that. interspesing any blocking waiters - and stopping the waitqueue walking as a result - might be better under load. Wild handwaving. We could try it, but IO think that really would be a separate "try this out" patch. Right now, I think my patch will likely make for _better_ latencies for everything. Lower latency of non-exclusive waiters (because not going back to sleep), but also lower latency of walking the wait queue (because fewer entries, hopefully, and also less contention due to the "not going back to sleep" noise) Linus