linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] MADV_FREE refactoring and fix KSM page
@ 2015-10-19  6:31 Minchan Kim
  2015-10-19  6:31 ` [PATCH 1/5] mm: MADV_FREE trivial clean up Minchan Kim
                   ` (5 more replies)
  0 siblings, 6 replies; 26+ messages in thread
From: Minchan Kim @ 2015-10-19  6:31 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, linux-kernel, Hugh Dickins, Rik van Riel, Mel Gorman,
	Michal Hocko, Johannes Weiner, Kirill A. Shutemov,
	Vlastimil Babka, Minchan Kim

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


^ permalink raw reply related	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2015-10-28  4:04 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [PATCH 2/5] mm: skip huge zero page in MADV_FREE Minchan Kim
2015-10-19  6:31 ` [PATCH 3/5] mm: clear PG_dirty to mark page freeable Minchan Kim
2015-10-27  1:28   ` Hugh Dickins
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-27  2:09   ` Hugh Dickins
2015-10-27  3:44     ` yalin wang
2015-10-27  7:09       ` Minchan Kim
2015-10-27  7:39         ` yalin wang
2015-10-27  8:10           ` Minchan Kim
2015-10-27  8:52             ` yalin wang
2015-10-28  4:03               ` yalin wang
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-27  2:23   ` Hugh Dickins
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-20  1:38   ` Minchan Kim
2015-10-20  7:21   ` Minchan Kim
2015-10-20  7:27     ` Minchan Kim
2015-10-20 21:36     ` Andrew Morton
2015-10-20 22:43       ` Kirill A. Shutemov
2015-10-21  5:11         ` Minchan Kim
2015-10-21  7:50           ` Kirill A. Shutemov

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).