Re: [PATCH 8/8] prepare to remove /proc/sys/vm/hugepages_treat_as_movable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 18, 2013 at 05:34:32PM -0400, Naoya Horiguchi wrote:
>Now hugepages are definitely movable. So allocating hugepages from
>ZONE_MOVABLE is natural and we have no reason to keep this parameter.
>In order to allow userspace to prepare for the removal, let's leave
>this sysctl handler as noop for a while.
>
>ChangeLog v3:
> - use WARN_ON_ONCE
>
>ChangeLog v2:
> - shift to noop function instead of completely removing the parameter
> - rename patch title
>

Reviewed-by: Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx>

>Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx>
>---
> Documentation/sysctl/vm.txt | 13 ++-----------
> mm/hugetlb.c                | 17 ++++++-----------
> 2 files changed, 8 insertions(+), 22 deletions(-)
>
>diff --git v3.11-rc1.orig/Documentation/sysctl/vm.txt v3.11-rc1/Documentation/sysctl/vm.txt
>index 36ecc26..6e211a1 100644
>--- v3.11-rc1.orig/Documentation/sysctl/vm.txt
>+++ v3.11-rc1/Documentation/sysctl/vm.txt
>@@ -200,17 +200,8 @@ fragmentation index is <= extfrag_threshold. The default value is 500.
>
> hugepages_treat_as_movable
>
>-This parameter is only useful when kernelcore= is specified at boot time to
>-create ZONE_MOVABLE for pages that may be reclaimed or migrated. Huge pages
>-are not movable so are not normally allocated from ZONE_MOVABLE. A non-zero
>-value written to hugepages_treat_as_movable allows huge pages to be allocated
>-from ZONE_MOVABLE.
>-
>-Once enabled, the ZONE_MOVABLE is treated as an area of memory the huge
>-pages pool can easily grow or shrink within. Assuming that applications are
>-not running that mlock() a lot of memory, it is likely the huge pages pool
>-can grow to the size of ZONE_MOVABLE by repeatedly entering the desired value
>-into nr_hugepages and triggering page reclaim.
>+This parameter is obsolete and planned to be removed. The value has no effect
>+on kernel's behavior.
>
> ==============================================================
>
>diff --git v3.11-rc1.orig/mm/hugetlb.c v3.11-rc1/mm/hugetlb.c
>index 9575e8a..aab5aef 100644
>--- v3.11-rc1.orig/mm/hugetlb.c
>+++ v3.11-rc1/mm/hugetlb.c
>@@ -34,7 +34,6 @@
> #include "internal.h"
>
> const unsigned long hugetlb_zero = 0, hugetlb_infinity = ~0UL;
>-static gfp_t htlb_alloc_mask = GFP_HIGHUSER;
> unsigned long hugepages_treat_as_movable;
>
> int hugetlb_max_hstate __read_mostly;
>@@ -546,7 +545,7 @@ static struct page *dequeue_huge_page_vma(struct hstate *h,
> retry_cpuset:
> 	cpuset_mems_cookie = get_mems_allowed();
> 	zonelist = huge_zonelist(vma, address,
>-					htlb_alloc_mask, &mpol, &nodemask);
>+					GFP_HIGHUSER_MOVABLE, &mpol, &nodemask);
> 	/*
> 	 * A child process with MAP_PRIVATE mappings created by their parent
> 	 * have no page reserves. This check ensures that reservations are
>@@ -562,7 +561,7 @@ static struct page *dequeue_huge_page_vma(struct hstate *h,
>
> 	for_each_zone_zonelist_nodemask(zone, z, zonelist,
> 						MAX_NR_ZONES - 1, nodemask) {
>-		if (cpuset_zone_allowed_softwall(zone, htlb_alloc_mask)) {
>+		if (cpuset_zone_allowed_softwall(zone, GFP_HIGHUSER_MOVABLE)) {
> 			page = dequeue_huge_page_node(h, zone_to_nid(zone));
> 			if (page) {
> 				if (!avoid_reserve)
>@@ -719,7 +718,7 @@ static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid)
> 		return NULL;
>
> 	page = alloc_pages_exact_node(nid,
>-		htlb_alloc_mask|__GFP_COMP|__GFP_THISNODE|
>+		GFP_HIGHUSER_MOVABLE|__GFP_COMP|__GFP_THISNODE|
> 						__GFP_REPEAT|__GFP_NOWARN,
> 		huge_page_order(h));
> 	if (page) {
>@@ -944,12 +943,12 @@ static struct page *alloc_buddy_huge_page(struct hstate *h, int nid)
> 	spin_unlock(&hugetlb_lock);
>
> 	if (nid == NUMA_NO_NODE)
>-		page = alloc_pages(htlb_alloc_mask|__GFP_COMP|
>+		page = alloc_pages(GFP_HIGHUSER_MOVABLE|__GFP_COMP|
> 				   __GFP_REPEAT|__GFP_NOWARN,
> 				   huge_page_order(h));
> 	else
> 		page = alloc_pages_exact_node(nid,
>-			htlb_alloc_mask|__GFP_COMP|__GFP_THISNODE|
>+			GFP_HIGHUSER_MOVABLE|__GFP_COMP|__GFP_THISNODE|
> 			__GFP_REPEAT|__GFP_NOWARN, huge_page_order(h));
>
> 	if (page && arch_prepare_hugepage(page)) {
>@@ -2128,11 +2127,7 @@ int hugetlb_treat_movable_handler(struct ctl_table *table, int write,
> 			void __user *buffer,
> 			size_t *length, loff_t *ppos)
> {
>-	proc_dointvec(table, write, buffer, length, ppos);
>-	if (hugepages_treat_as_movable)
>-		htlb_alloc_mask = GFP_HIGHUSER_MOVABLE;
>-	else
>-		htlb_alloc_mask = GFP_HIGHUSER;
>+	WARN_ON_ONCE("This knob is obsolete and has no effect. It is scheduled for removal.\n");
> 	return 0;
> }
>
>-- 
>1.8.3.1
>
>--
>To unsubscribe, send a message with 'unsubscribe linux-mm' in
>the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
>see: http://www.linux-mm.org/ .
>Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]