[RFC PATCH v2 0/5] Minor cleanups and performance optimizations for LRU rework

Alexander Duyck
2020-08-19T04:26:57Z

So this patch set addresses a few minor issues I have found and is based on
the lrunext branch of the tree at:
https://github.com/alexshi/linux.git

The first three patches address various issues if ound with the patch set
such as the fact that we were skipping non-LRU compound pages one 4K page
at a time, the fact that test_and_set_skip had been made redundant by the
fact that the LRU bit made the setting of the bit exclusive per pageblock,
and the fact that we were using put_page while holding the LRU lock.

The last two patches are some patches I have been experimenting with.
Basically trying to reduce the number of times the LRU lock has to be
released and reacquired by batching LRU work together, or deferring the
freeing/returning of pages to LRU in the case of move_pages_to_lru. I am
still working on generating data but for the fourth patch I have seen an
improvement of about 5% on the will-it-scale/page_fault2 test with THP
enabled by default, however that is just some preliminary data and I still
have a number of tests left to run.

---

Alexander Duyck (5):
mm: Identify compound pages sooner in isolate_migratepages_block
mm: Drop use of test_and_set_skip in favor of just setting skip
mm: Add explicit page decrement in exception path for isolate_lru_pages
mm: Split release_pages work into 3 passes
mm: Split move_pages_to_lru into 3 separate passes

mm/compaction.c | 84 +++++++++++++++---------------------------
mm/swap.c | 109 ++++++++++++++++++++++++++++++++++---------------------
mm/vmscan.c | 77 +++++++++++++++++++++++----------------
3 files changed, 142 insertions(+), 128 deletions(-)