On Mon, Jul 8, 2024 at 3:15 PM Zhiguo Jiang <justinjiang@xxxxxxxx> wrote: > > If an anon folio reclaimed by shrink_inactive_list is mapped by an > exiting task, this anon folio will be firstly swaped-out into > swapspace in shrink flow and then this swap folio is freed in task > exit flow. But if this folio mapped by an exiting task can skip > shrink and be freed directly in task exiting flow, which will save > swap-out time and alleviate the load of the tasks exiting process. > The file folio is also similar. > > And when system is low memory, it more likely to occur, because more > backend applidatuions will be killed. > > This patch can alleviate the cpu load of the tasks exiting process. > > Signed-off-by: Qianfeng Rong <rongqianfeng@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> > --- > > Change log: > v3->v4: > 1.Modify that the unshared folios mapped only in exiting task are skip. > v2->v3: > Nothing. > v1->v2: > 1.The VM_EXITING added in v1 patch is removed, because it will fail > to compile in 32-bit system. > > Signed-off-by: Zhiguo Jiang <justinjiang@xxxxxxxx> > --- > mm/rmap.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > mode change 100644 => 100755 mm/rmap.c > > diff --git a/mm/rmap.c b/mm/rmap.c > index 26806b49a86f..16b7ed04bcbe > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -843,6 +843,16 @@ static bool folio_referenced_one(struct folio *folio, > int referenced = 0; > unsigned long start = address, ptes = 0; > > + /* Skip the unshared folios mapped only by the single > + * exiting process. > + */ > + if ((!atomic_read(&vma->vm_mm->mm_users) || > + test_bit(MMF_OOM_SKIP, &vma->vm_mm->flags)) && > + !test_bit(VM_SHARED, &vma->vm_flags)) { I don't think this is correct. folio_likely_mapped_shared() is almost "correct" but not always. > + pra->referenced = -1; Please explain why you set pra->referenced = -1. Please address all comments before you send a new version. > + return false; > + } > + > while (page_vma_mapped_walk(&pvmw)) { > address = pvmw.address; > > -- > 2.39.0 > Thanks Barry