From: Vlastimil Babka <vbabka@suse.cz>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Luiz Capitulino <lcapitulino@redhat.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Mel Gorman <mgorman@techsingularity.net>,
Davidlohr Bueso <dave@stgolabs.net>,
Hillf Danton <hillf.zj@alibaba-inc.com>,
Mike Kravetz <mike.kravetz@oracle.com>
Subject: Re: [PATCH] mm, hugetlb: don't require CMA for runtime gigantic pages
Date: Thu, 4 Feb 2016 11:15:48 +0100 [thread overview]
Message-ID: <56B324D4.6030703@suse.cz> (raw)
In-Reply-To: <56B31A31.3070406@suse.cz>
On 02/04/2016 10:30 AM, Vlastimil Babka wrote:
> On 02/04/2016 07:02 AM, Joonsoo Kim wrote:
>> On Wed, Feb 03, 2016 at 06:50:11PM +0100, Vlastimil Babka wrote:
>>> Commit 944d9fec8d7a ("hugetlb: add support for gigantic page allocation at
>>> runtime") has added the runtime gigantic page allocation via
>>> alloc_contig_range(), making this support available only when CONFIG_CMA is
>>> enabled. Because it doesn't depend on MIGRATE_CMA pageblocks and the
>>> associated infrastructure, it is possible with few simple adjustments to
>>> require only CONFIG_MEMORY_ISOLATION instead of full CONFIG_CMA.
>>>
>>> After this patch, alloc_contig_range() and related functions are available
>>> and used for gigantic pages with just CONFIG_MEMORY_ISOLATION enabled. Note
>>> CONFIG_CMA selects CONFIG_MEMORY_ISOLATION. This allows supporting runtime
>>> gigantic pages without the CMA-specific checks in page allocator fastpaths.
>>
>> You need to set CONFIG_COMPACTION or CONFIG_CMA to use
>> isolate_migratepages_range() and others in alloc_contig_range().
>
> Hm, right, thanks for catching this. I admit I didn't try disabling
> compaction during the tests.
Here's a v2. Not the prettiest thing, admittedly.
----8<----
From: Vlastimil Babka <vbabka@suse.cz>
Date: Wed, 3 Feb 2016 17:45:26 +0100
Subject: [PATCH v2] mm, hugetlb: don't require CMA for runtime gigantic pages
Commit 944d9fec8d7a ("hugetlb: add support for gigantic page allocation at
runtime") has added the runtime gigantic page allocation via
alloc_contig_range(), making this support available only when CONFIG_CMA is
enabled. Because it doesn't depend on MIGRATE_CMA pageblocks and the
associated infrastructure, it is possible with few simple adjustments to
require only CONFIG_MEMORY_ISOLATION and CONFIG_COMPACTION instead of full
CONFIG_CMA.
After this patch, alloc_contig_range() and related functions are available
and used for gigantic pages with just CONFIG_MEMORY_ISOLATION and
CONFIG_COMPACTION enabled (or CONFIG_CMA as before). Note CONFIG_CMA selects
CONFIG_MEMORY_ISOLATION. This allows supporting runtime gigantic pages without
the CMA-specific checks in page allocator fastpaths.
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
---
include/linux/gfp.h | 6 +++---
mm/hugetlb.c | 2 +-
mm/page_alloc.c | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 8942af0813e3..4cb589ae6c4b 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -539,16 +539,16 @@ static inline bool pm_suspended_storage(void)
}
#endif /* CONFIG_PM_SLEEP */
-#ifdef CONFIG_CMA
-
+#if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA)
/* The below functions must be run on a range from a single zone. */
extern int alloc_contig_range(unsigned long start, unsigned long end,
unsigned migratetype);
extern void free_contig_range(unsigned long pfn, unsigned nr_pages);
+#endif
+#ifdef CONFIG_CMA
/* CMA stuff */
extern void init_cma_reserved_pageblock(struct page *page);
-
#endif
#endif /* __LINUX_GFP_H */
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index ef6963b577fd..50700ec80009 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1002,7 +1002,7 @@ static int hstate_next_node_to_free(struct hstate *h, nodemask_t *nodes_allowed)
((node = hstate_next_node_to_free(hs, mask)) || 1); \
nr_nodes--)
-#if defined(CONFIG_CMA) && defined(CONFIG_X86_64)
+#if defined(CONFIG_X86_64) && ((defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA))
static void destroy_compound_gigantic_page(struct page *page,
unsigned int order)
{
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9d666df5ef95..5fcfac52ca5a 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6599,7 +6599,7 @@ bool is_pageblock_removable_nolock(struct page *page)
return !has_unmovable_pages(zone, page, 0, true);
}
-#ifdef CONFIG_CMA
+#if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA)
static unsigned long pfn_max_align_down(unsigned long pfn)
{
--
2.7.0
--
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>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Luiz Capitulino <lcapitulino@redhat.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Mel Gorman <mgorman@techsingularity.net>,
Davidlohr Bueso <dave@stgolabs.net>,
Hillf Danton <hillf.zj@alibaba-inc.com>,
Mike Kravetz <mike.kravetz@oracle.com>
Subject: Re: [PATCH] mm, hugetlb: don't require CMA for runtime gigantic pages
Date: Thu, 4 Feb 2016 11:15:48 +0100 [thread overview]
Message-ID: <56B324D4.6030703@suse.cz> (raw)
In-Reply-To: <56B31A31.3070406@suse.cz>
On 02/04/2016 10:30 AM, Vlastimil Babka wrote:
> On 02/04/2016 07:02 AM, Joonsoo Kim wrote:
>> On Wed, Feb 03, 2016 at 06:50:11PM +0100, Vlastimil Babka wrote:
>>> Commit 944d9fec8d7a ("hugetlb: add support for gigantic page allocation at
>>> runtime") has added the runtime gigantic page allocation via
>>> alloc_contig_range(), making this support available only when CONFIG_CMA is
>>> enabled. Because it doesn't depend on MIGRATE_CMA pageblocks and the
>>> associated infrastructure, it is possible with few simple adjustments to
>>> require only CONFIG_MEMORY_ISOLATION instead of full CONFIG_CMA.
>>>
>>> After this patch, alloc_contig_range() and related functions are available
>>> and used for gigantic pages with just CONFIG_MEMORY_ISOLATION enabled. Note
>>> CONFIG_CMA selects CONFIG_MEMORY_ISOLATION. This allows supporting runtime
>>> gigantic pages without the CMA-specific checks in page allocator fastpaths.
>>
>> You need to set CONFIG_COMPACTION or CONFIG_CMA to use
>> isolate_migratepages_range() and others in alloc_contig_range().
>
> Hm, right, thanks for catching this. I admit I didn't try disabling
> compaction during the tests.
Here's a v2. Not the prettiest thing, admittedly.
----8<----
From: Vlastimil Babka <vbabka@suse.cz>
Date: Wed, 3 Feb 2016 17:45:26 +0100
Subject: [PATCH v2] mm, hugetlb: don't require CMA for runtime gigantic pages
Commit 944d9fec8d7a ("hugetlb: add support for gigantic page allocation at
runtime") has added the runtime gigantic page allocation via
alloc_contig_range(), making this support available only when CONFIG_CMA is
enabled. Because it doesn't depend on MIGRATE_CMA pageblocks and the
associated infrastructure, it is possible with few simple adjustments to
require only CONFIG_MEMORY_ISOLATION and CONFIG_COMPACTION instead of full
CONFIG_CMA.
After this patch, alloc_contig_range() and related functions are available
and used for gigantic pages with just CONFIG_MEMORY_ISOLATION and
CONFIG_COMPACTION enabled (or CONFIG_CMA as before). Note CONFIG_CMA selects
CONFIG_MEMORY_ISOLATION. This allows supporting runtime gigantic pages without
the CMA-specific checks in page allocator fastpaths.
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
---
include/linux/gfp.h | 6 +++---
mm/hugetlb.c | 2 +-
mm/page_alloc.c | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 8942af0813e3..4cb589ae6c4b 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -539,16 +539,16 @@ static inline bool pm_suspended_storage(void)
}
#endif /* CONFIG_PM_SLEEP */
-#ifdef CONFIG_CMA
-
+#if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA)
/* The below functions must be run on a range from a single zone. */
extern int alloc_contig_range(unsigned long start, unsigned long end,
unsigned migratetype);
extern void free_contig_range(unsigned long pfn, unsigned nr_pages);
+#endif
+#ifdef CONFIG_CMA
/* CMA stuff */
extern void init_cma_reserved_pageblock(struct page *page);
-
#endif
#endif /* __LINUX_GFP_H */
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index ef6963b577fd..50700ec80009 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1002,7 +1002,7 @@ static int hstate_next_node_to_free(struct hstate *h, nodemask_t *nodes_allowed)
((node = hstate_next_node_to_free(hs, mask)) || 1); \
nr_nodes--)
-#if defined(CONFIG_CMA) && defined(CONFIG_X86_64)
+#if defined(CONFIG_X86_64) && ((defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA))
static void destroy_compound_gigantic_page(struct page *page,
unsigned int order)
{
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9d666df5ef95..5fcfac52ca5a 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6599,7 +6599,7 @@ bool is_pageblock_removable_nolock(struct page *page)
return !has_unmovable_pages(zone, page, 0, true);
}
-#ifdef CONFIG_CMA
+#if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA)
static unsigned long pfn_max_align_down(unsigned long pfn)
{
--
2.7.0
next prev parent reply other threads:[~2016-02-04 10:15 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-03 17:50 [PATCH] mm, hugetlb: don't require CMA for runtime gigantic pages Vlastimil Babka
2016-02-03 17:50 ` Vlastimil Babka
2016-02-04 6:02 ` Joonsoo Kim
2016-02-04 6:02 ` Joonsoo Kim
2016-02-04 9:30 ` Vlastimil Babka
2016-02-04 9:30 ` Vlastimil Babka
2016-02-04 10:15 ` Vlastimil Babka [this message]
2016-02-04 10:15 ` Vlastimil Babka
2016-02-05 0:14 ` Kirill A. Shutemov
2016-02-05 0:14 ` Kirill A. Shutemov
2016-02-05 12:02 ` Vlastimil Babka
2016-02-05 12:02 ` 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=56B324D4.6030703@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=dave@stgolabs.net \
--cc=hillf.zj@alibaba-inc.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=lcapitulino@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mike.kravetz@oracle.com \
--cc=n-horiguchi@ah.jp.nec.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.