Skip to content

mm: drop redundant lru_add_drain in anon folio reuse paths

Barry Song (Xiaomi) linux-mm lkml 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest4 patches 15 repliesIn review 2 of 4 applied
  2. v24 patches 23 repliesSuperseded
  3. v1 RFC3 patches 21 repliesSuperseded

Patches in v3 2 of 4 applied

#Subject and filesSizeRepliesApplied
1/4mm: avoid unnecessary lru drain for wp_can_reuse_anon_folio()mm/memory.c+7 -39 replies
2/4mm: drop stale folio_ref_count()==1 check in do_swap_page reuse logicmm/memory.c+3 -65 replies
3/4mm: entirely remove lru_add_drain in do_swap_pagemm/memory.c+0 -100 repliesApplied
4/4mm: clarify the folio_free_swap() for do_swap_page()mm/memory.c+8 -121 replyApplied

Reviews trailers per patch

All 4 patches have a Reviewed-by or Acked-by.

PatchKairui SongShakeel ButtBaoquan HeUsama ArifDavid Hildenbrand (Arm)
1/4R-b R-b A-b R-b R-b A-b
2/4R-b A-b R-b A-b A-b
3/4A-b R-b A-b
4/4A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 5 reviewers.

Read the v3 thread

Cover letter [PATCH v3 0/4] mm: drop redundant lru_add_drain in anon folio reuse paths

We are doing a large number of redundant lru_add_drain() calls in both wp_can_reuse_anon_folio() and do_swap_page(), leading to LRU lock contention and unnecessary overhead.

In wp_can_reuse_anon_folio(), we can check the refcount against the lru_cache before deciding to drain. In do_swap_page(), the drain is now entirely redundant after Kairui's work to route SYNC I/O through the swapcache in the same way as ASYNC I/O.

Build the kernel within a 1 GB memcg using 20 threads with zRAM swap. The number of lru_add_drain() calls is reduced from 276,278 to 226,318, a reduction of about 18%.

Build the kernel within an 800 MB memcg using 20 threads with zRAM swap. The number of lru_add_drain() calls is reduced from 778,950 to 541,149, a reduction of 30.5%.

-v3:
* code improvements for patch1/4 and patch2/4 as suggested by David;
* improve changelog as suggested by Shakeel and David;
* collect the reviewed-by and acked-by tags;
* for patch4, remove all dependency for refcount regarding swapcache free in do_swap_page, as suggested by David

-v2:
https://lore.kernel.org/linux-mm/[email protected]/
* collect the reviewed-by and acked-by tags from Usama, Baoquan, Shakeel, Kairui, thanks!
* add patch4 to free swapcache for non-LRU folios, as suggested by Kairui, thanks!

-RFC:
https://lore.kernel.org/linux-mm/[email protected]/

Barry Song (Xiaomi) (4):
mm: avoid unnecessary lru drain for wp_can_reuse_anon_folio()
mm: drop stale folio_ref_count()==1 check in do_swap_page reuse logic
mm: entirely remove lru_add_drain in do_swap_page
mm: clarify the folio_free_swap() for do_swap_page()

 mm/memory.c | 49 ++++++++++++++++++-------------------------------
 1 file changed, 18 insertions(+), 31 deletions(-)
Signature · 1 line
2.39.3 (Apple Git-146)