From: Vlastimil Babka <vbabka@suse.cz>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
David Rientjes <rientjes@google.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Minchan Kim <minchan@kernel.org>,
Michal Nazarewicz <mina86@mina86.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Christoph Lameter <cl@linux.com>, Rik van Riel <riel@redhat.com>,
Mel Gorman <mgorman@suse.de>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Subject: Re: [PATCH v6 05/13] mm, compaction: move pageblock checks up from isolate_migratepages_range()
Date: Mon, 29 Sep 2014 10:15:36 +0200 [thread overview]
Message-ID: <54291528.40505@suse.cz> (raw)
In-Reply-To: <20140929075038.GC29310@js1304-P5Q-DELUXE>
On 09/29/2014 09:50 AM, Joonsoo Kim wrote:
>
> Hello,
>
> This patch needs one fix.
> Please see below.
Oops, you're right.
> Thanks.
>
> ---------->8-------------
> From 3ba15d35c00e0d913d603d2972678bf74554ed60 Mon Sep 17 00:00:00 2001
> From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> Date: Mon, 29 Sep 2014 15:08:07 +0900
> Subject: [PATCH] mm/compaction: fix isolated page counting bug in compaction
>
> acct_isolated() is the function to adjust isolated page count. It
> iterates cc->migratepages list and add
> NR_ISOLATED_ANON/NR_ISOLATED_FILE count according to number of anon,
> file pages in migratepages list, respectively. Before commit (mm,
> compaction: move pageblock checks up from isolate_migratepages_range()),
> it is called just once in isolate_migratepages_range(), but, after commit,
> it is called in newly introduced isolate_migratepages_block() and this
> isolate_migratepages_block() could be called many times in
> isolate_migratepages_range() so that some page could be counted more
> than once. This duplicate counting bug results in hang in cma_alloc(),
> because too_many_isolated() returns true continually.
>
> This patch fixes this bug by moving acct_isolated() into upper layer
> function, isolate_migratepages_range() and isolate_migratepages().
> After this change, isolated page would be counted only once so
> problem would be gone.
>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Thanks!
> ---
> mm/compaction.c | 19 ++++++++-----------
> 1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/mm/compaction.c b/mm/compaction.c
> index 7d9d92e..48129b6 100644
> --- a/mm/compaction.c
> +++ b/mm/compaction.c
> @@ -514,22 +514,19 @@ isolate_freepages_range(struct compact_control *cc,
> }
>
> /* Update the number of anon and file isolated pages in the zone */
> -static void acct_isolated(struct zone *zone, bool locked, struct compact_control *cc)
> +static void acct_isolated(struct zone *zone, struct compact_control *cc)
> {
> struct page *page;
> unsigned int count[2] = { 0, };
>
> + if (list_empty(&cc->migratepages))
> + return;
> +
> list_for_each_entry(page, &cc->migratepages, lru)
> count[!!page_is_file_cache(page)]++;
>
> - /* If locked we can use the interrupt unsafe versions */
> - if (locked) {
> - __mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> - __mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> - } else {
> - mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> - mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> - }
> + mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> + mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> }
>
> /* Similar to reclaim, but different enough that they don't share logic */
> @@ -726,8 +723,6 @@ isolate_success:
> if (unlikely(low_pfn > end_pfn))
> low_pfn = end_pfn;
>
> - acct_isolated(zone, locked, cc);
> -
> if (locked)
> spin_unlock_irqrestore(&zone->lru_lock, flags);
>
> @@ -789,6 +784,7 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn,
> break;
> }
> }
> + acct_isolated(cc->zone, cc);
>
> return pfn;
> }
> @@ -1028,6 +1024,7 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone,
> break;
> }
>
> + acct_isolated(zone, cc);
> /* Record where migration scanner will be restarted */
> cc->migrate_pfn = low_pfn;
>
>
--
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: Vlastimil Babka <vbabka@suse.cz>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
David Rientjes <rientjes@google.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Minchan Kim <minchan@kernel.org>,
Michal Nazarewicz <mina86@mina86.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Christoph Lameter <cl@linux.com>, Rik van Riel <riel@redhat.com>,
Mel Gorman <mgorman@suse.de>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Subject: Re: [PATCH v6 05/13] mm, compaction: move pageblock checks up from isolate_migratepages_range()
Date: Mon, 29 Sep 2014 10:15:36 +0200 [thread overview]
Message-ID: <54291528.40505@suse.cz> (raw)
In-Reply-To: <20140929075038.GC29310@js1304-P5Q-DELUXE>
On 09/29/2014 09:50 AM, Joonsoo Kim wrote:
>
> Hello,
>
> This patch needs one fix.
> Please see below.
Oops, you're right.
> Thanks.
>
> ---------->8-------------
> From 3ba15d35c00e0d913d603d2972678bf74554ed60 Mon Sep 17 00:00:00 2001
> From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> Date: Mon, 29 Sep 2014 15:08:07 +0900
> Subject: [PATCH] mm/compaction: fix isolated page counting bug in compaction
>
> acct_isolated() is the function to adjust isolated page count. It
> iterates cc->migratepages list and add
> NR_ISOLATED_ANON/NR_ISOLATED_FILE count according to number of anon,
> file pages in migratepages list, respectively. Before commit (mm,
> compaction: move pageblock checks up from isolate_migratepages_range()),
> it is called just once in isolate_migratepages_range(), but, after commit,
> it is called in newly introduced isolate_migratepages_block() and this
> isolate_migratepages_block() could be called many times in
> isolate_migratepages_range() so that some page could be counted more
> than once. This duplicate counting bug results in hang in cma_alloc(),
> because too_many_isolated() returns true continually.
>
> This patch fixes this bug by moving acct_isolated() into upper layer
> function, isolate_migratepages_range() and isolate_migratepages().
> After this change, isolated page would be counted only once so
> problem would be gone.
>
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Thanks!
> ---
> mm/compaction.c | 19 ++++++++-----------
> 1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/mm/compaction.c b/mm/compaction.c
> index 7d9d92e..48129b6 100644
> --- a/mm/compaction.c
> +++ b/mm/compaction.c
> @@ -514,22 +514,19 @@ isolate_freepages_range(struct compact_control *cc,
> }
>
> /* Update the number of anon and file isolated pages in the zone */
> -static void acct_isolated(struct zone *zone, bool locked, struct compact_control *cc)
> +static void acct_isolated(struct zone *zone, struct compact_control *cc)
> {
> struct page *page;
> unsigned int count[2] = { 0, };
>
> + if (list_empty(&cc->migratepages))
> + return;
> +
> list_for_each_entry(page, &cc->migratepages, lru)
> count[!!page_is_file_cache(page)]++;
>
> - /* If locked we can use the interrupt unsafe versions */
> - if (locked) {
> - __mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> - __mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> - } else {
> - mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> - mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> - }
> + mod_zone_page_state(zone, NR_ISOLATED_ANON, count[0]);
> + mod_zone_page_state(zone, NR_ISOLATED_FILE, count[1]);
> }
>
> /* Similar to reclaim, but different enough that they don't share logic */
> @@ -726,8 +723,6 @@ isolate_success:
> if (unlikely(low_pfn > end_pfn))
> low_pfn = end_pfn;
>
> - acct_isolated(zone, locked, cc);
> -
> if (locked)
> spin_unlock_irqrestore(&zone->lru_lock, flags);
>
> @@ -789,6 +784,7 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn,
> break;
> }
> }
> + acct_isolated(cc->zone, cc);
>
> return pfn;
> }
> @@ -1028,6 +1024,7 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone,
> break;
> }
>
> + acct_isolated(zone, cc);
> /* Record where migration scanner will be restarted */
> cc->migrate_pfn = low_pfn;
>
>
next prev parent reply other threads:[~2014-09-29 8:15 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-04 8:55 [PATCH v6 00/13] compaction: balancing overhead and success rates Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 01/13] mm, THP: don't hold mmap_sem in khugepaged when allocating THP Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 02/13] mm, compaction: defer each zone individually instead of preferred zone Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 03/13] mm, compaction: do not count compact_stall if all zones skipped compaction Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 04/13] mm, compaction: do not recheck suitable_migration_target under lock Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 05/13] mm, compaction: move pageblock checks up from isolate_migratepages_range() Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-09-29 7:50 ` Joonsoo Kim
2014-09-29 7:50 ` Joonsoo Kim
2014-09-29 8:15 ` Vlastimil Babka [this message]
2014-09-29 8:15 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 06/13] mm, compaction: reduce zone checking frequency in the migration scanner Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 07/13] mm, compaction: khugepaged should not give up due to need_resched() Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 08/13] mm, compaction: periodically drop lock and restore IRQs in scanners Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 09/13] mm, compaction: skip rechecks when lock was already held Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 10/13] mm, compaction: remember position within pageblock in free pages scanner Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 11/13] mm, compaction: skip buddy pages by their order in the migrate scanner Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-21 22:11 ` Andrew Morton
2014-08-21 22:11 ` Andrew Morton
2014-09-08 8:04 ` Vlastimil Babka
2014-09-08 8:04 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 12/13] mm: rename allocflags_to_migratetype for clarity Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
2014-08-04 8:55 ` [PATCH v6 13/13] mm, compaction: pass gfp mask to compact_control Vlastimil Babka
2014-08-04 8:55 ` Vlastimil Babka
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=54291528.40505@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mina86@mina86.com \
--cc=minchan@kernel.org \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=riel@redhat.com \
--cc=rientjes@google.com \
--cc=zhangyanfei@cn.fujitsu.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.