From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: jplatte@naasa.net
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org
Subject: Re: regression: 100% io-wait with 2.6.24-rcX
Date: Thu, 10 Jan 2008 15:30:46 +0800 [thread overview]
Message-ID: <399950262.02729@ustc.edu.cn> (raw)
Message-ID: <E1JCrsE-0000v4-Dz@localhost.localdomain> (raw)
In-Reply-To: <200801091404.30330.lists@naasa.net>
[-- Attachment #1: Type: text/plain, Size: 105 bytes --]
Joerg,
Can you try the attached patches? Thank you.
I cannot reliably reproduce the bug yet.
Fengguang
[-- Attachment #2: writeback-ext2-fix.patch --]
[-- Type: text/plain, Size: 437 bytes --]
mm/filemap_xip.c | 1 +
1 files changed, 1 insertion(+)
Index: linux/mm/filemap_xip.c
===================================================================
--- linux.orig/mm/filemap_xip.c
+++ linux/mm/filemap_xip.c
@@ -431,6 +431,7 @@ xip_truncate_page(struct address_space *
return PTR_ERR(page);
}
zero_user_page(page, offset, length, KM_USER0);
+ set_page_dirty(page);
return 0;
}
EXPORT_SYMBOL_GPL(xip_truncate_page);
[-- Attachment #3: writeback-debug.patch --]
[-- Type: text/plain, Size: 2677 bytes --]
---
mm/page-writeback.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
--- linux-2.6.24-git17.orig/mm/page-writeback.c
+++ linux-2.6.24-git17/mm/page-writeback.c
@@ -98,6 +98,26 @@ EXPORT_SYMBOL(laptop_mode);
/* End of sysctl-exported parameters */
+#define writeback_debug_report(n, wbc) do { \
+ __writeback_debug_report(n, wbc, __FILE__, __LINE__, __FUNCTION__); \
+} while (0)
+
+void __writeback_debug_report(long n, struct writeback_control *wbc,
+ const char *file, int line, const char *func)
+{
+ printk(KERN_DEBUG "%s %d %s: %s(%d) %ld "
+ "global %lu %lu %lu "
+ "wc %c%c tw %ld sk %ld\n",
+ file, line, func,
+ current->comm, current->pid, n,
+ global_page_state(NR_FILE_DIRTY),
+ global_page_state(NR_WRITEBACK),
+ global_page_state(NR_UNSTABLE_NFS),
+ wbc->encountered_congestion ? 'C':'_',
+ wbc->more_io ? 'M':'_',
+ wbc->nr_to_write,
+ wbc->pages_skipped);
+}
static void background_writeout(unsigned long _min_pages);
@@ -395,6 +415,7 @@ static void balance_dirty_pages(struct a
pages_written += write_chunk - wbc.nr_to_write;
get_dirty_limits(&background_thresh, &dirty_thresh,
&bdi_thresh, bdi);
+ writeback_debug_report(pages_written, &wbc);
}
/*
@@ -421,6 +442,7 @@ static void balance_dirty_pages(struct a
break; /* We've done our duty */
congestion_wait(WRITE, HZ/10);
+ writeback_debug_report(-pages_written, &wbc);
}
if (bdi_nr_reclaimable + bdi_nr_writeback < bdi_thresh &&
@@ -515,6 +537,11 @@ void throttle_vm_writeout(gfp_t gfp_mask
global_page_state(NR_WRITEBACK) <= dirty_thresh)
break;
congestion_wait(WRITE, HZ/10);
+ printk(KERN_DEBUG "throttle_vm_writeout: "
+ "congestion_wait on %lu+%lu > %lu\n",
+ global_page_state(NR_UNSTABLE_NFS),
+ global_page_state(NR_WRITEBACK),
+ dirty_thresh);
/*
* The caller might hold locks which can prevent IO completion
@@ -557,6 +584,7 @@ static void background_writeout(unsigned
wbc.pages_skipped = 0;
writeback_inodes(&wbc);
min_pages -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
+ writeback_debug_report(min_pages, &wbc);
if (wbc.nr_to_write > 0 || wbc.pages_skipped > 0) {
/* Wrote less than expected */
if (wbc.encountered_congestion || wbc.more_io)
@@ -630,6 +658,7 @@ static void wb_kupdate(unsigned long arg
wbc.encountered_congestion = 0;
wbc.nr_to_write = MAX_WRITEBACK_PAGES;
writeback_inodes(&wbc);
+ writeback_debug_report(nr_to_write, &wbc);
if (wbc.nr_to_write > 0) {
if (wbc.encountered_congestion || wbc.more_io)
congestion_wait(WRITE, HZ/10);
[-- Attachment #4: requeue_io-debug.patch --]
[-- Type: text/plain, Size: 1140 bytes --]
Subject: track redirty_tail() calls
It helps a lot to know how redirty_tail() are called.
Cc: Ken Chen <kenchen@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---
fs/fs-writeback.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
--- linux-2.6.24-git17.orig/fs/fs-writeback.c
+++ linux-2.6.24-git17/fs/fs-writeback.c
@@ -164,12 +164,26 @@ static void redirty_tail(struct inode *i
list_move(&inode->i_list, &sb->s_dirty);
}
+#define requeue_io(inode) \
+ do { \
+ __requeue_io(inode, __LINE__); \
+ } while (0)
+
/*
* requeue inode for re-scanning after sb->s_io list is exhausted.
*/
-static void requeue_io(struct inode *inode)
+static void __requeue_io(struct inode *inode, int line)
{
list_move(&inode->i_list, &inode->i_sb->s_more_io);
+
+ printk(KERN_DEBUG "requeue_io %d: inode %lu size %llu at %02x:%02x(%s)\n",
+ line,
+ inode->i_ino,
+ i_size_read(inode),
+ MAJOR(inode->i_sb->s_dev),
+ MINOR(inode->i_sb->s_dev),
+ inode->i_sb->s_id
+ );
}
static void inode_sync_complete(struct inode *inode)
next prev parent reply other threads:[~2008-01-10 7:31 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-07 10:51 regression: 100% io-wait with 2.6.24-rcX Joerg Platte
2008-01-07 11:19 ` Ingo Molnar
2008-01-07 13:24 ` Joerg Platte
2008-01-07 13:32 ` Peter Zijlstra
2008-01-07 13:40 ` Joerg Platte
[not found] ` <E1JCRbA-0002bh-3c@localhost.localdomain>
2008-01-09 3:27 ` Fengguang Wu
2008-01-09 6:13 ` Joerg Platte
[not found] ` <E1JCZg2-0001DE-RP@localhost.localdomain>
2008-01-09 12:04 ` Fengguang Wu
2008-01-09 12:22 ` Joerg Platte
[not found] ` <E1JCaUd-0001Ko-Tt@localhost.localdomain>
2008-01-09 12:57 ` Fengguang Wu
2008-01-09 13:04 ` Joerg Platte
[not found] ` <E1JCrMj-0001HR-SZ@localhost.localdomain>
2008-01-10 6:58 ` Fengguang Wu
[not found] ` <E1JCrsE-0000v4-Dz@localhost.localdomain>
2008-01-10 7:30 ` Fengguang Wu [this message]
[not found] ` <20080110073046.GA3432@mail.ustc.edu.cn>
[not found] ` <E1JCsDr-0002cl-0e@localhost.localdomain>
2008-01-10 7:53 ` Fengguang Wu
2008-01-10 8:37 ` Joerg Platte
[not found] ` <E1JCt0n-00048n-AD@localhost.localdomain>
2008-01-10 8:43 ` Fengguang Wu
2008-01-10 10:03 ` Joerg Platte
[not found] ` <E1JDBk4-0000UF-03@localhost.localdomain>
2008-01-11 4:43 ` Fengguang Wu
2008-01-11 5:29 ` Joerg Platte
2008-01-11 6:41 ` Joerg Platte
2008-01-12 23:32 ` Joerg Platte
[not found] ` <E1JDwaA-00017Q-W6@localhost.localdomain>
2008-01-13 6:44 ` Fengguang Wu
2008-01-13 8:05 ` Joerg Platte
[not found] ` <E1JDy5a-0001al-Tk@localhost.localdomain>
2008-01-13 8:21 ` Fengguang Wu
2008-01-13 9:49 ` Joerg Platte
[not found] ` <E1JE1Uz-0002w5-6z@localhost.localdomain>
2008-01-13 11:59 ` Fengguang Wu
[not found] ` <20080113115933.GA11045@mail.ustc.edu.cn>
[not found] ` <E1JEGPH-0001uw-Df@localhost.localdomain>
2008-01-14 3:54 ` Fengguang Wu
[not found] ` <20080114035439.GA7330@mail.ustc.edu.cn>
[not found] ` <E1JEM2I-00010S-5U@localhost.localdomain>
2008-01-14 9:55 ` Fengguang Wu
2008-01-14 11:30 ` Joerg Platte
2008-01-14 11:41 ` Peter Zijlstra
[not found] ` <E1JEOmD-0001Ap-U7@localhost.localdomain>
2008-01-14 12:50 ` Fengguang Wu
2008-01-15 21:13 ` Mike Snitzer
[not found] ` <E1JF0m1-000101-OK@localhost.localdomain>
2008-01-16 5:25 ` Fengguang Wu
2008-01-15 21:42 ` Ingo Molnar
[not found] ` <E1JF0bJ-0000zU-FG@localhost.localdomain>
2008-01-16 5:14 ` Fengguang Wu
2008-01-16 9:26 Martin Knoblauch
[not found] ` <E1JF6w8-0000vs-HM@localhost.localdomain>
2008-01-16 12:00 ` Fengguang Wu
2008-01-16 14:15 Martin Knoblauch
2008-01-16 16:27 ` Mike Snitzer
2008-01-17 13:52 Martin Knoblauch
2008-01-17 16:11 ` Mike Snitzer
2008-01-17 17:44 Martin Knoblauch
2008-01-17 20:23 ` Mel Gorman
2008-01-17 17:51 Martin Knoblauch
2008-01-17 21:50 Martin Knoblauch
2008-01-17 22:12 ` Mel Gorman
2008-01-18 8:19 Martin Knoblauch
2008-01-18 16:01 ` Mel Gorman
2008-01-18 17:46 ` Linus Torvalds
2008-01-18 19:01 ` Martin Knoblauch
2008-01-18 19:23 ` Linus Torvalds
2008-01-22 14:39 ` Alasdair G Kergon
2008-01-18 20:00 ` Mike Snitzer
2008-01-18 22:47 ` Mike Snitzer
2008-01-19 10:24 Martin Knoblauch
2008-01-22 15:25 Martin Knoblauch
2008-01-22 23:40 ` Alasdair G Kergon
2008-01-22 18:51 Martin Knoblauch
2008-01-23 11:12 Martin Knoblauch
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=399950262.02729@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=jplatte@naasa.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
/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).