From: Minchan Kim <minchan@kernel.org>
To: Dave Hansen <dave.hansen@linux.intel.com>
Cc: linux-kernel@vger.kernel.org, mhocko@suse.com, jannh@google.com,
vbabka@suse.cz, dancol@google.com, joel@joelfernandes.org,
akpm@linux-foundation.org
Subject: Re: [PATCH 1/2] mm/madvise: help MADV_PAGEOUT to find swap cache pages
Date: Wed, 25 Mar 2020 23:24:51 -0700 [thread overview]
Message-ID: <20200326062451.GA110624@google.com> (raw)
In-Reply-To: <20200323234149.9FE95081@viggo.jf.intel.com>
On Mon, Mar 23, 2020 at 04:41:49PM -0700, Dave Hansen wrote:
>
> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> tl;dr: MADV_PAGEOUT ignores unmapped swap cache pages. Enable
> MADV_PAGEOUT to find and reclaim swap cache.
>
> The long story:
>
> Looking for another issue, I wrote a simple test which had two
> processes: a parent and a fork()'d child. The parent reads a
> memory buffer shared by the fork() and the child calls
> madvise(MADV_PAGEOUT) on the same buffer.
>
> The first call to MADV_PAGEOUT does what is expected: it pages
> the memory out and causes faults in the parent. However, after
> that, it does not cause any faults in the parent. MADV_PAGEOUT
> only works once! This was a surprise.
>
> The PTEs in the shared buffer start out pte_present()==1 in
> both parent and child. The first MADV_PAGEOUT operation replaces
> those with pte_present()==0 swap PTEs. The parent process
> quickly faults and recreates pte_present()==1. However, the
> child process (the one calling MADV_PAGEOUT) never touches the
> memory and has retained the non-present swap PTEs.
>
> This situation could also happen in the case where a single
> process had some of its data placed in the swap cache but where
> the memory has not yet been reclaimed.
>
> The MADV_PAGEOUT code has a pte_present()==0 check. It will
> essentially ignore any pte_present()==0 pages. This essentially
> makes unmapped swap cache immune from MADV_PAGEOUT, which is not
> very friendly behavior.
>
> Enable MADV_PAGEOUT to find and reclaim swap cache. Because
> swap cache is not pinned by holding the PTE lock, a reference
> must be held until the page is isolated, where a second
> reference is obtained.
>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: Minchan Kim <minchan@kernel.org>
next prev parent reply other threads:[~2020-03-26 6:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-23 23:41 [PATCH 0/2] mm/madvise: teach MADV_PAGEOUT about swap cache Dave Hansen
2020-03-23 23:41 ` [PATCH 1/2] mm/madvise: help MADV_PAGEOUT to find swap cache pages Dave Hansen
2020-03-26 6:24 ` Minchan Kim [this message]
2020-03-23 23:41 ` [PATCH 2/2] mm/madvise: skip MADV_PAGEOUT on shared " Dave Hansen
2020-03-26 6:28 ` Minchan Kim
2020-03-26 23:00 ` Dave Hansen
2020-03-27 6:42 ` Minchan Kim
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=20200326062451.GA110624@google.com \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=dancol@google.com \
--cc=dave.hansen@linux.intel.com \
--cc=jannh@google.com \
--cc=joel@joelfernandes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@suse.com \
--cc=vbabka@suse.cz \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.