On Thu, May 30, 2024 at 1:04 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Thu, May 30, 2024 at 09:24:20AM -0700, Yosry Ahmed wrote: > > I am wondering if it's even possible to take this one step further and > > avoid reclaiming zero-filled pages in the first place. Can we just > > unmap them and let the first read fault allocate a zero'd page like > > uninitialized memory, or point them at the zero page and make them > > read-only, or something? Then we could free them directly without > > going into the swap code to begin with. > > I was having similar thoughts. You can see in do_anonymous_page() that > we simply map the shared zero page when we take a read fault on > unallocated anon memory. > > So my question is where are all these zero pages coming from in the Meta > fleet? Obviously we never try to swap out the shared zero page (it's > not on any LRU list). So I see three possibilities: > > - Userspace wrote to it, but it wrote zeroes. Then we did a memcmp(), > discovered it was zeroes and fall into this path. It would be safe > to just discard this page. > - We allocated it as part of a THP. We never wrote to this particular > page of the THP, so it's zero-filled. While it's safe to just > discard this page, we might want to write it for better swap-in > performance. My understanding is that here we check if the entire folio is zero-filled. If the THP is still intact as a single folio, we will only apply the optimization if the entire THP is zero-filled. If we are checking a page that used to be part of a THP, then I think the THP is already split and swap-in performance would not be affected. Did I miss anything here? > - Userspace wrote non-zeroes to it, then wrote zeroes to it before > abandoning use of this page, and so it eventually got swapped out. > Perhaps we could teach userspace to MADV_DONTNEED the page instead? Why wouldn't it be safe to discard the page in this case as well? > > Has any data been gathered on this? Maybe there are other sources of > zeroed pages that I'm missing. I do remember a presentation at LSFMM > in 2022 from Google about very sparsely used THPs. Apart from that, we may also want to think about shmem if we want a general approach to avoid swapping out zero pages.