From: Johannes Weiner <hannes@cmpxchg.org>
To: Rik van Riel <riel@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
lwoodman@redhat.com, kosaki.motohiro@fujitsu.co.jp,
Tomasz Chmielewski <mangoo@wpkg.org>,
akpm@linux-foundation.org
Subject: Re: [PATCH] vmscan: do not evict inactive pages when skipping an active list scan
Date: Wed, 25 Nov 2009 21:35:09 +0100 [thread overview]
Message-ID: <20091125203509.GA18018@cmpxchg.org> (raw)
In-Reply-To: <20091125133752.2683c3e4@bree.surriel.com>
Hello all,
On Wed, Nov 25, 2009 at 01:37:52PM -0500, Rik van Riel wrote:
> In AIM7 runs, recent kernels start swapping out anonymous pages
> well before they should. This is due to shrink_list falling
> through to shrink_inactive_list if !inactive_anon_is_low(zone, sc),
> when all we really wanted to do is pre-age some anonymous pages to
> give them extra time to be referenced while on the inactive list.
I do not quite understand what changed 'recently'.
That fall-through logic to keep eating inactives when the ratio is off
came in a year ago with the second-chance-for-anon-pages patch..?
> The obvious fix is to make sure that shrink_list does not fall
> through to scanning/reclaiming inactive pages when we called it
> to scan one of the active lists.
>
> This change should be safe because the loop in shrink_zone ensures
> that we will still shrink the anon and file inactive lists whenever
> we should.
It was not so obvious to me ;)
At first, I thought it would make sense to actively rebalance between
the lists if the inactive one grows too large (the fall-through case).
But shrink_zone() does not know about this and although we scan
inactive pages, we do not account for them and decrease the 'nr[lru]'
for active pages instead, effectively shifting the 'active todo' over
to the 'inactive todo'. I can imagine this going wrong!
So I agree, we should use the inactive_*_is_low() predicate only
passively.
> Reported-by: Larry Woodman <lwoodman@redhat.com>
> Signed-off-by: Rik van Riel <riel@redhat.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 777af57..ec4dfda 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1469,13 +1469,15 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
> {
> int file = is_file_lru(lru);
>
> - if (lru == LRU_ACTIVE_FILE && inactive_file_is_low(zone, sc)) {
> - shrink_active_list(nr_to_scan, zone, sc, priority, file);
> + if (lru == LRU_ACTIVE_FILE) {
> + if (inactive_file_is_low(zone, sc))
> + shrink_active_list(nr_to_scan, zone, sc, priority, file);
> return 0;
> }
>
> - if (lru == LRU_ACTIVE_ANON && inactive_anon_is_low(zone, sc)) {
> - shrink_active_list(nr_to_scan, zone, sc, priority, file);
> + if (lru == LRU_ACTIVE_ANON) {
> + if (inactive_file_is_low(zone, sc))
> + shrink_active_list(nr_to_scan, zone, sc, priority, file);
> return 0;
> }
> return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
>
> --
> 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>
WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <hannes@cmpxchg.org>
To: Rik van Riel <riel@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
lwoodman@redhat.com, kosaki.motohiro@fujitsu.co.jp,
Tomasz Chmielewski <mangoo@wpkg.org>,
akpm@linux-foundation.org
Subject: Re: [PATCH] vmscan: do not evict inactive pages when skipping an active list scan
Date: Wed, 25 Nov 2009 21:35:09 +0100 [thread overview]
Message-ID: <20091125203509.GA18018@cmpxchg.org> (raw)
In-Reply-To: <20091125133752.2683c3e4@bree.surriel.com>
Hello all,
On Wed, Nov 25, 2009 at 01:37:52PM -0500, Rik van Riel wrote:
> In AIM7 runs, recent kernels start swapping out anonymous pages
> well before they should. This is due to shrink_list falling
> through to shrink_inactive_list if !inactive_anon_is_low(zone, sc),
> when all we really wanted to do is pre-age some anonymous pages to
> give them extra time to be referenced while on the inactive list.
I do not quite understand what changed 'recently'.
That fall-through logic to keep eating inactives when the ratio is off
came in a year ago with the second-chance-for-anon-pages patch..?
> The obvious fix is to make sure that shrink_list does not fall
> through to scanning/reclaiming inactive pages when we called it
> to scan one of the active lists.
>
> This change should be safe because the loop in shrink_zone ensures
> that we will still shrink the anon and file inactive lists whenever
> we should.
It was not so obvious to me ;)
At first, I thought it would make sense to actively rebalance between
the lists if the inactive one grows too large (the fall-through case).
But shrink_zone() does not know about this and although we scan
inactive pages, we do not account for them and decrease the 'nr[lru]'
for active pages instead, effectively shifting the 'active todo' over
to the 'inactive todo'. I can imagine this going wrong!
So I agree, we should use the inactive_*_is_low() predicate only
passively.
> Reported-by: Larry Woodman <lwoodman@redhat.com>
> Signed-off-by: Rik van Riel <riel@redhat.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 777af57..ec4dfda 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1469,13 +1469,15 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
> {
> int file = is_file_lru(lru);
>
> - if (lru == LRU_ACTIVE_FILE && inactive_file_is_low(zone, sc)) {
> - shrink_active_list(nr_to_scan, zone, sc, priority, file);
> + if (lru == LRU_ACTIVE_FILE) {
> + if (inactive_file_is_low(zone, sc))
> + shrink_active_list(nr_to_scan, zone, sc, priority, file);
> return 0;
> }
>
> - if (lru == LRU_ACTIVE_ANON && inactive_anon_is_low(zone, sc)) {
> - shrink_active_list(nr_to_scan, zone, sc, priority, file);
> + if (lru == LRU_ACTIVE_ANON) {
> + if (inactive_file_is_low(zone, sc))
> + shrink_active_list(nr_to_scan, zone, sc, priority, file);
> return 0;
> }
> return shrink_inactive_list(nr_to_scan, zone, sc, priority, file);
>
> --
> 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>
--
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:[~2009-11-25 21:05 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-25 18:37 [PATCH] vmscan: do not evict inactive pages when skipping an active list scan Rik van Riel
2009-11-25 18:37 ` Rik van Riel
2009-11-25 20:35 ` Johannes Weiner [this message]
2009-11-25 20:35 ` Johannes Weiner
2009-11-25 20:47 ` Rik van Riel
2009-11-25 20:47 ` Rik van Riel
2009-11-26 2:50 ` KOSAKI Motohiro
2009-11-26 2:50 ` KOSAKI Motohiro
2009-11-26 2:57 ` Rik van Riel
2009-11-26 2:57 ` Rik van Riel
2009-11-30 22:00 ` [RFC] high system time & lock contention running large mixed workload Larry Woodman
2009-12-01 10:04 ` Andrea Arcangeli
2009-12-01 10:04 ` Andrea Arcangeli
2009-12-01 12:31 ` KOSAKI Motohiro
2009-12-01 12:31 ` KOSAKI Motohiro
2009-12-01 12:46 ` Andrea Arcangeli
2009-12-01 12:46 ` Andrea Arcangeli
2009-12-02 2:02 ` KOSAKI Motohiro
2009-12-02 2:02 ` KOSAKI Motohiro
2009-12-02 2:04 ` Rik van Riel
2009-12-02 2:04 ` Rik van Riel
2009-12-02 2:00 ` Rik van Riel
2009-12-02 2:00 ` Rik van Riel
2009-12-01 12:23 ` KOSAKI Motohiro
2009-12-01 12:23 ` KOSAKI Motohiro
2009-12-01 16:41 ` Larry Woodman
2009-12-02 2:20 ` Rik van Riel
2009-12-02 2:20 ` Rik van Riel
2009-12-02 2:41 ` KOSAKI Motohiro
2009-12-02 2:41 ` KOSAKI Motohiro
2009-12-03 22:14 ` Larry Woodman
2009-12-04 0:29 ` Rik van Riel
2009-12-04 0:29 ` Rik van Riel
2009-12-04 21:26 ` Larry Woodman
2009-12-06 21:04 ` Rik van Riel
2009-12-06 21:04 ` Rik van Riel
2009-12-04 0:36 ` KOSAKI Motohiro
2009-12-04 0:36 ` KOSAKI Motohiro
2009-12-04 19:31 ` Larry Woodman
2009-12-04 19:31 ` Larry Woodman
2009-12-02 2:55 ` [PATCH] Clear reference bit although page isn't mapped KOSAKI Motohiro
2009-12-02 2:55 ` KOSAKI Motohiro
2009-12-02 3:07 ` Rik van Riel
2009-12-02 3:07 ` Rik van Riel
2009-12-02 3:28 ` [PATCH] Replace page_mapping_inuse() with page_mapped() KOSAKI Motohiro
2009-12-02 3:28 ` KOSAKI Motohiro
2009-12-02 4:57 ` Rik van Riel
2009-12-02 4:57 ` Rik van Riel
2009-12-02 11:07 ` Johannes Weiner
2009-12-02 11:07 ` Johannes Weiner
2009-12-02 1:55 ` [RFC] high system time & lock contention running large mixed workload Rik van Riel
2009-12-02 1:55 ` 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=20091125203509.GA18018@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=kosaki.motohiro@fujitsu.co.jp \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lwoodman@redhat.com \
--cc=mangoo@wpkg.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.