From: Mel Gorman <mel@csn.ul.ie>
To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mm@kvack.org
Cc: Dave Chinner <david@fromorbit.com>,
Chris Mason <chris.mason@oracle.com>,
Nick Piggin <npiggin@suse.de>, Rik van Riel <riel@redhat.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Christoph Hellwig <hch@infradead.org>,
Wu Fengguang <fengguang.wu@intel.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Andrew Morton <akpm@linux-foundation.org>,
Andrea Arcangeli <aarcange@redhat.com>,
Mel Gorman <mel@csn.ul.ie>
Subject: [PATCH 7/8] writeback: sync old inodes first in background writeback
Date: Mon, 19 Jul 2010 14:11:29 +0100 [thread overview]
Message-ID: <1279545090-19169-8-git-send-email-mel@csn.ul.ie> (raw)
In-Reply-To: <1279545090-19169-1-git-send-email-mel@csn.ul.ie>
From: Wu Fengguang <fengguang.wu@intel.com>
A background flush work may run for ever. So it's reasonable for it to
mimic the kupdate behavior of syncing old/expired inodes first.
This behavior also makes sense from the perspective of page reclaim.
File pages are added to the inactive list and promoted if referenced
after one recycling. If not referenced, it's very easy for pages to be
cleaned from reclaim context which is inefficient in terms of IO. If
background flush is cleaning pages, it's best it cleans old pages to
help minimise IO from reclaim.
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
---
fs/fs-writeback.c | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index d5be169..cc81c67 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -612,13 +612,14 @@ static long wb_writeback(struct bdi_writeback *wb,
.range_cyclic = work->range_cyclic,
};
unsigned long oldest_jif;
+ int expire_interval = msecs_to_jiffies(dirty_expire_interval * 10);
+ int fg_rounds = 0;
long wrote = 0;
struct inode *inode;
- if (wbc.for_kupdate) {
+ if (wbc.for_kupdate || wbc.for_background) {
wbc.older_than_this = &oldest_jif;
- oldest_jif = jiffies -
- msecs_to_jiffies(dirty_expire_interval * 10);
+ oldest_jif = jiffies - expire_interval;
}
if (!wbc.range_cyclic) {
wbc.range_start = 0;
@@ -649,6 +650,18 @@ static long wb_writeback(struct bdi_writeback *wb,
work->nr_pages -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
wrote += MAX_WRITEBACK_PAGES - wbc.nr_to_write;
+ if (work->for_background && expire_interval &&
+ ++fg_rounds && list_empty(&wb->b_io)) {
+ if (fg_rounds < 10)
+ expire_interval >>= 1;
+ if (expire_interval)
+ oldest_jif = jiffies - expire_interval;
+ else
+ wbc.older_than_this = 0;
+ fg_rounds = 0;
+ continue;
+ }
+
/*
* If we consumed everything, see if we have more
*/
--
1.7.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>
next prev parent reply other threads:[~2010-07-19 13:11 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-19 13:11 [PATCH 0/8] Reduce writeback from page reclaim context V4 Mel Gorman
2010-07-19 13:11 ` [PATCH 1/8] vmscan: tracing: Roll up of patches currently in mmotm Mel Gorman
2010-07-19 13:11 ` [PATCH 2/8] vmscan: tracing: Update trace event to track if page reclaim IO is for anon or file pages Mel Gorman
2010-07-19 13:24 ` Rik van Riel
2010-07-19 14:15 ` Christoph Hellwig
2010-07-19 14:24 ` Mel Gorman
2010-07-19 14:26 ` Christoph Hellwig
2010-07-19 13:11 ` [PATCH 3/8] vmscan: tracing: Update post-processing script to distinguish between anon and file IO from page reclaim Mel Gorman
2010-07-19 13:32 ` Rik van Riel
2010-07-19 13:11 ` [PATCH 4/8] vmscan: Do not writeback filesystem pages in direct reclaim Mel Gorman
2010-07-19 14:19 ` Christoph Hellwig
2010-07-19 14:26 ` Mel Gorman
2010-07-19 18:25 ` Rik van Riel
2010-07-19 22:14 ` Johannes Weiner
2010-07-20 13:45 ` Mel Gorman
2010-07-20 22:02 ` Johannes Weiner
2010-07-21 11:36 ` Johannes Weiner
2010-07-21 11:52 ` Mel Gorman
2010-07-21 12:01 ` KAMEZAWA Hiroyuki
2010-07-21 14:27 ` Mel Gorman
2010-07-21 23:57 ` KAMEZAWA Hiroyuki
2010-07-22 9:19 ` Mel Gorman
2010-07-22 9:22 ` KAMEZAWA Hiroyuki
2010-07-21 13:04 ` Johannes Weiner
2010-07-21 13:38 ` Mel Gorman
2010-07-21 14:28 ` Johannes Weiner
2010-07-21 14:31 ` Mel Gorman
2010-07-21 14:39 ` Johannes Weiner
2010-07-21 15:06 ` Mel Gorman
2010-07-26 8:29 ` Wu Fengguang
2010-07-26 9:12 ` Mel Gorman
2010-07-26 11:19 ` Wu Fengguang
2010-07-26 12:53 ` Mel Gorman
2010-07-26 13:03 ` Wu Fengguang
2010-07-19 13:11 ` [PATCH 5/8] fs,btrfs: Allow kswapd to writeback pages Mel Gorman
2010-07-19 18:27 ` Rik van Riel
2010-07-19 13:11 ` [PATCH 6/8] fs,xfs: " Mel Gorman
2010-07-19 14:20 ` Christoph Hellwig
2010-07-19 14:43 ` Mel Gorman
2010-07-19 13:11 ` Mel Gorman [this message]
2010-07-19 14:21 ` [PATCH 7/8] writeback: sync old inodes first in background writeback Christoph Hellwig
2010-07-19 14:40 ` Mel Gorman
2010-07-19 14:48 ` Christoph Hellwig
2010-07-22 8:52 ` Wu Fengguang
2010-07-22 9:02 ` Wu Fengguang
2010-07-22 9:21 ` Wu Fengguang
2010-07-22 10:48 ` Mel Gorman
2010-07-23 9:45 ` Wu Fengguang
2010-07-23 10:57 ` Mel Gorman
2010-07-23 11:49 ` Wu Fengguang
2010-07-23 12:20 ` Wu Fengguang
2010-07-25 10:43 ` KOSAKI Motohiro
2010-07-25 12:03 ` Minchan Kim
2010-07-26 3:27 ` Wu Fengguang
2010-07-26 4:11 ` Minchan Kim
2010-07-26 4:37 ` Wu Fengguang
2010-07-26 16:30 ` Minchan Kim
2010-07-26 22:48 ` Wu Fengguang
2010-07-26 3:08 ` Wu Fengguang
2010-07-26 3:11 ` Rik van Riel
2010-07-26 3:17 ` Wu Fengguang
2010-07-22 15:34 ` Minchan Kim
2010-07-23 11:59 ` Wu Fengguang
2010-07-22 9:42 ` Mel Gorman
2010-07-23 8:33 ` Wu Fengguang
2010-07-22 1:13 ` Wu Fengguang
2010-07-19 18:43 ` Rik van Riel
2010-07-19 13:11 ` [PATCH 8/8] vmscan: Kick flusher threads to clean pages when reclaim is encountering dirty pages Mel Gorman
2010-07-19 14:23 ` Christoph Hellwig
2010-07-19 14:37 ` Mel Gorman
2010-07-19 22:48 ` Johannes Weiner
2010-07-20 14:10 ` Mel Gorman
2010-07-20 22:05 ` Johannes Weiner
2010-07-19 18:59 ` Rik van Riel
2010-07-19 22:26 ` Johannes Weiner
2010-07-26 7:28 ` Wu Fengguang
2010-07-26 9:26 ` Mel Gorman
2010-07-26 11:27 ` Wu Fengguang
2010-07-26 12:57 ` Mel Gorman
2010-07-26 13:10 ` Wu Fengguang
2010-07-27 13:35 ` Mel Gorman
2010-07-27 14:24 ` Wu Fengguang
2010-07-27 14:34 ` Wu Fengguang
2010-07-27 14:40 ` Mel Gorman
2010-07-27 14:55 ` Wu Fengguang
2010-07-27 14:38 ` Mel Gorman
2010-07-27 15:21 ` Wu Fengguang
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=1279545090-19169-8-git-send-email-mel@csn.ul.ie \
--to=mel@csn.ul.ie \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=chris.mason@oracle.com \
--cc=david@fromorbit.com \
--cc=fengguang.wu@intel.com \
--cc=hannes@cmpxchg.org \
--cc=hch@infradead.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
--cc=riel@redhat.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).