On Wed, Jun 17, 2020 at 12:58 PM Peter Xu <peterx@xxxxxxxxxx> wrote: > > But currently remote GUP will still do the page fault accounting on the remote > task_struct, am I right? E.g., when the get_user_pages_remote() is called with > "tsk != current", it seems the faultin_page() will still do maj_flt/min_flt > accounting for that remote task/thread? Well, that would be a data race and fundamentally buggy. It would be ok with something like ptrace (which only works when the target is quiescent), but is completely wrong otherwise. I guess it works fine in practice, and it's only statistics so even if you were to have a data race it doesn't much matter, but it's definitely conceptually very very wrong. The fault stats should be about who does the fault (they are about the _thread_) not about who the fault is done to (which is about the _mm_). Allocating the fault data to somebody else sounds frankly silly and stupid to me, exactly because it's (a) racy and (b) not even conceptually correct. The other thread literally _isn't_ doing a major page fault, for crissake! Now, there are some actual per-mm statistics too (the rss stuff etc), and it's fundamentally harder exactly because of the shared data. See the mm_counter stuff etc. Those are not about who does soemthing, they are about the resulting MM state. Linus