All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Jiang Liu <jiang.liu@huawei.com>
Cc: Mel Gorman <mgorman@suse.de>, Tony Luck <tony.luck@intel.com>,
	Yinghai Lu <yinghai@kernel.org>, Xishi Qiu <qiuxishi@huawei.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	David Rientjes <rientjes@google.com>,
	Minchan Kim <minchan@kernel.org>,
	Keping Chen <chenkeping@huawei.com>, <linux-mm@kvack.org>,
	<stable@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	Jiang Liu <liuj97@gmail.com>
Subject: Re: [PATCH] mm: setup pageblock_order before it's used by sparse
Date: Tue, 3 Jul 2012 14:07:05 -0700	[thread overview]
Message-ID: <20120703140705.af23d4d3.akpm@linux-foundation.org> (raw)
In-Reply-To: <1341047274-5616-1-git-send-email-jiang.liu@huawei.com>

On Sat, 30 Jun 2012 17:07:54 +0800
Jiang Liu <jiang.liu@huawei.com> wrote:

> From: Xishi Qiu <qiuxishi@huawei.com>
> 
> On architectures with CONFIG_HUGETLB_PAGE_SIZE_VARIABLE set, such as Itanium,
> pageblock_order is a variable with default value of 0. It's set to the right
> value by set_pageblock_order() in function free_area_init_core().
> 
> But pageblock_order may be used by sparse_init() before free_area_init_core()
> is called along path:
> sparse_init()
>     ->sparse_early_usemaps_alloc_node()
> 	->usemap_size()
> 	    ->SECTION_BLOCKFLAGS_BITS
> 		->((1UL << (PFN_SECTION_SHIFT - pageblock_order)) *
> NR_PAGEBLOCK_BITS)
> 
> The uninitialized pageblock_size will cause memory wasting because usemap_size()
> returns a much bigger value then it's really needed.
> 
> For example, on an Itanium platform,
> sparse_init() pageblock_order=0 usemap_size=24576
> free_area_init_core() before pageblock_order=0, usemap_size=24576
> free_area_init_core() after pageblock_order=12, usemap_size=8
> 
> That means 24K memory has been wasted for each section, so fix it by calling
> set_pageblock_order() from sparse_init().
> 
> ...
>
> --- a/mm/sparse.c
> +++ b/mm/sparse.c
> @@ -485,6 +485,9 @@ void __init sparse_init(void)
>  	struct page **map_map;
>  #endif
>  
> +	/* Setup pageblock_order for HUGETLB_PAGE_SIZE_VARIABLE */
> +	set_pageblock_order();
> +
>  	/*
>  	 * map is using big page (aka 2M in x86 64 bit)
>  	 * usemap is less one page (aka 24 bytes)

It's a bit ugly calling set_pageblock_order() from both sparse_init()
and from free_area_init_core().  Can we find a single place from which
to call it?  It looks like here:

--- a/init/main.c~a
+++ a/init/main.c
@@ -514,6 +514,7 @@ asmlinkage void __init start_kernel(void
 		   __stop___param - __start___param,
 		   -1, -1, &unknown_bootoption);
 
+	set_pageblock_order();
 	jump_label_init();
 
 	/*

would do the trick?

(free_area_init_core is __paging_init and set_pageblock_order() is
__init.  I'm too lazy to work out if that's wrong)

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Jiang Liu <jiang.liu@huawei.com>
Cc: Mel Gorman <mgorman@suse.de>, Tony Luck <tony.luck@intel.com>,
	Yinghai Lu <yinghai@kernel.org>, Xishi Qiu <qiuxishi@huawei.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	David Rientjes <rientjes@google.com>,
	Minchan Kim <minchan@kernel.org>,
	Keping Chen <chenkeping@huawei.com>,
	linux-mm@kvack.org, stable@vger.kernel.org,
	linux-kernel@vger.kernel.org, Jiang Liu <liuj97@gmail.com>
Subject: Re: [PATCH] mm: setup pageblock_order before it's used by sparse
Date: Tue, 3 Jul 2012 14:07:05 -0700	[thread overview]
Message-ID: <20120703140705.af23d4d3.akpm@linux-foundation.org> (raw)
In-Reply-To: <1341047274-5616-1-git-send-email-jiang.liu@huawei.com>

On Sat, 30 Jun 2012 17:07:54 +0800
Jiang Liu <jiang.liu@huawei.com> wrote:

> From: Xishi Qiu <qiuxishi@huawei.com>
> 
> On architectures with CONFIG_HUGETLB_PAGE_SIZE_VARIABLE set, such as Itanium,
> pageblock_order is a variable with default value of 0. It's set to the right
> value by set_pageblock_order() in function free_area_init_core().
> 
> But pageblock_order may be used by sparse_init() before free_area_init_core()
> is called along path:
> sparse_init()
>     ->sparse_early_usemaps_alloc_node()
> 	->usemap_size()
> 	    ->SECTION_BLOCKFLAGS_BITS
> 		->((1UL << (PFN_SECTION_SHIFT - pageblock_order)) *
> NR_PAGEBLOCK_BITS)
> 
> The uninitialized pageblock_size will cause memory wasting because usemap_size()
> returns a much bigger value then it's really needed.
> 
> For example, on an Itanium platform,
> sparse_init() pageblock_order=0 usemap_size=24576
> free_area_init_core() before pageblock_order=0, usemap_size=24576
> free_area_init_core() after pageblock_order=12, usemap_size=8
> 
> That means 24K memory has been wasted for each section, so fix it by calling
> set_pageblock_order() from sparse_init().
> 
> ...
>
> --- a/mm/sparse.c
> +++ b/mm/sparse.c
> @@ -485,6 +485,9 @@ void __init sparse_init(void)
>  	struct page **map_map;
>  #endif
>  
> +	/* Setup pageblock_order for HUGETLB_PAGE_SIZE_VARIABLE */
> +	set_pageblock_order();
> +
>  	/*
>  	 * map is using big page (aka 2M in x86 64 bit)
>  	 * usemap is less one page (aka 24 bytes)

It's a bit ugly calling set_pageblock_order() from both sparse_init()
and from free_area_init_core().  Can we find a single place from which
to call it?  It looks like here:

--- a/init/main.c~a
+++ a/init/main.c
@@ -514,6 +514,7 @@ asmlinkage void __init start_kernel(void
 		   __stop___param - __start___param,
 		   -1, -1, &unknown_bootoption);
 
+	set_pageblock_order();
 	jump_label_init();
 
 	/*

would do the trick?

(free_area_init_core is __paging_init and set_pageblock_order() is
__init.  I'm too lazy to work out if that's wrong)

--
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>

  parent reply	other threads:[~2012-07-03 21:07 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-30  9:07 [PATCH] mm: setup pageblock_order before it's used by sparse Jiang Liu
2012-06-30  9:07 ` Jiang Liu
2012-06-30 20:15 ` Yinghai Lu
2012-07-02  2:01   ` Jiang Liu
2012-07-02  2:01     ` Jiang Liu
2012-07-02  2:01     ` Jiang Liu
2012-07-02 20:43     ` Yinghai Lu
2012-07-03  2:54       ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  2:54         ` Jiang Liu
2012-07-03  3:25         ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:25           ` Yinghai Lu
2012-07-03  3:29           ` Jiang Liu
2012-07-03  3:29             ` Jiang Liu
2012-07-03  3:29             ` Jiang Liu
2012-07-18  7:17             ` Benjamin Herrenschmidt
2012-07-18  7:17               ` Benjamin Herrenschmidt
2012-07-18  7:17               ` Benjamin Herrenschmidt
2012-07-18  7:15           ` Benjamin Herrenschmidt
2012-07-18  7:15             ` Benjamin Herrenschmidt
2012-07-18  7:15             ` Benjamin Herrenschmidt
2012-06-30 20:46 ` Greg KH
2012-06-30 20:46   ` Greg KH
2012-07-02 12:41 ` Mel Gorman
2012-07-02 12:41   ` Mel Gorman
2012-07-03 21:07 ` Andrew Morton [this message]
2012-07-03 21:07   ` Andrew Morton
2012-07-04  1:40   ` Jiang Liu
2012-07-04  1:40     ` Jiang Liu
2012-07-04  9:20     ` Mel Gorman
2012-07-04  9:20       ` Mel Gorman
2012-07-06  1:00       ` Yinghai Lu
2012-07-06  1:00         ` Yinghai Lu
2012-07-06  1:24         ` Benjamin Herrenschmidt
2012-07-06  1:24           ` Benjamin Herrenschmidt
2012-07-17  9:31           ` Jiang Liu
2012-07-17  9:31             ` Jiang Liu
2012-07-18  7:01             ` Benjamin Herrenschmidt
2012-07-18  7:01               ` Benjamin Herrenschmidt

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=20120703140705.af23d4d3.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=chenkeping@huawei.com \
    --cc=jiang.liu@huawei.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=liuj97@gmail.com \
    --cc=mgorman@suse.de \
    --cc=minchan@kernel.org \
    --cc=qiuxishi@huawei.com \
    --cc=rientjes@google.com \
    --cc=stable@vger.kernel.org \
    --cc=tony.luck@intel.com \
    --cc=yinghai@kernel.org \
    /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.