linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Lincheng Yang <lincheng.yang@transsion.corp-partner.google.com>
To: akpm@linux-foundation.org, rostedt@goodmis.org,
	mhiramat@kernel.org, willy@infradead.org, hughd@google.com,
	peterx@redhat.com, mike.kravetz@oracle.com, jgg@ziepe.ca,
	surenb@google.com, steven.price@arm.com,
	pasha.tatashin@soleen.com, kirill.shutemov@linux.intel.com,
	yuanchu@google.com, david@redhat.com,
	mathieu.desnoyers@efficios.com, dhowells@redhat.com,
	shakeelb@google.com, pcc@google.com, tytso@mit.edu,
	42.hyeyoo@gmail.com, vbabka@suse.cz, catalin.marinas@arm.com,
	lrh2000@pku.edu.cn, ying.huang@intel.com, mhocko@suse.com,
	vishal.moola@gmail.com, yosryahmed@google.com,
	findns94@gmail.com, neilb@suse.de
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	wanbin.wang@transsion.com, chunlei.zhuang@transsion.com,
	jinsheng.zhao@transsion.com, jiajun.ling@transsion.com,
	dongyun.liu@transsion.com,
	Lincheng Yang <lincheng.yang@transsion.com>
Subject: [RFC PATCH 0/5] hot page swap to zram, cold page swap to swapfile directly
Date: Sun,  8 Oct 2023 17:59:19 +0800	[thread overview]
Message-ID: <20231008095924.1165106-1-lincheng.yang@transsion.com> (raw)

Hi All,

We team developed a feature in Android linux v4.19 that can directly swapout
cold pages to the swapfile device and hot pages to the ZRAM device. This can
reduce the lag when writing back cold pages to backing-dev through ZRAM when
there is a lot of memory pressure, saving the ZRAM compression/decompression
process. Especially for low-end Android devices, low CPU frequency and small
memory.

Currently, Android uses the GKI strategy. We cannot directly modify the Linux
kernel to support this feature. We can only support it through the hook vendor.
However, this feature involves too many modifications. Google TAM suggested
that we push this feature to the Linux community.

The main changes are as follows:
[PATCH 2/5]: Set the hot and cold status for each page.
             If it is a cold page, it is swapout to the swapfile directly.
             If it is a hot page, it is swapout to the ZRAM device.
[PATCH 3/5]: When a VMA has many hot pages, predict that the VMA is hot,
             so that all anonymous pages of this VMA are hot and are only
             swapout to the ZRAM device.
[PATCH 4/5]: When user space uses madvise/process_madvise(MADV_PAGEOUT),
             swapout to the swapfile device directly.
[PATCH 5/5]: When the storage life of the external storage device is too
             low or the amount of daily writes to swapfile is too high,
             the user turns off swapout hot/cold page to the swapfile
             device and can only swapout to the ZRAM device.

This series is based on linux v6.5, this is just porting the core function to
linux v6.5.

If similar function already exists in the kernel, please let me know and give
it a shout, also comments and suggestions are welcome.

Thanks,
Lincheng Yang


Lincheng Yang (5):
  mm/swap_slots: cleanup swap slot cache
  mm: introduce hot and cold anon page flags
  mm: add VMA hot flag
  mm: add page implyreclaim flag
  mm/swapfile: add swapfile_write_enable interface

 fs/proc/task_mmu.c             |   3 +
 include/linux/mm.h             |  32 +++++++
 include/linux/mm_types.h       |   2 +
 include/linux/mm_types_task.h  |  10 +++
 include/linux/mmzone.h         |   1 +
 include/linux/page-flags.h     |   9 ++
 include/linux/swap.h           |   8 +-
 include/linux/swap_slots.h     |   2 +-
 include/trace/events/mmflags.h |   6 +-
 mm/filemap.c                   |   2 +
 mm/madvise.c                   |   7 +-
 mm/memory.c                    |  44 ++++++++++
 mm/migrate.c                   |   6 ++
 mm/rmap.c                      |   3 +
 mm/shmem.c                     |   2 +-
 mm/swap.h                      |   4 +-
 mm/swap_slots.c                | 133 +++++++++++++++++-----------
 mm/swap_state.c                |   4 +-
 mm/swapfile.c                  | 153 +++++++++++++++++++++++++++++++--
 mm/vmscan.c                    |  22 ++++-
 20 files changed, 384 insertions(+), 69 deletions(-)

--
2.34.1



             reply	other threads:[~2023-10-08  9:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-08  9:59 Lincheng Yang [this message]
2023-10-08  9:59 ` [RFC PATCH 1/5] mm/swap_slots: cleanup swap slot cache Lincheng Yang
2023-10-08  9:59 ` [RFC PATCH 2/5] mm: introduce hot and cold anon page flags Lincheng Yang
2023-10-08  9:59 ` [RFC PATCH 3/5] mm: add VMA hot flag Lincheng Yang
2023-10-08  9:59 ` [RFC PATCH 4/5] mm: add page implyreclaim flag Lincheng Yang
2023-10-08 11:07   ` Matthew Wilcox
2023-10-10  3:27     ` Lincheng Yang
2023-10-08  9:59 ` [RFC PATCH 5/5] mm/swapfile: add swapfile_write_enable interface Lincheng Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231008095924.1165106-1-lincheng.yang@transsion.com \
    --to=lincheng.yang@transsion.corp-partner.google.com \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=chunlei.zhuang@transsion.com \
    --cc=david@redhat.com \
    --cc=dhowells@redhat.com \
    --cc=dongyun.liu@transsion.com \
    --cc=findns94@gmail.com \
    --cc=hughd@google.com \
    --cc=jgg@ziepe.ca \
    --cc=jiajun.ling@transsion.com \
    --cc=jinsheng.zhao@transsion.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=lincheng.yang@transsion.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lrh2000@pku.edu.cn \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=mhocko@suse.com \
    --cc=mike.kravetz@oracle.com \
    --cc=neilb@suse.de \
    --cc=pasha.tatashin@soleen.com \
    --cc=pcc@google.com \
    --cc=peterx@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=shakeelb@google.com \
    --cc=steven.price@arm.com \
    --cc=surenb@google.com \
    --cc=tytso@mit.edu \
    --cc=vbabka@suse.cz \
    --cc=vishal.moola@gmail.com \
    --cc=wanbin.wang@transsion.com \
    --cc=willy@infradead.org \
    --cc=ying.huang@intel.com \
    --cc=yosryahmed@google.com \
    --cc=yuanchu@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).