On Fri, Sep 11, 2020 at 9:19 AM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > Ok, it's probably simply that fairness is really bad for performance > here in general, and that special case is just that - a special case, > not the main issue. Ahh. It turns out that I should have looked more at the fault path after all. It was higher up in the profile, but I ignored it because I found that lock-unlock-lock pattern lower down. The main contention point is actually filemap_fault(). Your apache test accesses the 'test.html' file that is mmap'ed into memory, and all the threads hammer on that one single file concurrently and that seems to be the main page lock contention. Which is really sad - the page lock there isn't really all that interesting, and the normal "read()" path doesn't even take it. But faulting the page in does so because the page will have a long-term existence in the page tables, and so there's a worry about racing with truncate. Interesting, but also very annoying. Anyway, I don't have a solution for it, but thought I'd let you know that I'm still looking at this. Linus