All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Arcangeli <aarcange@redhat.com>
To: Mel Gorman <mel@csn.ul.ie>
Cc: Christoph Hellwig <hch@infradead.org>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-mm@kvack.org, Dave Chinner <david@fromorbit.com>,
	Chris Mason <chris.mason@oracle.com>,
	Nick Piggin <npiggin@suse.de>, Rik van Riel <riel@redhat.com>
Subject: Re: [RFC PATCH 0/6] Do not call ->writepage[s] from direct reclaim and use a_ops->writepages() where possible
Date: Tue, 15 Jun 2010 18:37:47 +0200	[thread overview]
Message-ID: <20100615163747.GK28052@random.random> (raw)
In-Reply-To: <20100615163044.GR26788@csn.ul.ie>

On Tue, Jun 15, 2010 at 05:30:44PM +0100, Mel Gorman wrote:
> See this
> 
> STATIC int
> xfs_vm_writepage(
>         struct page             *page,
>         struct writeback_control *wbc)
> {
>         int                     error;
>         int                     need_trans;
>         int                     delalloc, unmapped, unwritten;
>         struct inode            *inode = page->mapping->host;
> 
>         trace_xfs_writepage(inode, page, 0);
> 
>         /*
>          * Refuse to write the page out if we are called from reclaim
>          * context.
>          *
>          * This is primarily to avoid stack overflows when called from deep
>          * used stacks in random callers for direct reclaim, but disabling
>          * reclaim for kswap is a nice side-effect as kswapd causes rather
>          * suboptimal I/O patters, too.
>          *
>          * This should really be done by the core VM, but until that happens
>          * filesystems like XFS, btrfs and ext4 have to take care of this
>          * by themselves.
>          */
>         if (current->flags & PF_MEMALLOC)
>                 goto out_fail;

so it's under xfs/linux-2.6... ;) I guess this dates back from the
xfs/irix xfs/freebsd days, no prob.

> Again, missing the code to do it and am missing data showing that not
> writing pages in direct reclaim is really a bad idea.

Your code is functionally fine, my point is it's not just writepage as
shown by the PF_MEMALLOC check in ext4.

> Other than the whole "lacking the code" thing and it's still not clear that
> writing from direct reclaim is absolutly necessary for VM stability considering
> it's been ignored today by at least two filesystems. I can add the throttling
> logic if it'd make you happied but I know it'd be at least two weeks
>  before I could start from scratch on a
> stack-switch-based-solution and a PITA considering that I'm not convinced
> it's necessary :)

The reason things are working on I think is because of
wait_on_page_writeback. By the time lots of ram is full with dirty
pdflush and stuff will submit I/O, then VM will still wait on I/O to
complete. Waiting is eating no stack, submitting I/O does instead. So
that explains why everything works fine.

It'd be interesting to verify that things don't fall apart with
current xfs if you swapon ./file_on_xfs instead of /dev/something.

WARNING: multiple messages have this Message-ID (diff)
From: Andrea Arcangeli <aarcange@redhat.com>
To: Mel Gorman <mel@csn.ul.ie>
Cc: Christoph Hellwig <hch@infradead.org>,
	linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-mm@kvack.org, Dave Chinner <david@fromorbit.com>,
	Chris Mason <chris.mason@oracle.com>,
	Nick Piggin <npiggin@suse.de>, Rik van Riel <riel@redhat.com>
Subject: Re: [RFC PATCH 0/6] Do not call ->writepage[s] from direct reclaim and use a_ops->writepages() where possible
Date: Tue, 15 Jun 2010 18:37:47 +0200	[thread overview]
Message-ID: <20100615163747.GK28052@random.random> (raw)
In-Reply-To: <20100615163044.GR26788@csn.ul.ie>

On Tue, Jun 15, 2010 at 05:30:44PM +0100, Mel Gorman wrote:
> See this
> 
> STATIC int
> xfs_vm_writepage(
>         struct page             *page,
>         struct writeback_control *wbc)
> {
>         int                     error;
>         int                     need_trans;
>         int                     delalloc, unmapped, unwritten;
>         struct inode            *inode = page->mapping->host;
> 
>         trace_xfs_writepage(inode, page, 0);
> 
>         /*
>          * Refuse to write the page out if we are called from reclaim
>          * context.
>          *
>          * This is primarily to avoid stack overflows when called from deep
>          * used stacks in random callers for direct reclaim, but disabling
>          * reclaim for kswap is a nice side-effect as kswapd causes rather
>          * suboptimal I/O patters, too.
>          *
>          * This should really be done by the core VM, but until that happens
>          * filesystems like XFS, btrfs and ext4 have to take care of this
>          * by themselves.
>          */
>         if (current->flags & PF_MEMALLOC)
>                 goto out_fail;

so it's under xfs/linux-2.6... ;) I guess this dates back from the
xfs/irix xfs/freebsd days, no prob.

> Again, missing the code to do it and am missing data showing that not
> writing pages in direct reclaim is really a bad idea.

Your code is functionally fine, my point is it's not just writepage as
shown by the PF_MEMALLOC check in ext4.

> Other than the whole "lacking the code" thing and it's still not clear that
> writing from direct reclaim is absolutly necessary for VM stability considering
> it's been ignored today by at least two filesystems. I can add the throttling
> logic if it'd make you happied but I know it'd be at least two weeks
>  before I could start from scratch on a
> stack-switch-based-solution and a PITA considering that I'm not convinced
> it's necessary :)

The reason things are working on I think is because of
wait_on_page_writeback. By the time lots of ram is full with dirty
pdflush and stuff will submit I/O, then VM will still wait on I/O to
complete. Waiting is eating no stack, submitting I/O does instead. So
that explains why everything works fine.

It'd be interesting to verify that things don't fall apart with
current xfs if you swapon ./file_on_xfs instead of /dev/something.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2010-06-15 17:38 UTC|newest]

Thread overview: 134+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-08  9:02 [RFC PATCH 0/6] Do not call ->writepage[s] from direct reclaim and use a_ops->writepages() where possible Mel Gorman
2010-06-08  9:02 ` Mel Gorman
2010-06-08  9:02 ` [PATCH 1/6] tracing, vmscan: Add trace events for kswapd wakeup, sleeping and direct reclaim Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-08  9:02 ` [PATCH 2/6] tracing, vmscan: Add trace events for LRU page isolation Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-08  9:02 ` [PATCH 3/6] tracing, vmscan: Add trace event when a page is written Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-08  9:02 ` [PATCH 4/6] tracing, vmscan: Add a postprocessing script for reclaim-related ftrace events Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-08  9:02 ` [PATCH 5/6] vmscan: Write out ranges of pages contiguous to the inode where possible Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-11  6:10   ` Andrew Morton
2010-06-11  6:10     ` Andrew Morton
2010-06-11 12:49     ` Mel Gorman
2010-06-11 12:49       ` Mel Gorman
2010-06-11 19:07       ` Andrew Morton
2010-06-11 19:07         ` Andrew Morton
2010-06-11 20:44         ` Mel Gorman
2010-06-11 20:44           ` Mel Gorman
2010-06-11 21:33           ` Andrew Morton
2010-06-11 21:33             ` Andrew Morton
2010-06-12  0:17             ` Mel Gorman
2010-06-12  0:17               ` Mel Gorman
2010-06-11 16:27     ` Christoph Hellwig
2010-06-11 16:27       ` Christoph Hellwig
2010-06-08  9:02 ` [PATCH 6/6] vmscan: Do not writeback pages in direct reclaim Mel Gorman
2010-06-08  9:02   ` Mel Gorman
2010-06-11  6:17   ` Andrew Morton
2010-06-11  6:17     ` Andrew Morton
2010-06-11 12:54     ` Mel Gorman
2010-06-11 12:54       ` Mel Gorman
2010-06-11 16:25     ` Christoph Hellwig
2010-06-11 16:25       ` Christoph Hellwig
2010-06-11 17:43       ` Andrew Morton
2010-06-11 17:43         ` Andrew Morton
2010-06-11 17:49         ` Christoph Hellwig
2010-06-11 17:49           ` Christoph Hellwig
2010-06-11 18:13           ` Mel Gorman
2010-06-11 18:13             ` Mel Gorman
2010-06-08  9:08 ` [RFC PATCH 0/6] Do not call ->writepage[s] from direct reclaim and use a_ops->writepages() where possible Christoph Hellwig
2010-06-08  9:08   ` Christoph Hellwig
2010-06-08  9:28   ` Mel Gorman
2010-06-08  9:28     ` Mel Gorman
2010-06-11 16:29     ` Christoph Hellwig
2010-06-11 16:29       ` Christoph Hellwig
2010-06-11 18:15       ` Mel Gorman
2010-06-11 18:15         ` Mel Gorman
2010-06-11 19:12       ` Chris Mason
2010-06-11 19:12         ` Chris Mason
2010-06-09  2:52 ` KAMEZAWA Hiroyuki
2010-06-09  2:52   ` KAMEZAWA Hiroyuki
2010-06-09  9:52   ` Mel Gorman
2010-06-09  9:52     ` Mel Gorman
2010-06-10  0:38     ` KAMEZAWA Hiroyuki
2010-06-10  0:38       ` KAMEZAWA Hiroyuki
2010-06-10  1:10       ` Mel Gorman
2010-06-10  1:10         ` Mel Gorman
2010-06-10  1:29         ` KAMEZAWA Hiroyuki
2010-06-10  1:29           ` KAMEZAWA Hiroyuki
2010-06-11  5:57 ` Andrew Morton
2010-06-11  5:57   ` Andrew Morton
2010-06-11 12:33   ` Mel Gorman
2010-06-11 12:33     ` Mel Gorman
2010-06-11 16:30     ` Christoph Hellwig
2010-06-11 16:30       ` Christoph Hellwig
2010-06-11 18:17       ` Mel Gorman
2010-06-11 18:17         ` Mel Gorman
2010-06-15 14:00 ` Andrea Arcangeli
2010-06-15 14:00   ` Andrea Arcangeli
2010-06-15 14:11   ` Christoph Hellwig
2010-06-15 14:11     ` Christoph Hellwig
2010-06-15 14:22     ` Andrea Arcangeli
2010-06-15 14:22       ` Andrea Arcangeli
2010-06-15 14:43       ` Christoph Hellwig
2010-06-15 14:43         ` Christoph Hellwig
2010-06-15 15:08         ` Andrea Arcangeli
2010-06-15 15:08           ` Andrea Arcangeli
2010-06-15 15:25           ` Christoph Hellwig
2010-06-15 15:25             ` Christoph Hellwig
2010-06-15 15:45             ` Andrea Arcangeli
2010-06-15 15:45               ` Andrea Arcangeli
2010-06-15 16:26               ` Christoph Hellwig
2010-06-15 16:26                 ` Christoph Hellwig
2010-06-15 16:31                 ` Andrea Arcangeli
2010-06-15 16:31                   ` Andrea Arcangeli
2010-06-15 16:49                 ` Rik van Riel
2010-06-15 16:49                   ` Rik van Riel
2010-06-15 16:54                   ` Christoph Hellwig
2010-06-15 16:54                     ` Christoph Hellwig
2010-06-15 19:13                     ` Rik van Riel
2010-06-15 19:13                       ` Rik van Riel
2010-06-15 19:17                       ` Christoph Hellwig
2010-06-15 19:17                         ` Christoph Hellwig
2010-06-15 19:44                         ` Chris Mason
2010-06-15 19:44                           ` Chris Mason
2010-06-16  7:57                       ` Nick Piggin
2010-06-16  7:57                         ` Nick Piggin
2010-06-16 16:59                         ` Rik van Riel
2010-06-16 16:59                           ` Rik van Riel
2010-06-16 17:04                           ` Andrea Arcangeli
2010-06-16 17:04                             ` Andrea Arcangeli
2010-06-15 16:54                   ` Nick Piggin
2010-06-15 16:54                     ` Nick Piggin
2010-06-15 15:38           ` Mel Gorman
2010-06-15 15:38             ` Mel Gorman
2010-06-15 16:14             ` Andrea Arcangeli
2010-06-15 16:14               ` Andrea Arcangeli
2010-06-15 16:22               ` Christoph Hellwig
2010-06-15 16:22                 ` Christoph Hellwig
2010-06-15 16:30               ` Mel Gorman
2010-06-15 16:30                 ` Mel Gorman
2010-06-15 16:34                 ` Mel Gorman
2010-06-15 16:34                   ` Mel Gorman
2010-06-15 16:54                   ` Andrea Arcangeli
2010-06-15 16:54                     ` Andrea Arcangeli
2010-06-15 16:35                 ` Christoph Hellwig
2010-06-15 16:35                   ` Christoph Hellwig
2010-06-15 16:37                 ` Andrea Arcangeli [this message]
2010-06-15 16:37                   ` Andrea Arcangeli
2010-06-15 17:43                   ` Christoph Hellwig
2010-06-15 17:43                     ` Christoph Hellwig
2010-06-15 16:45               ` Christoph Hellwig
2010-06-15 16:45                 ` Christoph Hellwig
2010-06-15 14:51   ` Mel Gorman
2010-06-15 14:51     ` Mel Gorman
2010-06-15 14:55     ` Rik van Riel
2010-06-15 14:55       ` Rik van Riel
2010-06-15 15:08     ` Nick Piggin
2010-06-15 15:08       ` Nick Piggin
2010-06-15 15:10       ` Mel Gorman
2010-06-15 15:10         ` Mel Gorman
2010-06-15 16:28     ` Andrea Arcangeli
2010-06-15 16:28       ` Andrea Arcangeli

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=20100615163747.GK28052@random.random \
    --to=aarcange@redhat.com \
    --cc=chris.mason@oracle.com \
    --cc=david@fromorbit.com \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=npiggin@suse.de \
    --cc=riel@redhat.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 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.