From: Vlastimil Babka <vbabka@suse.cz>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Rik van Riel <riel@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Mel Gorman <mgorman@suse.de>,
Johannes Weiner <hannes@cmpxchg.org>,
Minchan Kim <minchan@kernel.org>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>,
"Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
Tang Chen <tangchen@cn.fujitsu.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Wen Congyang <wency@cn.fujitsu.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Michal Nazarewicz <mina86@mina86.com>,
Laura Abbott <lauraa@codeaurora.org>,
Heesub Shin <heesub.shin@samsung.com>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
Ritesh Harjani <ritesh.list@gmail.com>,
t.stanislaws@samsung.com, Gioh Kim <gioh.kim@lge.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 03/10] mm/page_alloc: handle page on pcp correctly if it's pageblock is isolated
Date: Mon, 07 Jul 2014 17:19:48 +0200 [thread overview]
Message-ID: <53BABA94.4040107@suse.cz> (raw)
In-Reply-To: <1404460675-24456-4-git-send-email-iamjoonsoo.kim@lge.com>
On 07/04/2014 09:57 AM, Joonsoo Kim wrote:
> If pageblock of page on pcp are isolated now, we should free it to isolate
> buddy list to prevent future allocation on it. But current code doesn't
> do this.
>
> Moreover, there is a freepage counting problem on current code. Although
> pageblock of page on pcp are isolated now, it could go normal buddy list,
> because get_onpcp_migratetype() will return non-isolate migratetype.
get_onpcp_migratetype() is only introduced in later patch.
> In this case, we should do either adding freepage count or changing
> migratetype to MIGRATE_ISOLATE, but, current code do neither.
I wouldn't say it "do neither". It already limits the freepage counting
to !MIGRATE_ISOLATE case (and it's not converted to
__mod_zone_freepage_state for some reason). So there's accounting
mismatch in addition to buddy list misplacement.
> This patch fixes these two problems by handling pageblock migratetype
> before calling __free_one_page(). And, if we find the page on isolated
> pageblock, change migratetype to MIGRATE_ISOLATE to prevent future
> allocation of this page and freepage counting problem.
So although this is not an addition of a new pageblock migratetype check
to the fast path (the check is already there), I would prefer removing
the check :) With the approach of pcplists draining outlined in my reply
to 00/10, we would allow a misplacement to happen (and the page
accounted as freepage) immediately followed by move_frepages_block which
would place the page onto isolate freelist with the rest. Anything newly
freed will get isolate_migratetype determined in free_hot_cold_page or
__free_pages_ok (where it would need moving the migratepage check under
the disabled irq part) and be placed and buddy-merged properly.
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> ---
> mm/page_alloc.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index aeb51d1..99c05f7 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -719,15 +719,17 @@ static void free_pcppages_bulk(struct zone *zone, int count,
> page = list_entry(list->prev, struct page, lru);
> /* must delete as __free_one_page list manipulates */
> list_del(&page->lru);
> - mt = get_freepage_migratetype(page);
> +
> + if (unlikely(is_migrate_isolate_page(page))) {
> + mt = MIGRATE_ISOLATE;
> + } else {
> + mt = get_freepage_migratetype(page);
> + __mod_zone_freepage_state(zone, 1, mt);
> + }
> +
> /* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
> __free_one_page(page, page_to_pfn(page), zone, 0, mt);
> trace_mm_page_pcpu_drain(page, 0, mt);
> - if (likely(!is_migrate_isolate_page(page))) {
> - __mod_zone_page_state(zone, NR_FREE_PAGES, 1);
> - if (is_migrate_cma(mt))
> - __mod_zone_page_state(zone, NR_FREE_CMA_PAGES, 1);
> - }
> } while (--to_free && --batch_free && !list_empty(list));
> }
> spin_unlock(&zone->lock);
>
--
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>,
Andrew Morton <akpm@linux-foundation.org>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Rik van Riel <riel@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Mel Gorman <mgorman@suse.de>,
Johannes Weiner <hannes@cmpxchg.org>,
Minchan Kim <minchan@kernel.org>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>,
"Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
Tang Chen <tangchen@cn.fujitsu.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Wen Congyang <wency@cn.fujitsu.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Michal Nazarewicz <mina86@mina86.com>,
Laura Abbott <lauraa@codeaurora.org>,
Heesub Shin <heesub.shin@samsung.com>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>,
Ritesh Harjani <ritesh.list@gmail.com>,
t.stanislaws@samsung.com, Gioh Kim <gioh.kim@lge.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 03/10] mm/page_alloc: handle page on pcp correctly if it's pageblock is isolated
Date: Mon, 07 Jul 2014 17:19:48 +0200 [thread overview]
Message-ID: <53BABA94.4040107@suse.cz> (raw)
In-Reply-To: <1404460675-24456-4-git-send-email-iamjoonsoo.kim@lge.com>
On 07/04/2014 09:57 AM, Joonsoo Kim wrote:
> If pageblock of page on pcp are isolated now, we should free it to isolate
> buddy list to prevent future allocation on it. But current code doesn't
> do this.
>
> Moreover, there is a freepage counting problem on current code. Although
> pageblock of page on pcp are isolated now, it could go normal buddy list,
> because get_onpcp_migratetype() will return non-isolate migratetype.
get_onpcp_migratetype() is only introduced in later patch.
> In this case, we should do either adding freepage count or changing
> migratetype to MIGRATE_ISOLATE, but, current code do neither.
I wouldn't say it "do neither". It already limits the freepage counting
to !MIGRATE_ISOLATE case (and it's not converted to
__mod_zone_freepage_state for some reason). So there's accounting
mismatch in addition to buddy list misplacement.
> This patch fixes these two problems by handling pageblock migratetype
> before calling __free_one_page(). And, if we find the page on isolated
> pageblock, change migratetype to MIGRATE_ISOLATE to prevent future
> allocation of this page and freepage counting problem.
So although this is not an addition of a new pageblock migratetype check
to the fast path (the check is already there), I would prefer removing
the check :) With the approach of pcplists draining outlined in my reply
to 00/10, we would allow a misplacement to happen (and the page
accounted as freepage) immediately followed by move_frepages_block which
would place the page onto isolate freelist with the rest. Anything newly
freed will get isolate_migratetype determined in free_hot_cold_page or
__free_pages_ok (where it would need moving the migratepage check under
the disabled irq part) and be placed and buddy-merged properly.
> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> ---
> mm/page_alloc.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index aeb51d1..99c05f7 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -719,15 +719,17 @@ static void free_pcppages_bulk(struct zone *zone, int count,
> page = list_entry(list->prev, struct page, lru);
> /* must delete as __free_one_page list manipulates */
> list_del(&page->lru);
> - mt = get_freepage_migratetype(page);
> +
> + if (unlikely(is_migrate_isolate_page(page))) {
> + mt = MIGRATE_ISOLATE;
> + } else {
> + mt = get_freepage_migratetype(page);
> + __mod_zone_freepage_state(zone, 1, mt);
> + }
> +
> /* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
> __free_one_page(page, page_to_pfn(page), zone, 0, mt);
> trace_mm_page_pcpu_drain(page, 0, mt);
> - if (likely(!is_migrate_isolate_page(page))) {
> - __mod_zone_page_state(zone, NR_FREE_PAGES, 1);
> - if (is_migrate_cma(mt))
> - __mod_zone_page_state(zone, NR_FREE_CMA_PAGES, 1);
> - }
> } while (--to_free && --batch_free && !list_empty(list));
> }
> spin_unlock(&zone->lock);
>
next prev parent reply other threads:[~2014-07-07 15:19 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 7:57 [PATCH 00/10] fix freepage count problems due to memory isolation Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 01/10] mm/page_alloc: remove unlikely macro on free_one_page() Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 12:03 ` Vlastimil Babka
2014-07-04 12:03 ` Vlastimil Babka
2014-07-07 4:58 ` Joonsoo Kim
2014-07-07 4:58 ` Joonsoo Kim
2014-07-04 12:52 ` Michal Nazarewicz
2014-07-04 12:52 ` Michal Nazarewicz
2014-07-04 12:53 ` Michal Nazarewicz
2014-07-04 12:53 ` Michal Nazarewicz
2014-07-04 7:57 ` [PATCH 02/10] mm/page_alloc: correct to clear guard attribute in DEBUG_PAGEALLOC Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-07 14:50 ` Vlastimil Babka
2014-07-07 14:50 ` Vlastimil Babka
2014-07-04 7:57 ` [PATCH 03/10] mm/page_alloc: handle page on pcp correctly if it's pageblock is isolated Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-07 8:25 ` Gioh Kim
2014-07-07 8:25 ` Gioh Kim
2014-07-08 7:18 ` Vlastimil Babka
2014-07-08 7:18 ` Vlastimil Babka
2014-07-07 15:19 ` Vlastimil Babka [this message]
2014-07-07 15:19 ` Vlastimil Babka
2014-07-14 6:24 ` Joonsoo Kim
2014-07-14 6:24 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 04/10] mm/page_alloc: carefully free the page on isolate pageblock Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-07 15:43 ` Vlastimil Babka
2014-07-07 15:43 ` Vlastimil Babka
2014-07-04 7:57 ` [PATCH 05/10] mm/page_alloc: optimize and unify pageblock migratetype check in free path Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-07 15:50 ` Vlastimil Babka
2014-07-07 15:50 ` Vlastimil Babka
2014-07-14 6:28 ` Joonsoo Kim
2014-07-14 6:28 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 06/10] mm/page_alloc: separate freepage migratetype interface Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 07/10] mm/page_alloc: store migratetype of the buddy list into freepage correctly Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 08/10] mm/page_alloc: use get_onbuddy_migratetype() to get buddy list type Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-07 15:57 ` Vlastimil Babka
2014-07-07 15:57 ` Vlastimil Babka
2014-07-08 1:01 ` Gioh Kim
2014-07-08 1:01 ` Gioh Kim
2014-07-08 7:23 ` Vlastimil Babka
2014-07-08 7:23 ` Vlastimil Babka
2014-07-14 6:34 ` Joonsoo Kim
2014-07-14 6:34 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 09/10] mm/page_alloc: fix possible wrongly calculated freepage counter Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 7:57 ` [PATCH 10/10] mm/page_alloc: Stop merging pages on non-isolate and isolate buddy list Joonsoo Kim
2014-07-04 7:57 ` Joonsoo Kim
2014-07-04 15:33 ` [PATCH 00/10] fix freepage count problems due to memory isolation Vlastimil Babka
2014-07-04 15:33 ` Vlastimil Babka
2014-07-07 4:49 ` Joonsoo Kim
2014-07-07 4:49 ` Joonsoo Kim
2014-07-07 14:33 ` Vlastimil Babka
2014-07-07 14:33 ` Vlastimil Babka
2014-07-14 6:22 ` Joonsoo Kim
2014-07-14 6:22 ` Joonsoo Kim
2014-07-14 9:49 ` Vlastimil Babka
2014-07-14 9:49 ` Vlastimil Babka
2014-07-15 8:28 ` Joonsoo Kim
2014-07-15 8:28 ` Joonsoo Kim
2014-07-15 8:36 ` Vlastimil Babka
2014-07-15 8:36 ` Vlastimil Babka
2014-07-15 9:39 ` Joonsoo Kim
2014-07-15 10:00 ` Peter Zijlstra
2014-07-16 8:44 ` Joonsoo Kim
2014-07-16 8:43 ` Joonsoo Kim
2014-07-16 8:43 ` Joonsoo Kim
2014-07-16 11:14 ` Vlastimil Babka
2014-07-16 11:14 ` Vlastimil Babka
2014-07-17 6:12 ` Joonsoo Kim
2014-07-17 6:12 ` Joonsoo Kim
2014-07-17 9:14 ` Vlastimil Babka
2014-07-17 9:14 ` 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=53BABA94.4040107@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=b.zolnierkie@samsung.com \
--cc=gioh.kim@lge.com \
--cc=hannes@cmpxchg.org \
--cc=heesub.shin@samsung.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=lauraa@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=m.szyprowski@samsung.com \
--cc=mgorman@suse.de \
--cc=mina86@mina86.com \
--cc=minchan@kernel.org \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=ritesh.list@gmail.com \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
--cc=t.stanislaws@samsung.com \
--cc=tangchen@cn.fujitsu.com \
--cc=wency@cn.fujitsu.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.