From: Wu Fengguang <fengguang.wu@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
Jan Kara <jack@suse.cz>, Peter Zijlstra <a.p.zijlstra@chello.nl>,
Christoph Hellwig <hch@lst.de>,
LKML <linux-kernel@vger.kernel.org>,
Chris Mason <chris.mason@oracle.com>
Subject: Re: [PATCH 4/5] writeback: fix dirtied pages accounting on redirty
Date: Tue, 22 Nov 2011 21:59:19 +0800 [thread overview]
Message-ID: <20111122135919.GB10545@localhost> (raw)
In-Reply-To: <20111121135146.0fc7e3a7.akpm@linux-foundation.org>
On Tue, Nov 22, 2011 at 05:51:46AM +0800, Andrew Morton wrote:
> On Mon, 21 Nov 2011 21:03:46 +0800
> Wu Fengguang <fengguang.wu@intel.com> wrote:
>
> > De-account the accumulative dirty counters on page redirty.
> >
> > Page redirties (very common in ext4) will introduce mismatch between
> > counters (a) and (b)
> >
> > a) NR_DIRTIED, BDI_DIRTIED, tsk->nr_dirtied
> > b) NR_WRITTEN, BDI_WRITTEN
> >
> > This will introduce systematic errors in balanced_rate and result in
> > dirty page position errors (ie. the dirty pages are no longer balanced
> > around the global/bdi setpoints).
> >
> > ...
> >
> > --- linux-next.orig/mm/page-writeback.c 2011-11-17 20:57:15.000000000 +0800
> > +++ linux-next/mm/page-writeback.c 2011-11-17 20:57:16.000000000 +0800
> > @@ -1792,6 +1792,17 @@ int __set_page_dirty_nobuffers(struct pa
> > }
> > EXPORT_SYMBOL(__set_page_dirty_nobuffers);
> >
> > +void account_page_redirty(struct page *page)
> > +{
> > + struct address_space *mapping = page->mapping;
> > + if (mapping && mapping_cap_account_dirty(mapping)) {
> > + current->nr_dirtied--;
> > + dec_zone_page_state(page, NR_DIRTIED);
> > + dec_bdi_stat(mapping->backing_dev_info, BDI_DIRTIED);
> > + }
> > +}
>
> Again, writeback doesn't seem to be the best place to be adding
> undocumented code.
Sorry, hope this comment can explain when to call the function and why.
/*
* Call this whenever redirtying a page, to de-account the dirty counters
* (NR_DIRTIED, BDI_DIRTIED, tsk->nr_dirtied), so that they match the written
* counters (NR_WRITTEN, BDI_WRITTEN) in long term. The mismatches will lead to
* systematic errors in balanced_dirty_ratelimit and the dirty pages position
* control.
*/
> > +EXPORT_SYMBOL(account_page_redirty);
>
> The export is unneeded?
btrfs will need to call into it. Here is the patch. I'll include it
in the v2 series.
Thanks,
Fengguang
---
Subject: btrfs: fix dirtied pages accounting on sub-page writes
Date: Mon Aug 08 15:19:47 CST 2011
When doing 1KB sequential writes to the same page,
balance_dirty_pages_ratelimited_nr() should be called once instead of 4
times, the latter makes the dirtier tasks be throttled much too heavy.
Fix it with proper de-accounting on clear_page_dirty_for_io().
CC: Chris Mason <chris.mason@oracle.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
fs/btrfs/file.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- linux-next.orig/fs/btrfs/file.c 2011-11-17 20:13:47.000000000 +0800
+++ linux-next/fs/btrfs/file.c 2011-11-17 20:18:51.000000000 +0800
@@ -1136,7 +1136,8 @@ again:
GFP_NOFS);
}
for (i = 0; i < num_pages; i++) {
- clear_page_dirty_for_io(pages[i]);
+ if (clear_page_dirty_for_io(pages[i]))
+ account_page_redirty(pages[i]);
set_page_extent_mapped(pages[i]);
WARN_ON(!PageLocked(pages[i]));
}
next prev parent reply other threads:[~2011-11-22 13:59 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-21 13:03 [PATCH 0/5] dirty throttling bits for 3.3 Wu Fengguang
2011-11-21 13:03 ` [PATCH 1/5] writeback: balanced_rate cannot exceed write bandwidth Wu Fengguang
2011-11-21 22:50 ` Jan Kara
2011-11-22 6:41 ` Wu Fengguang
2011-11-22 21:04 ` Jan Kara
2011-11-23 13:17 ` Wu Fengguang
2011-11-21 13:03 ` [PATCH 2/5] writeback: charge leaked page dirties to active tasks Wu Fengguang
2011-11-21 21:49 ` Andrew Morton
2011-11-21 23:46 ` Jan Kara
2011-11-22 13:35 ` Wu Fengguang
2011-11-21 13:03 ` [PATCH 3/5] writeback: fix dirtied pages accounting on sub-page writes Wu Fengguang
2011-11-22 0:11 ` Jan Kara
2011-11-22 9:21 ` Wu Fengguang
2011-11-22 12:21 ` Jan Kara
2011-11-22 12:30 ` Wu Fengguang
2011-11-22 12:48 ` Jan Kara
2011-11-22 13:02 ` Wu Fengguang
2011-11-22 12:57 ` Peter Zijlstra
2011-11-22 13:07 ` Wu Fengguang
2011-11-22 13:41 ` Wu Fengguang
2011-11-22 13:53 ` Peter Zijlstra
2011-11-22 14:11 ` Wu Fengguang
2011-11-28 13:51 ` Wu Fengguang
2011-11-21 13:03 ` [PATCH 4/5] writeback: fix dirtied pages accounting on redirty Wu Fengguang
2011-11-21 21:51 ` Andrew Morton
2011-11-22 13:59 ` Wu Fengguang [this message]
2011-11-21 13:03 ` [PATCH 5/5] writeback: dirty ratelimit - think time compensation Wu Fengguang
2011-11-23 12:44 ` [PATCH 0/5] dirty throttling bits for 3.3 Peter Zijlstra
2011-11-28 13:56 ` 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=20111122135919.GB10545@localhost \
--to=fengguang.wu@intel.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=chris.mason@oracle.com \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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.