From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Andrew Morton <akpm@osdl.org>
Cc: Kenny Simpson <theonetruekenny@yahoo.com>, linux-kernel@vger.kernel.org
Subject: Re: mmap over nfs leads to excessive system load
Date: Wed, 16 Nov 2005 09:03:31 -0500 [thread overview]
Message-ID: <1132149812.8812.16.camel@lade.trondhjem.org> (raw)
In-Reply-To: <20051115234542.45a7aa66.akpm@osdl.org>
On Tue, 2005-11-15 at 23:45 -0800, Andrew Morton wrote:
> So filemap_write_and_wait() has to write 2MB's worth of pages. Problem is,
> _all_ the pages, even the 99% which are clean are tagged as dirty in the
> pagecache radix tree. So find_get_pages_tag() ends up visiting each page
> in the file, and blows much CPU doing so.
>
> The writeout happens in mpage_writepages(), which uses
> clear_page_dirty_for_io() to clear PG_dirty. But it doesn't clear the
> dirty tag in the radix tree. It relies upon the filesystem to do the right
> thing later on. Which is all very unpleasant, sorry. See the explanatory
> comment over clear_page_dirty_for_io().
> nfs_writepage() doesn't do any of the things which that comment says it
> should, hence the radix tree tags are getting out of sync, hence this
> problem.
>
> NFS does strange, incomprehensible-to-little-akpms things in its writeout
> path. Ideally, it should run set_page_writeback() prior to unlocking the
> page and end_page_writeback() when I/O completes. That'll keep the VM
> happier while fixing this performance glitch.
Actually that will screw over performance even further by forcing us to
send out loads of little RPC requests to write 4k pages instead of
allowing us to gather those writes into 32k (or larger) chunks.
Anyhow, does the following patch help?
Cheers,
Trond
------
NFS: resync to yet more writepage() changes...
Ensure that we call clear_page_dirty() for pages that have been written
via writepage().
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
fs/nfs/write.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 8f71e76..ea77da5 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -213,6 +213,7 @@ static int nfs_writepage_sync(struct nfs
} while (count);
/* Update file length */
nfs_grow_file(page, offset, written);
+ clear_page_dirty(page);
/* Set the PG_uptodate flag? */
nfs_mark_uptodate(page, offset, written);
@@ -238,6 +239,7 @@ static int nfs_writepage_async(struct nf
goto out;
/* Update file length */
nfs_grow_file(page, offset, count);
+ clear_page_dirty(page);
/* Set the PG_uptodate flag? */
nfs_mark_uptodate(page, offset, count);
nfs_unlock_request(req);
next prev parent reply other threads:[~2005-11-16 14:03 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20051115224645.27832.qmail@web34103.mail.mud.yahoo.com>
2005-11-15 23:47 ` Kenny Simpson
2005-11-16 4:31 ` William Lee Irwin III
2005-11-16 6:05 ` Kenny Simpson
2005-11-16 7:45 ` Andrew Morton
2005-11-16 14:03 ` Trond Myklebust [this message]
2005-11-16 15:01 ` Kenny Simpson
2005-11-16 17:44 ` Trond Myklebust
2005-11-16 18:00 ` Andrew Morton
2005-11-16 18:34 ` Trond Myklebust
2005-11-16 18:38 ` Christoph Hellwig
2005-11-17 13:08 ` Nikita Danilov
2005-11-16 19:09 ` Andrew Morton
2005-11-16 20:05 ` Trond Myklebust
2005-11-16 20:56 ` Kenny Simpson
2005-11-16 21:02 ` Kenny Simpson
2005-11-16 21:09 ` Trond Myklebust
2005-11-16 21:17 ` Kenny Simpson
2005-11-16 21:41 ` Kenny Simpson
2005-11-16 21:57 ` Trond Myklebust
2005-11-16 22:04 ` Kenny Simpson
2005-11-16 22:39 ` Kenny Simpson
2005-11-16 23:06 ` Trond Myklebust
2005-11-17 15:40 ` Chuck Lever
2005-11-17 16:56 ` Kenny Simpson
2005-11-17 16:01 ` Kenny Simpson
2005-11-17 21:04 ` Andrew Morton
2005-11-17 21:15 ` Kenny Simpson
2005-11-18 16:55 ` Kenny Simpson
2005-11-18 17:26 ` Kenny Simpson
2005-11-18 21:57 ` Kenny Simpson
2005-11-21 17:13 ` infinite loop? with mmap, nfs, pwrite, O_DIRECT Kenny Simpson
2005-11-21 17:49 ` Chuck Lever
2005-11-21 18:40 ` Kenny Simpson
2005-11-21 20:39 ` Andrew Morton
2005-11-21 21:39 ` Kenny Simpson
2005-11-21 22:42 ` Trond Myklebust
2005-11-21 23:14 ` Kenny Simpson
2005-11-21 23:34 ` Andrew Morton
2005-11-21 23:58 ` Trond Myklebust
2005-11-22 0:09 ` Andrew Morton
2005-11-22 0:18 ` Trond Myklebust
2005-11-22 0:25 ` Trond Myklebust
2005-11-22 0:28 ` Andrew Morton
2005-11-22 0:49 ` Trond Myklebust
2005-11-30 20:04 ` nfs unhappiness with memory pressure Kenny Simpson
2005-11-30 21:42 ` Keith Mannthey
2005-11-30 22:18 ` Kenny Simpson
2005-12-01 14:49 ` Kenny Simpson
2005-12-05 18:01 ` Kenny Simpson
2005-12-05 19:44 ` Kenny Simpson
2005-12-05 20:14 ` Kenny Simpson
2005-12-05 20:13 ` Trond Myklebust
2005-12-05 20:33 ` Trond Myklebust
2005-12-05 20:52 ` Nick Piggin
2005-12-05 21:18 ` Trond Myklebust
2005-12-05 21:23 ` Trond Myklebust
2005-12-05 23:40 ` Nick Piggin
2005-12-06 0:48 ` Trond Myklebust
2005-12-05 21:51 ` Kenny Simpson
2005-12-05 21:04 ` Kenny Simpson
2005-12-05 22:39 ` Trond Myklebust
2005-12-06 3:36 ` Andrew Morton
2005-12-06 3:36 ` Andrew Morton
2005-12-06 4:40 ` Trond Myklebust
2005-12-06 5:42 ` Nick Piggin
2005-12-06 12:18 ` Trond Myklebust
2005-12-06 19:31 ` Kenny Simpson
2005-12-06 15:51 ` Kenny Simpson
2005-11-21 21:54 ` infinite loop? with mmap, nfs, pwrite, O_DIRECT Kenny Simpson
2005-11-21 20:12 ` Kenny Simpson
2005-11-17 17:02 ` mmap over nfs leads to excessive system load Chuck Lever
2005-11-17 17:07 ` Trond Myklebust
2005-11-18 19:59 ` Kenny Simpson
2005-11-16 21:31 ` Andrew Morton
2005-11-16 21:49 ` Trond Myklebust
2005-11-16 22:10 ` Andrew Morton
2005-11-16 22:23 ` Trond Myklebust
2005-11-16 22:38 ` Trond Myklebust
2005-11-16 22:50 ` Andrew Morton
2005-11-16 22:44 ` Andrew Morton
2005-11-16 23:10 ` Trond Myklebust
2005-11-17 0:06 ` Trond Myklebust
2005-11-17 0:25 ` Andrew Morton
2005-11-17 0:28 ` Trond Myklebust
2005-11-17 0:38 ` Andrew Morton
2005-11-17 0:47 ` Trond Myklebust
2005-11-16 18:48 ` Kenny Simpson
2005-11-16 19:06 ` Kenny Simpson
2005-11-08 19:25 Kenny Simpson
2005-11-08 20:01 ` Trond Myklebust
2005-11-08 20:18 ` Kenny Simpson
2005-11-08 20:57 ` Kenny Simpson
-- strict thread matches above, loose matches on Subject: below --
2005-11-08 18:47 Kenny Simpson
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=1132149812.8812.16.camel@lade.trondhjem.org \
--to=trond.myklebust@fys.uio.no \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=theonetruekenny@yahoo.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
all inboxes | Powered by JetHome®