On Sat, Jul 27, 2024 at 4:31 AM Yosry Ahmed <yosryahmed@xxxxxxxxxx> wrote: > > On Fri, Jul 26, 2024 at 2:47 AM Barry Song <21cnbao@xxxxxxxxx> wrote: > > > > From: Barry Song <v-songbaohua@xxxxxxxx> > > > > With large folios swap-in, we might need to uncharge multiple entries > > all together, it is better to introduce a helper for that. > > > > Signed-off-by: Barry Song <v-songbaohua@xxxxxxxx> > > --- > > include/linux/memcontrol.h | 12 ++++++++++++ > > 1 file changed, 12 insertions(+) > > > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > > index 1b79760af685..55958cbce61b 100644 > > --- a/include/linux/memcontrol.h > > +++ b/include/linux/memcontrol.h > > @@ -684,6 +684,14 @@ int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm, > > gfp_t gfp, swp_entry_t entry); > > void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry); > > > > +static inline void mem_cgroup_swapin_uncharge_swap_nr(swp_entry_t entry, int nr) > > +{ > > + int i; > > + > > + for (i = 0; i < nr; i++, entry.val++) > > + mem_cgroup_swapin_uncharge_swap(entry); > > mem_cgroup_swapin_uncharge_swap() calls mem_cgroup_uncharge_swap() > which already takes in nr_pages, but we currently only pass 1. Would > it be better if we just make mem_cgroup_swapin_uncharge_swap() take in > nr_pages as well and pass it along to mem_cgroup_uncharge_swap(), > instead of calling it in a loop? > > This would batch the page counter, stats updates, and refcount updates > in mem_cgroup_uncharge_swap(). You may be able to observe a bit of a > performance gain with this. Good suggestion. I'll send the v6 version below after waiting for some comments on the other patches.