From: Andrew Morton <akpm@linux-foundation.org>
To: Rik van Riel <riel@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] kswapd should only wait on IO if there is IO
Date: Thu, 27 Sep 2007 15:59:07 -0700 [thread overview]
Message-ID: <20070927155907.a4dce0d8.akpm@linux-foundation.org> (raw)
In-Reply-To: <20070927185027.1a1b4c13@bree.surriel.com>
On Thu, 27 Sep 2007 18:50:27 -0400
Rik van Riel <riel@redhat.com> wrote:
> On Thu, 27 Sep 2007 15:21:21 -0700
> Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > > Nope, sc.nr_io_pages will also be incremented when the code runs into
> > > pages that are already PageWriteback.
> >
> > yup, I didn't think of that. Hopefully someone else will be in there
> > working on that zone too. If this caller yields and defers to kswapd
> > then that's very likely. Except we just took away the ability to do that..
>
> if (PageDirty(page)) {
> if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && referenced)
> goto keep_locked;
> if (!may_enter_fs)
> goto keep_locked;
>
> I think we can fix that problem by adding a sc->nr_io_pages++
> between the last if and the goto keep_locked in shrink_page_list.
>
> That way !GFP_IO or !GFP_FS tasks will cause themselves to sleep
> if there are pages that need to be written out, even if those
> pages are not in flight to disk yet.
yeah, that's prudent I guess.
> I have also added the comment you wanted.
And lost the changelog ;)
> - if (sc.nr_scanned && priority < DEF_PRIORITY - 2)
> + if (sc.nr_scanned && priority < DEF_PRIORITY - 2 &&
> + sc.nr_io_pages > sc.swap_cluster_max)
I do think this design decision needs a bit of explanation too.
> congestion_wait(WRITE, HZ/10);
> }
> /* top priority shrink_caches still had more to do? don't OOM, then */
> @@ -1315,6 +1330,7 @@ loop_again:
> if (!priority)
> disable_swap_token();
>
> + sc.nr_io_pages = 0;
> all_zones_ok = 1;
>
> /*
> @@ -1398,7 +1414,8 @@ loop_again:
> * OK, kswapd is getting into trouble. Take a nap, then take
> * another pass across the zones.
> */
> - if (total_scanned && priority < DEF_PRIORITY - 2)
> + if (total_scanned && priority < DEF_PRIORITY - 2 &&
As did that one. Ho hum :( Maybe it's in the git history somewhere.
WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Rik van Riel <riel@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] kswapd should only wait on IO if there is IO
Date: Thu, 27 Sep 2007 15:59:07 -0700 [thread overview]
Message-ID: <20070927155907.a4dce0d8.akpm@linux-foundation.org> (raw)
In-Reply-To: <20070927185027.1a1b4c13@bree.surriel.com>
On Thu, 27 Sep 2007 18:50:27 -0400
Rik van Riel <riel@redhat.com> wrote:
> On Thu, 27 Sep 2007 15:21:21 -0700
> Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > > Nope, sc.nr_io_pages will also be incremented when the code runs into
> > > pages that are already PageWriteback.
> >
> > yup, I didn't think of that. Hopefully someone else will be in there
> > working on that zone too. If this caller yields and defers to kswapd
> > then that's very likely. Except we just took away the ability to do that..
>
> if (PageDirty(page)) {
> if (sc->order <= PAGE_ALLOC_COSTLY_ORDER && referenced)
> goto keep_locked;
> if (!may_enter_fs)
> goto keep_locked;
>
> I think we can fix that problem by adding a sc->nr_io_pages++
> between the last if and the goto keep_locked in shrink_page_list.
>
> That way !GFP_IO or !GFP_FS tasks will cause themselves to sleep
> if there are pages that need to be written out, even if those
> pages are not in flight to disk yet.
yeah, that's prudent I guess.
> I have also added the comment you wanted.
And lost the changelog ;)
> - if (sc.nr_scanned && priority < DEF_PRIORITY - 2)
> + if (sc.nr_scanned && priority < DEF_PRIORITY - 2 &&
> + sc.nr_io_pages > sc.swap_cluster_max)
I do think this design decision needs a bit of explanation too.
> congestion_wait(WRITE, HZ/10);
> }
> /* top priority shrink_caches still had more to do? don't OOM, then */
> @@ -1315,6 +1330,7 @@ loop_again:
> if (!priority)
> disable_swap_token();
>
> + sc.nr_io_pages = 0;
> all_zones_ok = 1;
>
> /*
> @@ -1398,7 +1414,8 @@ loop_again:
> * OK, kswapd is getting into trouble. Take a nap, then take
> * another pass across the zones.
> */
> - if (total_scanned && priority < DEF_PRIORITY - 2)
> + if (total_scanned && priority < DEF_PRIORITY - 2 &&
As did that one. Ho hum :( Maybe it's in the git history somewhere.
--
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>
next prev parent reply other threads:[~2007-09-27 23:00 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-27 21:08 [PATCH] kswapd should only wait on IO if there is IO Rik van Riel
2007-09-27 21:08 ` Rik van Riel
2007-09-27 21:47 ` Andrew Morton
2007-09-27 21:47 ` Andrew Morton
2007-09-27 22:13 ` Rik van Riel
2007-09-27 22:13 ` Rik van Riel
2007-09-27 22:21 ` Andrew Morton
2007-09-27 22:21 ` Andrew Morton
2007-09-27 22:50 ` Rik van Riel
2007-09-27 22:50 ` Rik van Riel
2007-09-27 22:59 ` Andrew Morton [this message]
2007-09-27 22:59 ` Andrew Morton
2007-09-27 23:08 ` Rik van Riel
2007-09-27 23:08 ` Rik van Riel
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=20070927155907.a4dce0d8.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--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.