From: Andrew Morton <akpm@osdl.org>
To: Kenny Simpson <theonetruekenny@yahoo.com>
Cc: linux-kernel@vger.kernel.org,
Trond Myklebust <trond.myklebust@fys.uio.no>
Subject: Re: mmap over nfs leads to excessive system load
Date: Tue, 15 Nov 2005 23:45:42 -0800 [thread overview]
Message-ID: <20051115234542.45a7aa66.akpm@osdl.org> (raw)
In-Reply-To: <20051115234731.9539.qmail@web34105.mail.mud.yahoo.com>
Kenny Simpson <theonetruekenny@yahoo.com> wrote:
>
> I ran the same test again against 2.6.15-rc, and got pretty much the same thing. It starts nice
> and fast (30+MB/s, but drops down to under 10MB/s with the system time pegging one CPU).
>
> Here is the oprofile result:
>
> CPU: P4 / Xeon with 2 hyper-threads, speed 2658.47 MHz (estimated)
> Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask
> of 0x01 (mandatory) count 100000
> samples % symbol name
> 412585 14.6687 find_get_pages_tag
> 343898 12.2267 mpage_writepages
> 290144 10.3155 release_pages
> 288631 10.2617 unlock_page
> 286181 10.1746 pci_conf1_write
> 267619 9.5147 clear_page_dirty_for_io
> 128128 4.5554 __lookup_tag
> 120895 4.2982 page_waitqueue
> 52739 1.8750 _spin_lock_irqsave
> 43623 1.5509 skb_copy_bits
> 30157 1.0722 __wake_up_bit
> 29973 1.0656 _read_lock_irqsave
>
Your application walks the file in 2MB hunks, doing ftruncate() each time
to expand the file by another 2MB.
nfs_setattr() implements the truncate. It syncs the whole file, using
filemap_write_and_wait() (that seems a bit suboptimal. All we're doing is
increasing i_size??)
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.
next prev parent reply other threads:[~2005-11-16 7:46 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 ` mmap over nfs leads to excessive system load 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 [this message]
2005-11-16 14:03 ` Trond Myklebust
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=20051115234542.45a7aa66.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=theonetruekenny@yahoo.com \
--cc=trond.myklebust@fys.uio.no \
/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