public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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.

  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