All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wen Congyang <wency@cn.fujitsu.com>
To: Jiang Liu <jiang.liu@huawei.com>
Cc: Bob Liu <lliubbo@gmail.com>, Tang Chen <tangchen@cn.fujitsu.com>,
	hpa@zytor.com, akpm@linux-foundation.org, rob@landley.net,
	isimatu.yasuaki@jp.fujitsu.com, laijs@cn.fujitsu.com,
	linfeng@cn.fujitsu.com, yinghai@kernel.org,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-doc@vger.kernel.org, m.szyprowski@samsung.com
Subject: Re: [PATCH v2 0/5] Add movablecore_map boot option
Date: Wed, 28 Nov 2012 16:29:01 +0800	[thread overview]
Message-ID: <50B5CB4D.6070402@cn.fujitsu.com> (raw)
In-Reply-To: <50B58E30.9060804@huawei.com>

At 11/28/2012 12:08 PM, Jiang Liu Wrote:
> On 2012-11-28 11:24, Bob Liu wrote:
>> On Tue, Nov 27, 2012 at 8:49 PM, Tang Chen <tangchen@cn.fujitsu.com> wrote:
>>> On 11/27/2012 08:09 PM, Bob Liu wrote:
>>>>
>>>> On Tue, Nov 27, 2012 at 4:29 PM, Tang Chen<tangchen@cn.fujitsu.com>
>>>> wrote:
>>>>>
>>>>> Hi Liu,
>>>>>
>>>>>
>>>>> This feature is used in memory hotplug.
>>>>>
>>>>> In order to implement a whole node hotplug, we need to make sure the
>>>>> node contains no kernel memory, because memory used by kernel could
>>>>> not be migrated. (Since the kernel memory is directly mapped,
>>>>> VA = PA + __PAGE_OFFSET. So the physical address could not be changed.)
>>>>>
>>>>> User could specify all the memory on a node to be movable, so that the
>>>>> node could be hot-removed.
>>>>>
>>>>
>>>> Thank you for your explanation. It's reasonable.
>>>>
>>>> But i think it's a bit duplicated with CMA, i'm not sure but maybe we
>>>> can combine it with CMA which already in mainline?
>>>>
>>> Hi Liu,
>>>
>>> Thanks for your advice. :)
>>>
>>> CMA is Contiguous Memory Allocator, right?  What I'm trying to do is
>>> controlling where is the start of ZONE_MOVABLE of each node. Could
>>> CMA do this job ?
>>
>> cma will not control the start of ZONE_MOVABLE of each node, but it
>> can declare a memory that always movable
>> and all non movable allocate request will not happen on that area.
>>
>> Currently cma use a boot parameter "cma=" to declare a memory size
>> that always movable.
>> I think it might fulfill your requirement if extending the boot
>> parameter with a start address.
>>
>> more info at http://lwn.net/Articles/468044/
>>>
>>> And also, after a short investigation, CMA seems need to base on
>>> memblock. But we need to limit memblock not to allocate memory on
>>> ZONE_MOVABLE. As a result, we need to know the ranges before memblock
>>> could be used. I'm afraid we still need an approach to get the ranges,
>>> such as a boot option, or from static ACPI tables such as SRAT/MPST.
>>>
>>
>> Yes, it's based on memblock and with boot option.
>> In setup_arch32()
>>     dma_contiguous_reserve(0);   => will declare a cma area using
>> memblock_reserve()
>>
>>> I'm don't know much about CMA for now. So if you have any better idea,
>>> please share with us, thanks. :)
>>
>> My idea is reuse cma like below patch(even not compiled) and boot with
>> "cma=size@start_address".
>> I don't know whether it can work and whether suitable for your
>> requirement, if not forgive me for this noises.
>>
>> diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c
>> index 612afcc..564962a 100644
>> --- a/drivers/base/dma-contiguous.c
>> +++ b/drivers/base/dma-contiguous.c
>> @@ -59,11 +59,18 @@ struct cma *dma_contiguous_default_area;
>>   */
>>  static const unsigned long size_bytes = CMA_SIZE_MBYTES * SZ_1M;
>>  static long size_cmdline = -1;
>> +static long cma_start_cmdline = -1;
>>
>>  static int __init early_cma(char *p)
>>  {
>> +       char *oldp;
>>         pr_debug("%s(%s)\n", __func__, p);
>> +       oldp = p;
>>         size_cmdline = memparse(p, &p);
>> +
>> +       if (*p == '@')
>> +               cma_start_cmdline = memparse(p+1, &p);
>> +       printk("cma start:0x%x, size: 0x%x\n", size_cmdline, cma_start_cmdline);
>>         return 0;
>>  }
>>  early_param("cma", early_cma);
>> @@ -127,8 +134,10 @@ void __init dma_contiguous_reserve(phys_addr_t limit)
>>         if (selected_size) {
>>                 pr_debug("%s: reserving %ld MiB for global area\n", __func__,
>>                          selected_size / SZ_1M);
>> -
>> -               dma_declare_contiguous(NULL, selected_size, 0, limit);
>> +               if (cma_size_cmdline != -1)
>> +                       dma_declare_contiguous(NULL, selected_size,
>> cma_start_cmdline, limit);
>> +               else
>> +                       dma_declare_contiguous(NULL, selected_size, 0, limit);
>>         }
>>  };
> Seems a good idea to reserve memory by reusing CMA logic, though need more
> investigation here. One of CMA goal is to ensure pages in CMA are really
> movable, and this patchset tries to achieve the same goal at a first glance.

Hmm, I don't like to reuse CMA. Because CMA is used for DMA. If we reuse it
for movable memory, I think movable zone is enough. And the start address is
not acceptable, because we want to specify the start address for each node.

I think we can implement movablecore_map like that:
1. parse the parameter
2. reserve the memory after efi_reserve_boot_services()
3. release the memory in mem_init

What about this?

Thanks
Wen Congyang
> 
>  
> 
> 
> 


WARNING: multiple messages have this Message-ID (diff)
From: Wen Congyang <wency@cn.fujitsu.com>
To: Jiang Liu <jiang.liu@huawei.com>
Cc: Bob Liu <lliubbo@gmail.com>, Tang Chen <tangchen@cn.fujitsu.com>,
	hpa@zytor.com, akpm@linux-foundation.org, rob@landley.net,
	isimatu.yasuaki@jp.fujitsu.com, laijs@cn.fujitsu.com,
	linfeng@cn.fujitsu.com, yinghai@kernel.org,
	kosaki.motohiro@jp.fujitsu.com, minchan.kim@gmail.com,
	mgorman@suse.de, rientjes@google.com, rusty@rustcorp.com.au,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	linux-doc@vger.kernel.org, m.szyprowski@samsung.com
Subject: Re: [PATCH v2 0/5] Add movablecore_map boot option
Date: Wed, 28 Nov 2012 16:29:01 +0800	[thread overview]
Message-ID: <50B5CB4D.6070402@cn.fujitsu.com> (raw)
In-Reply-To: <50B58E30.9060804@huawei.com>

At 11/28/2012 12:08 PM, Jiang Liu Wrote:
> On 2012-11-28 11:24, Bob Liu wrote:
>> On Tue, Nov 27, 2012 at 8:49 PM, Tang Chen <tangchen@cn.fujitsu.com> wrote:
>>> On 11/27/2012 08:09 PM, Bob Liu wrote:
>>>>
>>>> On Tue, Nov 27, 2012 at 4:29 PM, Tang Chen<tangchen@cn.fujitsu.com>
>>>> wrote:
>>>>>
>>>>> Hi Liu,
>>>>>
>>>>>
>>>>> This feature is used in memory hotplug.
>>>>>
>>>>> In order to implement a whole node hotplug, we need to make sure the
>>>>> node contains no kernel memory, because memory used by kernel could
>>>>> not be migrated. (Since the kernel memory is directly mapped,
>>>>> VA = PA + __PAGE_OFFSET. So the physical address could not be changed.)
>>>>>
>>>>> User could specify all the memory on a node to be movable, so that the
>>>>> node could be hot-removed.
>>>>>
>>>>
>>>> Thank you for your explanation. It's reasonable.
>>>>
>>>> But i think it's a bit duplicated with CMA, i'm not sure but maybe we
>>>> can combine it with CMA which already in mainline?
>>>>
>>> Hi Liu,
>>>
>>> Thanks for your advice. :)
>>>
>>> CMA is Contiguous Memory Allocator, right?  What I'm trying to do is
>>> controlling where is the start of ZONE_MOVABLE of each node. Could
>>> CMA do this job ?
>>
>> cma will not control the start of ZONE_MOVABLE of each node, but it
>> can declare a memory that always movable
>> and all non movable allocate request will not happen on that area.
>>
>> Currently cma use a boot parameter "cma=" to declare a memory size
>> that always movable.
>> I think it might fulfill your requirement if extending the boot
>> parameter with a start address.
>>
>> more info at http://lwn.net/Articles/468044/
>>>
>>> And also, after a short investigation, CMA seems need to base on
>>> memblock. But we need to limit memblock not to allocate memory on
>>> ZONE_MOVABLE. As a result, we need to know the ranges before memblock
>>> could be used. I'm afraid we still need an approach to get the ranges,
>>> such as a boot option, or from static ACPI tables such as SRAT/MPST.
>>>
>>
>> Yes, it's based on memblock and with boot option.
>> In setup_arch32()
>>     dma_contiguous_reserve(0);   => will declare a cma area using
>> memblock_reserve()
>>
>>> I'm don't know much about CMA for now. So if you have any better idea,
>>> please share with us, thanks. :)
>>
>> My idea is reuse cma like below patch(even not compiled) and boot with
>> "cma=size@start_address".
>> I don't know whether it can work and whether suitable for your
>> requirement, if not forgive me for this noises.
>>
>> diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c
>> index 612afcc..564962a 100644
>> --- a/drivers/base/dma-contiguous.c
>> +++ b/drivers/base/dma-contiguous.c
>> @@ -59,11 +59,18 @@ struct cma *dma_contiguous_default_area;
>>   */
>>  static const unsigned long size_bytes = CMA_SIZE_MBYTES * SZ_1M;
>>  static long size_cmdline = -1;
>> +static long cma_start_cmdline = -1;
>>
>>  static int __init early_cma(char *p)
>>  {
>> +       char *oldp;
>>         pr_debug("%s(%s)\n", __func__, p);
>> +       oldp = p;
>>         size_cmdline = memparse(p, &p);
>> +
>> +       if (*p == '@')
>> +               cma_start_cmdline = memparse(p+1, &p);
>> +       printk("cma start:0x%x, size: 0x%x\n", size_cmdline, cma_start_cmdline);
>>         return 0;
>>  }
>>  early_param("cma", early_cma);
>> @@ -127,8 +134,10 @@ void __init dma_contiguous_reserve(phys_addr_t limit)
>>         if (selected_size) {
>>                 pr_debug("%s: reserving %ld MiB for global area\n", __func__,
>>                          selected_size / SZ_1M);
>> -
>> -               dma_declare_contiguous(NULL, selected_size, 0, limit);
>> +               if (cma_size_cmdline != -1)
>> +                       dma_declare_contiguous(NULL, selected_size,
>> cma_start_cmdline, limit);
>> +               else
>> +                       dma_declare_contiguous(NULL, selected_size, 0, limit);
>>         }
>>  };
> Seems a good idea to reserve memory by reusing CMA logic, though need more
> investigation here. One of CMA goal is to ensure pages in CMA are really
> movable, and this patchset tries to achieve the same goal at a first glance.

Hmm, I don't like to reuse CMA. Because CMA is used for DMA. If we reuse it
for movable memory, I think movable zone is enough. And the start address is
not acceptable, because we want to specify the start address for each node.

I think we can implement movablecore_map like that:
1. parse the parameter
2. reserve the memory after efi_reserve_boot_services()
3. release the memory in mem_init

What about this?

Thanks
Wen Congyang
> 
>  
> 
> 
> 

--
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-11-28  8:22 UTC|newest]

Thread overview: 170+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-23 10:44 [PATCH v2 0/5] Add movablecore_map boot option Tang Chen
2012-11-23 10:44 ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 1/5] x86: get pg_data_t's memory from other node Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-24  1:19   ` Jiang Liu
2012-11-24  1:19     ` Jiang Liu
2012-11-26  1:19     ` Tang Chen
2012-11-26  1:19       ` Tang Chen
2012-12-02 15:11   ` Jiang Liu
2012-12-02 15:11     ` Jiang Liu
2012-11-23 10:44 ` [PATCH v2 2/5] page_alloc: add movable_memmap kernel parameter Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 3/5] page_alloc: Introduce zone_movable_limit[] to keep movable limit for nodes Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-12-05 15:46   ` Jiang Liu
2012-12-05 15:46     ` Jiang Liu
2012-12-06  1:20     ` Tang Chen
2012-12-06  1:20       ` Tang Chen
2012-11-23 10:44 ` [PATCH v2 4/5] page_alloc: Make movablecore_map has higher priority Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-12-05 15:43   ` Jiang Liu
2012-12-05 15:43     ` Jiang Liu
2012-12-06  1:26     ` Tang Chen
2012-12-06  1:26       ` Tang Chen
2012-12-06  2:26       ` Jiang Liu
2012-12-06  2:26         ` Jiang Liu
2012-12-06  2:51         ` Jianguo Wu
2012-12-06  2:51           ` Jianguo Wu
2012-12-06  2:57           ` Tang Chen
2012-12-06  2:57             ` Tang Chen
2012-12-09  8:10         ` Tang Chen
2012-12-09  8:10           ` Tang Chen
2012-12-10  2:15           ` Jiang Liu
2012-12-10  2:15             ` Jiang Liu
2012-11-23 10:44 ` [PATCH v2 5/5] page_alloc: Bootmem limit with movablecore_map Tang Chen
2012-11-23 10:44   ` Tang Chen
2012-11-26 12:22   ` wujianguo
2012-11-26 12:22     ` wujianguo
2012-11-26 12:53     ` Tang Chen
2012-11-26 12:53       ` Tang Chen
2012-11-26 12:40   ` wujianguo
2012-11-26 12:40     ` wujianguo
2012-11-26 13:15     ` Tang Chen
2012-11-26 13:15       ` Tang Chen
2012-11-26 15:48       ` H. Peter Anvin
2012-11-26 15:48         ` H. Peter Anvin
2012-11-27  0:58         ` Jianguo Wu
2012-11-27  0:58           ` Jianguo Wu
2012-11-27  3:19           ` Wen Congyang
2012-11-27  3:19             ` Wen Congyang
2012-11-27  3:22             ` Jianguo Wu
2012-11-27  3:22               ` Jianguo Wu
2012-11-27  3:34               ` Wen Congyang
2012-11-27  3:34                 ` Wen Congyang
2012-11-27  1:12         ` Jiang Liu
2012-11-27  1:12           ` Jiang Liu
2012-11-27  1:20           ` H. Peter Anvin
2012-11-27  1:20             ` H. Peter Anvin
2012-11-27  3:15         ` Wen Congyang
2012-11-27  3:15           ` Wen Congyang
2012-11-27  5:31           ` H. Peter Anvin
2012-11-27  5:31             ` H. Peter Anvin
2012-12-06 17:28             ` Jiang Liu
2012-12-06 17:28               ` Jiang Liu
2012-12-06 17:41               ` H. Peter Anvin
2012-12-06 17:41                 ` H. Peter Anvin
2012-12-07  0:18                 ` Jiang Liu
2012-12-07  0:18                   ` Jiang Liu
2012-12-19  9:17     ` Tang Chen
2012-12-19  9:17       ` Tang Chen
2012-11-27  3:10 ` [PATCH v2 0/5] Add movablecore_map boot option wujianguo
2012-11-27  3:10   ` wujianguo
2012-11-27  5:43   ` Tang Chen
2012-11-27  5:43     ` Tang Chen
2012-11-27  6:20     ` H. Peter Anvin
2012-11-27  6:20       ` H. Peter Anvin
2012-11-27  6:47     ` Jianguo Wu
2012-11-27  6:47       ` Jianguo Wu
2012-11-28  3:47   ` Tang Chen
2012-11-28  3:47     ` Tang Chen
2012-11-28  4:01     ` Jiang Liu
2012-11-28  4:01       ` Jiang Liu
2012-11-28  5:21       ` Wen Congyang
2012-11-28  5:21         ` Wen Congyang
2012-11-28  5:17         ` Jiang Liu
2012-11-28  5:17           ` Jiang Liu
2012-11-28  4:53     ` Jianguo Wu
2012-11-28  4:53       ` Jianguo Wu
2012-11-27  8:00 ` Bob Liu
2012-11-27  8:00   ` Bob Liu
2012-11-27  8:29   ` Tang Chen
2012-11-27  8:29     ` Tang Chen
2012-11-27  8:49     ` H. Peter Anvin
2012-11-27  8:49       ` H. Peter Anvin
2012-11-27  9:47       ` Wen Congyang
2012-11-27  9:47         ` Wen Congyang
2012-11-27  9:53         ` H. Peter Anvin
2012-11-27  9:53           ` H. Peter Anvin
2012-11-27  9:59       ` Yasuaki Ishimatsu
2012-11-27  9:59         ` Yasuaki Ishimatsu
2012-11-27 12:09     ` Bob Liu
2012-11-27 12:09       ` Bob Liu
2012-11-27 12:49       ` Tang Chen
2012-11-27 12:49         ` Tang Chen
2012-11-28  3:24         ` Bob Liu
2012-11-28  3:24           ` Bob Liu
2012-11-28  4:08           ` Jiang Liu
2012-11-28  4:08             ` Jiang Liu
2012-11-28  6:16             ` Tang Chen
2012-11-28  6:16               ` Tang Chen
2012-11-28  7:03               ` Jiang Liu
2012-11-28  7:03                 ` Jiang Liu
2012-11-28  8:29             ` Wen Congyang [this message]
2012-11-28  8:29               ` Wen Congyang
2012-11-28  8:28               ` Jiang Liu
2012-11-28  8:28                 ` Jiang Liu
2012-11-28  8:38                 ` Wen Congyang
2012-11-28  8:38                   ` Wen Congyang
2012-11-29  0:43               ` Jaegeuk Hanse
2012-11-29  0:43                 ` Jaegeuk Hanse
2012-11-29  1:24                 ` Tang Chen
2012-11-29  1:24                   ` Tang Chen
2012-11-30  9:20             ` Lai Jiangshan
2012-11-30  9:20               ` Lai Jiangshan
2012-11-28  8:47 ` Jiang Liu
2012-11-28  8:47   ` Jiang Liu
2012-11-28 21:34   ` Luck, Tony
2012-11-28 21:34     ` Luck, Tony
2012-11-28 21:38     ` H. Peter Anvin
2012-11-28 21:38       ` H. Peter Anvin
2012-11-29 11:00       ` Mel Gorman
2012-11-29 11:00         ` Mel Gorman
2012-11-29 16:07         ` H. Peter Anvin
2012-11-29 16:07           ` H. Peter Anvin
2012-11-29 22:41           ` Luck, Tony
2012-11-29 22:41             ` Luck, Tony
2012-11-29 22:45             ` H. Peter Anvin
2012-11-29 22:45               ` H. Peter Anvin
2012-11-30  2:56         ` Jiang Liu
2012-11-30  2:56           ` Jiang Liu
2012-11-30  3:15           ` Yasuaki Ishimatsu
2012-11-30  3:15             ` Yasuaki Ishimatsu
2012-11-30 15:36             ` Jiang Liu
2012-11-30 15:36               ` Jiang Liu
2012-11-30  2:58         ` Luck, Tony
2012-11-30  2:58           ` Luck, Tony
2012-11-30  3:28           ` H. Peter Anvin
2012-11-30  3:28             ` H. Peter Anvin
2012-11-30 10:19           ` Glauber Costa
2012-11-30 10:19             ` Glauber Costa
2012-11-30 10:52           ` Mel Gorman
2012-11-30 10:52             ` Mel Gorman
2012-11-29 10:38     ` Yasuaki Ishimatsu
2012-11-29 10:38       ` Yasuaki Ishimatsu
2012-11-29 11:05       ` Mel Gorman
2012-11-29 11:05         ` Mel Gorman
2012-11-29 15:47       ` Jiang Liu
2012-11-29 15:47         ` Jiang Liu
2012-11-29 15:53       ` Jiang Liu
2012-11-29 15:53         ` Jiang Liu
2012-11-29  1:42   ` Jaegeuk Hanse
2012-11-29  1:42     ` Jaegeuk Hanse
2012-11-29  2:25     ` Jiang Liu
2012-11-29  2:25       ` Jiang Liu
2012-11-29  2:49       ` Wanpeng Li
2012-11-29  2:49       ` Wanpeng Li
2012-11-29  2:59         ` Jiang Liu
2012-11-29  2:59           ` Jiang Liu
2012-11-30 22:27       ` Toshi Kani
2012-11-30 22:27         ` Toshi Kani

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=50B5CB4D.6070402@cn.fujitsu.com \
    --to=wency@cn.fujitsu.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=isimatu.yasuaki@jp.fujitsu.com \
    --cc=jiang.liu@huawei.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linfeng@cn.fujitsu.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lliubbo@gmail.com \
    --cc=m.szyprowski@samsung.com \
    --cc=mgorman@suse.de \
    --cc=minchan.kim@gmail.com \
    --cc=rientjes@google.com \
    --cc=rob@landley.net \
    --cc=rusty@rustcorp.com.au \
    --cc=tangchen@cn.fujitsu.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.