linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@suse.de>
To: Linux-MM <linux-mm@kvack.org>
Cc: LKML <linux-kernel@vger.kernel.org>, XFS <xfs@oss.sgi.com>,
	Dave Chinner <david@fromorbit.com>,
	Christoph Hellwig <hch@infradead.org>,
	Johannes Weiner <jweiner@redhat.com>,
	Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
	Rik van Riel <riel@redhat.com>,
	Minchan Kim <minchan.kim@gmail.com>, Mel Gorman <mgorman@suse.de>
Subject: [PATCH 1/7] mm: vmscan: Do not writeback filesystem pages in direct reclaim
Date: Wed, 10 Aug 2011 11:47:14 +0100	[thread overview]
Message-ID: <1312973240-32576-2-git-send-email-mgorman@suse.de> (raw)
In-Reply-To: <1312973240-32576-1-git-send-email-mgorman@suse.de>

From: Mel Gorman <mel@csn.ul.ie>

When kswapd is failing to keep zones above the min watermark, a process
will enter direct reclaim in the same manner kswapd does. If a dirty
page is encountered during the scan, this page is written to backing
storage using mapping->writepage.

This causes two problems. First, it can result in very deep call
stacks, particularly if the target storage or filesystem are complex.
Some filesystems ignore write requests from direct reclaim as a result.
The second is that a single-page flush is inefficient in terms of IO.
While there is an expectation that the elevator will merge requests,
this does not always happen. Quoting Christoph Hellwig;

	The elevator has a relatively small window it can operate on,
	and can never fix up a bad large scale writeback pattern.

This patch prevents direct reclaim writing back filesystem pages by
checking if current is kswapd. Anonymous pages are still written to
swap as there is not the equivalent of a flusher thread for anonymous
pages. If the dirty pages cannot be written back, they are placed
back on the LRU lists. There is now a direct dependency on dirty page
balancing to prevent too many pages in the system being dirtied which
would prevent reclaim making forward progress.

Signed-off-by: Mel Gorman <mgorman@suse.de>
Reviewed-by: Minchan Kim <minchan.kim@gmail.com>
---
 include/linux/mmzone.h |    1 +
 mm/vmscan.c            |    9 +++++++++
 mm/vmstat.c            |    1 +
 3 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 9f7c3eb..b70a0c0 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -100,6 +100,7 @@ enum zone_stat_item {
 	NR_UNSTABLE_NFS,	/* NFS unstable pages */
 	NR_BOUNCE,
 	NR_VMSCAN_WRITE,
+	NR_VMSCAN_WRITE_SKIP,
 	NR_WRITEBACK_TEMP,	/* Writeback using temporary buffers */
 	NR_ISOLATED_ANON,	/* Temporary isolated pages from anon lru */
 	NR_ISOLATED_FILE,	/* Temporary isolated pages from file lru */
diff --git a/mm/vmscan.c b/mm/vmscan.c
index d036e59..1522b0f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -825,6 +825,15 @@ static unsigned long shrink_page_list(struct list_head *page_list,
 		if (PageDirty(page)) {
 			nr_dirty++;
 
+			/*
+			 * Only kswapd can writeback filesystem pages to
+			 * avoid risk of stack overflow
+			 */
+			if (page_is_file_cache(page) && !current_is_kswapd()) {
+				inc_zone_page_state(page, NR_VMSCAN_WRITE_SKIP);
+				goto keep_locked;
+			}
+
 			if (references == PAGEREF_RECLAIM_CLEAN)
 				goto keep_locked;
 			if (!may_enter_fs)
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 20c18b7..fd109f3 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -702,6 +702,7 @@ const char * const vmstat_text[] = {
 	"nr_unstable",
 	"nr_bounce",
 	"nr_vmscan_write",
+	"nr_vmscan_write_skip",
 	"nr_writeback_temp",
 	"nr_isolated_anon",
 	"nr_isolated_file",
-- 
1.7.3.4

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2011-08-10 10:47 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-10 10:47 [PATCH 0/7] Reduce filesystem writeback from page reclaim v3 Mel Gorman
2011-08-10 10:47 ` Mel Gorman [this message]
2011-08-10 12:40   ` [PATCH 1/7] mm: vmscan: Do not writeback filesystem pages in direct reclaim Johannes Weiner
2011-08-11  9:03   ` KAMEZAWA Hiroyuki
2011-08-11 15:57   ` Rik van Riel
2011-08-10 10:47 ` [PATCH 2/7] mm: vmscan: Remove dead code related to lumpy reclaim waiting on pages under writeback Mel Gorman
2011-08-10 12:41   ` Johannes Weiner
2011-08-10 23:19   ` Minchan Kim
2011-08-11  9:05   ` KAMEZAWA Hiroyuki
2011-08-11 16:52   ` Rik van Riel
2011-08-10 10:47 ` [PATCH 3/7] xfs: Warn if direct reclaim tries to writeback pages Mel Gorman
2011-08-11 16:53   ` Rik van Riel
2011-08-10 10:47 ` [PATCH 4/7] ext4: " Mel Gorman
2011-08-11 17:07   ` Rik van Riel
2011-08-10 10:47 ` [PATCH 5/7] mm: vmscan: Do not writeback filesystem pages in kswapd except in high priority Mel Gorman
2011-08-10 12:44   ` Johannes Weiner
2011-08-11  9:10   ` KAMEZAWA Hiroyuki
2011-08-11 20:25     ` Mel Gorman
2011-08-17  1:06       ` KAMEZAWA Hiroyuki
2011-08-11 18:18   ` Rik van Riel
2011-08-11 20:38     ` Mel Gorman
2011-08-10 10:47 ` [PATCH 6/7] mm: vmscan: Throttle reclaim if encountering too many dirty pages under writeback Mel Gorman
2011-08-11  9:18   ` KAMEZAWA Hiroyuki
2011-08-12  2:47   ` Rik van Riel
2011-08-16 14:06   ` Wu Fengguang
2011-08-16 15:02     ` Mel Gorman
2011-08-18 14:02       ` Wu Fengguang
2011-08-18 23:54   ` Andrew Morton
2011-08-30 13:49     ` Mel Gorman
2011-08-31  9:53     ` Mel Gorman
2011-08-10 10:47 ` [PATCH 7/7] mm: vmscan: Immediately reclaim end-of-LRU dirty pages when writeback completes Mel Gorman
2011-08-10 23:22   ` Minchan Kim
2011-08-11  9:19   ` KAMEZAWA Hiroyuki
2011-08-12 15:27   ` Rik van Riel
2011-08-10 11:00 ` [PATCH 0/7] Reduce filesystem writeback from page reclaim v3 Christoph Hellwig
2011-08-10 11:15   ` Mel Gorman
2011-08-11 23:45     ` Christoph Hellwig
2011-08-18 23:54 ` Andrew Morton
2011-08-20 19:33   ` Mel Gorman
2011-08-30 13:19   ` Mel Gorman

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=1312973240-32576-2-git-send-email-mgorman@suse.de \
    --to=mgorman@suse.de \
    --cc=david@fromorbit.com \
    --cc=fengguang.wu@intel.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=jweiner@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan.kim@gmail.com \
    --cc=riel@redhat.com \
    --cc=xfs@oss.sgi.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).