I'd like to add one more point. Users mark pages as lazyfree with MADV_FREE, expecting these pages to be reclaimed until memory pressure occurs. Currently, khugepaged treats lazyfree pages the same as pte_none, which seems reasonable. IMO, avoiding the copying of these pages to the new huge page during khugepaged collapse can better keep the semantics of MADV_FREE. It appears that lazyfree pages are reclaimed before khugepaged collapses them. Thanks, Lance On Fri, Feb 2, 2024 at 9:46 PM Lance Yang <ioworker0@xxxxxxxxx> wrote: > > Here is a part from the man page explaining > the MADV_FREE semantics: > > The kernel can thus free thesepages, but the > freeing could be delayed until memory pressure > occurs. For each of the pages that has been > marked to be freed but has not yet been freed, > the free operation will be canceled if the caller > writes into the page. If there is no subsequent > write, the kernel can free the pages at any time. > > IIUC, if there is no subsequent write, lazyfree > pages will eventually be reclaimed. khugepaged > treats lazyfree pages the same as pte_none, > avoiding copying them to the new huge page > during collapse. It seems that lazyfree pages > are reclaimed before khugepaged collapses them. > This aligns with user expectations. > > However, IMO, if the content of MADV_FREE pages > remains valid during collapse, then khugepaged > treating lazyfree pages the same as pte_none > might not be suitable. > > Thanks, > Lance > > On Fri, Feb 2, 2024 at 8:57 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > > > On Fri 02-02-24 20:52:48, Lance Yang wrote: > > > On Fri, Feb 2, 2024 at 8:27 PM Michal Hocko <mhocko@xxxxxxxx> wrote: > > > > > > > > On Fri 02-02-24 19:18:31, Lance Yang wrote: > > > > > IMO, since it's treated the same as pte_none, > > > > > perhaps lazyfree pages shouldn't be copied to > > > > > the new huge page. > > > > > > > > Why? The content of MADV_FREE page is valid until it is reclaimed. > > > > > > IMO, if MADV_FREE pages are considered valid until > > > reclaimed, treating them the same as pte_none might > > > pose a conflict. > > > > What kind of conflict? > > -- > > Michal Hocko > > SUSE Labs