From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Joerg Platte <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: Sun, 13 Jan 2008 14:44:34 +0800 [thread overview]
Message-ID: <400206690.16519@ustc.edu.cn> (raw)
Message-ID: <E1JDwaA-00017Q-W6@localhost.localdomain> (raw)
In-Reply-To: <200801130032.32495.jplatte@naasa.net>
[-- Attachment #1: Type: text/plain, Size: 2118 bytes --]
On Sun, Jan 13, 2008 at 12:32:30AM +0100, Joerg Platte wrote:
> Am Freitag, 11. Januar 2008 schrieb Fengguang Wu:
> > On Thu, Jan 10, 2008 at 11:03:05AM +0100, Joerg Platte wrote:
> > > Am Donnerstag, 10. Januar 2008 schrieb Fengguang Wu:
> > > > > problem, because the iowait problem disappeared today after the
> > > > > regular Debian update. I'll try to install the old package versions
> > > > > to make it show up again. Maybe that helps to debug it.
> > > >
> > > > Thank you. I'm running sid, ext2 as rootfs now ;-)
> > >
> > > The error is back and I'm getting thousands of messages like this with
> > > the patched kernel:
> > >
> > > mm/page-writeback.c 668 wb_kupdate: pdflush(146) 21115 global 3936 0 0 wc
> > > _M > tw 1024 sk 0 requeue_io 301: inode 81441 size 0 at 08:07(sda7)
> > > mm/page-writeback.c 668 wb_kupdate: pdflush(147) 17451 global 3936 0 0 wc
> > > _M > tw 1024 sk 2 requeue_io 301: inode 81441 size 0 at 08:07(sda7)
> > > mm/page-writeback.c 668 wb_kupdate: pdflush(147) 17451 global 3936 0 0 wc
> > > _M > tw 1024 sk 2 requeue_io 301: inode 81441 size 0 at 08:07(sda7)
> >
> > Joerg, what's the output of `dumpe2fs /dev/sda7` and `lsof|grep /tmp`?
>
> After another reboot I tried to get more information about the konqueror
> process possibly causing the iowait load by using strace -p. Here is the
> output:
>
> gettimeofday({1200180588, 878508}, NULL) = 0
> setitimer(ITIMER_VIRTUAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
> rt_sigaction(SIGVTALRM, {SIG_DFL}, {0xb5cffed0, [VTALRM], SA_RESTART}, 8) = 0
> gettimeofday({1200180588, 879942}, NULL) = 0
> time(NULL) = 1200180588
> gettimeofday({1200180588, 880838}, NULL) = 0
> gettimeofday({1200180588, 881284}, NULL) = 0
No idea yet :-/ I'm afraid I have to trouble you again - the bug just
refused to appear in my system. I prepared a kernel module for you to
gather more information:
make && insmod ext2-writeback-debug.ko && sleep 1s && rmmod ext2-writeback-debug
dmesg > ext2-writeback-debug.dmesg
Please do it when 100% iowait appears, and send the dmesg file.
Thank you,
Fengguang
[-- Attachment #2: Makefile --]
[-- Type: text/plain, Size: 187 bytes --]
obj-m := ext2-writeback-debug.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -f *.mod.c *.ko *.o
[-- Attachment #3: ext2-writeback-debug.c --]
[-- Type: text/x-csrc, Size: 3607 bytes --]
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/writeback.h>
#include <linux/kprobes.h>
#include <linux/pagevec.h>
void print_page(struct page *page)
{
printk(KERN_DEBUG "%lu\t%u\t%u\t%c%c%c%c%c\n",
page->index,
page_count(page),
page_mapcount(page),
PageUptodate(page) ? 'U' : '_',
PageDirty(page) ? 'D' : '_',
PageWriteback(page) ? 'W' : '_',
PagePrivate(page) ? 'P' : '_',
PageLocked(page) ? 'L' : '_');
}
void print_writeback_control(struct writeback_control *wbc)
{
printk(KERN_DEBUG
"global dirty %lu writeback %lu nfs %lu\n"
"wbc flags %c%c towrite %ld skipped %ld\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);
}
void print_inode_pages(struct inode *inode)
{
struct address_space *mapping = inode->i_mapping;
struct pagevec pvec;
int nr_pages;
int i;
pgoff_t index = 0;
struct dentry *dentry;
int dcount;
char *dname;
nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
PAGECACHE_TAG_DIRTY,
(pgoff_t)PAGEVEC_SIZE);
if (list_empty(&inode->i_dentry)) {
dname = "";
dcount = 0;
} else {
dentry = list_entry(inode->i_dentry.next,
struct dentry, d_alias);
dname = dentry->d_iname;
dcount = atomic_read(&dentry->d_count);
}
printk(KERN_DEBUG "inode %lu(%s/%s) count %d,%d size %llu pages %lu\n",
inode->i_ino,
inode->i_sb->s_id,
dname,
atomic_read(&inode->i_count),
dcount,
i_size_read(inode),
mapping->nrpages
);
for (i = 0; i < nr_pages; i++)
print_page(pvec.pages[i]);
}
int handler_pre(struct kprobe *p, struct pt_regs *regs)
{
static int count = 0;
if (count++ < 10)
dump_stack();
return 0;
}
void handler_post(struct kprobe *p, struct pt_regs *regs, unsigned long flags)
{
}
static struct kprobe my_kprobe = {
.pre_handler = handler_pre,
.post_handler = handler_post,
.symbol_name = "submit_bio"
};
static int jdo_ext2_writepage(struct page *page, struct writeback_control *wbc)
{
struct inode * const inode = page->mapping->host;
if (!i_size_read(inode)) {
printk(KERN_DEBUG "ext2_writepage:\n");
print_page(page);
print_writeback_control(wbc);
}
jprobe_return();
return 0;
}
static struct jprobe jprobe_ext2_writepage = {
.entry = jdo_ext2_writepage,
.kp.symbol_name = "ext2_writepage"
};
static void jdo_requeue_io(struct inode *inode)
{
if (!i_size_read(inode)) {
printk(KERN_DEBUG "requeue_io:\n");
print_inode_pages(inode);
}
jprobe_return();
}
static struct jprobe jprobe_requeue_io = {
.entry = jdo_requeue_io,
.kp.symbol_name = "requeue_io"
};
static int setup_kprobe(struct kprobe *kprobe)
{
int ret = register_kprobe(kprobe);
printk("register_kprobe(%s) = %d\n", kprobe->symbol_name, ret);
return ret;
}
static int setup_jprobe(struct jprobe *jprobe)
{
int ret = register_jprobe(jprobe);
printk("register_jprobe(%s) = %d\n", jprobe->kp.symbol_name, ret);
return ret;
}
static int __init jprobe_init(void)
{
int ret;
ret = setup_jprobe(&jprobe_ext2_writepage);
if (ret)
return -1;
ret = setup_jprobe(&jprobe_requeue_io);
if (ret)
return -1;
ret = setup_kprobe(&my_kprobe);
if (ret)
return -1;
return 0;
}
static void __exit jprobe_exit(void)
{
unregister_kprobe(&my_kprobe);
unregister_jprobe(&jprobe_requeue_io);
unregister_jprobe(&jprobe_ext2_writepage);
}
module_init(jprobe_init)
module_exit(jprobe_exit)
MODULE_LICENSE("GPL");
next prev parent reply other threads:[~2008-01-13 6:44 UTC|newest]
Thread overview: 60+ 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
2008-01-09 3:27 ` Fengguang Wu
2008-01-09 3:27 ` Fengguang Wu
2008-01-09 6:13 ` Joerg Platte
2008-01-09 12:04 ` Fengguang Wu
2008-01-09 12:04 ` Fengguang Wu
2008-01-09 12:22 ` Joerg Platte
2008-01-09 12:57 ` Fengguang Wu
2008-01-09 12:57 ` Fengguang Wu
2008-01-09 13:04 ` Joerg Platte
2008-01-10 6:58 ` Fengguang Wu
2008-01-10 6:58 ` Fengguang Wu
2008-01-10 7:30 ` Fengguang Wu
2008-01-10 7:30 ` Fengguang Wu
[not found] ` <20080110073046.GA3432@mail.ustc.edu.cn>
2008-01-10 7:53 ` Fengguang Wu
2008-01-10 7:53 ` Fengguang Wu
2008-01-10 8:37 ` Joerg Platte
2008-01-10 8:43 ` Fengguang Wu
2008-01-10 8:43 ` Fengguang Wu
2008-01-10 10:03 ` Joerg Platte
2008-01-11 4:43 ` Fengguang Wu
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
2008-01-13 6:44 ` Fengguang Wu [this message]
2008-01-13 6:44 ` Fengguang Wu
2008-01-13 8:05 ` Joerg Platte
2008-01-13 8:21 ` Fengguang Wu
2008-01-13 8:21 ` Fengguang Wu
2008-01-13 9:49 ` Joerg Platte
2008-01-13 11:59 ` Fengguang Wu
2008-01-13 11:59 ` Fengguang Wu
[not found] ` <20080113115933.GA11045@mail.ustc.edu.cn>
2008-01-14 3:54 ` Fengguang Wu
2008-01-14 3:54 ` Fengguang Wu
[not found] ` <20080114035439.GA7330@mail.ustc.edu.cn>
2008-01-14 9:55 ` Fengguang Wu
2008-01-14 9:55 ` Fengguang Wu
2008-01-14 11:30 ` Joerg Platte
2008-01-14 11:30 ` Joerg Platte
2008-01-14 11:41 ` Peter Zijlstra
2008-01-14 12:50 ` Fengguang Wu
2008-01-14 12:50 ` Fengguang Wu
2008-01-15 21:13 ` Mike Snitzer
2008-01-16 5:25 ` Fengguang Wu
2008-01-16 5:25 ` Fengguang Wu
2008-01-15 21:42 ` Ingo Molnar
2008-01-16 5:14 ` Fengguang Wu
2008-01-16 5:14 ` Fengguang Wu
-- strict thread matches above, loose matches on Subject: below --
2008-01-16 9:26 Martin Knoblauch
2008-01-16 12:00 ` Fengguang Wu
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=400206690.16519@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 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.