On an embedded system like Android, more than half of anon memory is actually in swap devices such as zRAM. For example, while an app is switched to back- ground, its most memory might be swapped-out. Now we have mTHP features, unfortunately, if we don't support large folios swap-in, once those large folios are swapped-out, we immediately lose the performance gain we can get through large folios and hardware optimization such as CONT-PTE. In theory, we don't need to rely on Ryan's swap out patchset[1]. That is to say, before swap-out, if some memory were normal pages, but when swapping in, we can also swap-in them as large folios. But this might require I/O happen at some random places in swap devices. So we limit the large folios swap-in to those areas which were large folios before swapping-out, aka, swaps are also contiguous in hardware. On the other hand, in OPPO's product, we've deployed anon large folios on millions of phones[2]. we enhanced zsmalloc and zRAM to compress and decompress large folios as a whole, which help improve compression ratio and decrease CPU consumption significantly. In zsmalloc and zRAM we can save large objects whose original size are 64KiB for example. So it is also a better choice for us to only swap-in large folios for those compressed large objects as a large folio can be decompressed all together. Note I am moving my previous "arm64: mm: swap: support THP_SWAP on hardware with MTE" to this series as it might help review. [1] [PATCH v3 0/4] Swap-out small-sized THP without splitting https://lore.kernel.org/linux-mm/20231025144546.577640-1-ryan.roberts@xxxxxxx/ [2] OnePlusOSS / android_kernel_oneplus_sm8550 https://github.com/OnePlusOSS/android_kernel_oneplus_sm8550/tree/oneplus/sm8550_u_14.0.0_oneplus11 Barry Song (2): arm64: mm: swap: support THP_SWAP on hardware with MTE mm: rmap: weaken the WARN_ON in __folio_add_anon_rmap() Chuanhua Han (4): mm: swap: introduce swap_nr_free() for batched swap_free() mm: swap: make should_try_to_free_swap() support large-folio mm: support large folios swapin as a whole mm: madvise: don't split mTHP for MADV_PAGEOUT arch/arm64/include/asm/pgtable.h | 21 ++---- arch/arm64/mm/mteswap.c | 42 ++++++++++++ include/asm-generic/tlb.h | 10 +++ include/linux/huge_mm.h | 12 ---- include/linux/pgtable.h | 62 ++++++++++++++++- include/linux/swap.h | 6 ++ mm/madvise.c | 48 ++++++++++++++ mm/memory.c | 110 ++++++++++++++++++++++++++----- mm/page_io.c | 2 +- mm/rmap.c | 5 +- mm/swap_slots.c | 2 +- mm/swapfile.c | 29 ++++++++ 12 files changed, 301 insertions(+), 48 deletions(-) -- 2.34.1