From: Minchan Kim <minchan@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Hugh Dickins <hughd@google.com>, Rik van Riel <riel@redhat.com>,
Mel Gorman <mgorman@suse.de>, Michal Hocko <mhocko@suse.cz>,
Johannes Weiner <hannes@cmpxchg.org>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Vlastimil Babka <vbabka@suse.cz>,
Minchan Kim <minchan@kernel.org>
Subject: [PATCH 0/5] MADV_FREE refactoring and fix KSM page
Date: Mon, 19 Oct 2015 15:31:42 +0900 [thread overview]
Message-ID: <1445236307-895-1-git-send-email-minchan@kernel.org> (raw)
Hello, it's too late since I sent previos patch.
https://lkml.org/lkml/2015/6/3/37
This patch is alomost new compared to previos approach.
I think this is more simple, clear and easy to review.
One thing I should notice is that I have tested this patch
and couldn't find any critical problem so I rebased patchset
onto recent mmotm(ie, mmotm-2015-10-15-15-20) to send formal
patchset. Unfortunately, I start to see sudden discarding of
the page we shouldn't do. IOW, application's valid anonymous page
was disappeared suddenly.
When I look through THP changes, I think we could lose
dirty bit of pte between freeze_page and unfreeze_page
when we mark it as migration entry and restore it.
So, I added below simple code without enough considering
and cannot see the problem any more.
I hope it's good hint to find right fix this problem.
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index d5ea516ffb54..e881c04f5950 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3138,6 +3138,9 @@ static void unfreeze_page_vma(struct vm_area_struct *vma, struct page *page,
if (is_write_migration_entry(swp_entry))
entry = maybe_mkwrite(entry, vma);
+ if (PageDirty(page))
+ SetPageDirty(page);
+
flush_dcache_page(page);
set_pte_at(vma->vm_mm, address, pte + i, entry);
Although it fixes abvove problem, I can encounter below another bug
in several hours.
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:1 val:439
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:2 val:73
Or
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:1 val:512
It seems we are zapping THP page without decreasing MM_ANONPAGES
and MM_SWAPENTS. Of course, it could be a bug of MADV_FREE and
recent changes of THP reveals it. What I can say is I couldn't see
any problem until mmotm-2015-10-06-16-30 so I guess there is some
conflict with THP-refcount redesign of Kirill or it makes to reveal
MADV_FREE's hidden bug.
I will hunt it down but I hope Kirill might catch it up earlier than me.
Major thing with this patch is two things.
1. Work with MADV_FREE on PG_dirty page.
So far, MADV_FREE doesn't work with page which is not in swap cache
but has PG_dirty(ex, swapped-in page). Details are in [3/5].
2. Make MADV_FREE discard path simple
Current logic for discarding hinted page is really mess
so [4/5] makes it simple and clean.
3. Fix with KSM page
A process can have KSM page which is no dirty bit in page table
entry and no PG_dirty in page->flags so VM could discard it wrongly.
[5/5] fixes it.
Minchan Kim (5):
[1/5] mm: MADV_FREE trivial clean up
[2/5] mm: skip huge zero page in MADV_FREE
[3/5] mm: clear PG_dirty to mark page freeable
[4/5] mm: simplify reclaim path for MADV_FREE
[5/5] mm: mark stable page dirty in KSM
include/linux/rmap.h | 6 +----
mm/huge_memory.c | 9 ++++----
mm/ksm.c | 12 ++++++++++
mm/madvise.c | 29 +++++++++++-------------
mm/rmap.c | 46 +++++++------------------------------
mm/swap_state.c | 5 ++--
mm/vmscan.c | 64 ++++++++++++++++------------------------------------
7 files changed, 60 insertions(+), 111 deletions(-)
--
1.9.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Minchan Kim <minchan@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Hugh Dickins <hughd@google.com>, Rik van Riel <riel@redhat.com>,
Mel Gorman <mgorman@suse.de>, Michal Hocko <mhocko@suse.cz>,
Johannes Weiner <hannes@cmpxchg.org>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Vlastimil Babka <vbabka@suse.cz>,
Minchan Kim <minchan@kernel.org>
Subject: [PATCH 0/5] MADV_FREE refactoring and fix KSM page
Date: Mon, 19 Oct 2015 15:31:42 +0900 [thread overview]
Message-ID: <1445236307-895-1-git-send-email-minchan@kernel.org> (raw)
Hello, it's too late since I sent previos patch.
https://lkml.org/lkml/2015/6/3/37
This patch is alomost new compared to previos approach.
I think this is more simple, clear and easy to review.
One thing I should notice is that I have tested this patch
and couldn't find any critical problem so I rebased patchset
onto recent mmotm(ie, mmotm-2015-10-15-15-20) to send formal
patchset. Unfortunately, I start to see sudden discarding of
the page we shouldn't do. IOW, application's valid anonymous page
was disappeared suddenly.
When I look through THP changes, I think we could lose
dirty bit of pte between freeze_page and unfreeze_page
when we mark it as migration entry and restore it.
So, I added below simple code without enough considering
and cannot see the problem any more.
I hope it's good hint to find right fix this problem.
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index d5ea516ffb54..e881c04f5950 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3138,6 +3138,9 @@ static void unfreeze_page_vma(struct vm_area_struct *vma, struct page *page,
if (is_write_migration_entry(swp_entry))
entry = maybe_mkwrite(entry, vma);
+ if (PageDirty(page))
+ SetPageDirty(page);
+
flush_dcache_page(page);
set_pte_at(vma->vm_mm, address, pte + i, entry);
Although it fixes abvove problem, I can encounter below another bug
in several hours.
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:1 val:439
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:2 val:73
Or
BUG: Bad rss-counter state mm:ffff88007fc28000 idx:1 val:512
It seems we are zapping THP page without decreasing MM_ANONPAGES
and MM_SWAPENTS. Of course, it could be a bug of MADV_FREE and
recent changes of THP reveals it. What I can say is I couldn't see
any problem until mmotm-2015-10-06-16-30 so I guess there is some
conflict with THP-refcount redesign of Kirill or it makes to reveal
MADV_FREE's hidden bug.
I will hunt it down but I hope Kirill might catch it up earlier than me.
Major thing with this patch is two things.
1. Work with MADV_FREE on PG_dirty page.
So far, MADV_FREE doesn't work with page which is not in swap cache
but has PG_dirty(ex, swapped-in page). Details are in [3/5].
2. Make MADV_FREE discard path simple
Current logic for discarding hinted page is really mess
so [4/5] makes it simple and clean.
3. Fix with KSM page
A process can have KSM page which is no dirty bit in page table
entry and no PG_dirty in page->flags so VM could discard it wrongly.
[5/5] fixes it.
Minchan Kim (5):
[1/5] mm: MADV_FREE trivial clean up
[2/5] mm: skip huge zero page in MADV_FREE
[3/5] mm: clear PG_dirty to mark page freeable
[4/5] mm: simplify reclaim path for MADV_FREE
[5/5] mm: mark stable page dirty in KSM
include/linux/rmap.h | 6 +----
mm/huge_memory.c | 9 ++++----
mm/ksm.c | 12 ++++++++++
mm/madvise.c | 29 +++++++++++-------------
mm/rmap.c | 46 +++++++------------------------------
mm/swap_state.c | 5 ++--
mm/vmscan.c | 64 ++++++++++++++++------------------------------------
7 files changed, 60 insertions(+), 111 deletions(-)
--
1.9.1
next reply other threads:[~2015-10-19 6:28 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-19 6:31 Minchan Kim [this message]
2015-10-19 6:31 ` [PATCH 0/5] MADV_FREE refactoring and fix KSM page Minchan Kim
2015-10-19 6:31 ` [PATCH 1/5] mm: MADV_FREE trivial clean up Minchan Kim
2015-10-19 6:31 ` Minchan Kim
2015-10-19 6:31 ` [PATCH 2/5] mm: skip huge zero page in MADV_FREE Minchan Kim
2015-10-19 6:31 ` Minchan Kim
2015-10-19 6:31 ` [PATCH 3/5] mm: clear PG_dirty to mark page freeable Minchan Kim
2015-10-19 6:31 ` Minchan Kim
2015-10-27 1:28 ` Hugh Dickins
2015-10-27 1:28 ` Hugh Dickins
2015-10-27 6:50 ` Minchan Kim
2015-10-27 6:50 ` Minchan Kim
2015-10-19 6:31 ` [PATCH 4/5] mm: simplify reclaim path for MADV_FREE Minchan Kim
2015-10-19 6:31 ` Minchan Kim
2015-10-27 2:09 ` Hugh Dickins
2015-10-27 2:09 ` Hugh Dickins
2015-10-27 3:44 ` yalin wang
2015-10-27 3:44 ` yalin wang
2015-10-27 7:09 ` Minchan Kim
2015-10-27 7:09 ` Minchan Kim
2015-10-27 7:39 ` yalin wang
2015-10-27 7:39 ` yalin wang
2015-10-27 8:10 ` Minchan Kim
2015-10-27 8:10 ` Minchan Kim
2015-10-27 8:52 ` yalin wang
2015-10-27 8:52 ` yalin wang
2015-10-28 4:03 ` yalin wang
2015-10-28 4:03 ` yalin wang
2015-10-27 6:54 ` Minchan Kim
2015-10-27 6:54 ` Minchan Kim
2015-10-19 6:31 ` [PATCH 5/5] mm: mark stable page dirty in KSM Minchan Kim
2015-10-19 6:31 ` Minchan Kim
2015-10-27 2:23 ` Hugh Dickins
2015-10-27 2:23 ` Hugh Dickins
2015-10-27 6:58 ` Minchan Kim
2015-10-27 6:58 ` Minchan Kim
2015-10-19 10:01 ` [PATCH 0/5] MADV_FREE refactoring and fix KSM page Minchan Kim
2015-10-19 10:01 ` Minchan Kim
2015-10-20 1:38 ` Minchan Kim
2015-10-20 1:38 ` Minchan Kim
2015-10-20 7:21 ` Minchan Kim
2015-10-20 7:21 ` Minchan Kim
2015-10-20 7:27 ` Minchan Kim
2015-10-20 7:27 ` Minchan Kim
2015-10-20 21:36 ` Andrew Morton
2015-10-20 21:36 ` Andrew Morton
2015-10-20 22:43 ` Kirill A. Shutemov
2015-10-20 22:43 ` Kirill A. Shutemov
2015-10-21 5:11 ` Minchan Kim
2015-10-21 5:11 ` Minchan Kim
2015-10-21 7:50 ` Kirill A. Shutemov
2015-10-21 7:50 ` Kirill A. Shutemov
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=1445236307-895-1-git-send-email-minchan@kernel.org \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@suse.cz \
--cc=riel@redhat.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.