Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-25 Thread Toshi Kani
On Fri, 2014-08-22 at 15:16 -0700, Andrew Morton wrote:
> On Mon, 18 Aug 2014 11:25:36 +0800 Zhang Zhen  
> wrote:
> 
> > On 2014/8/16 5:37, Toshi Kani wrote:
> > > On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:
> > >> Currently memory-hotplug has two limits:
> > >> 1. If the memory block is in ZONE_NORMAL, you can change it to
> > >> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
> > >> 2. If the memory block is in ZONE_MOVABLE, you can change it to
> > >> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
> > >>
> > >> With this patch, we can easy to know a memory block can be onlined to
> > >> which zone, and don't need to know the above two limits.
> > >>
> > >> Updated the related Documentation.
> > >>
> > >> Change v1 -> v2:
> > >> - optimize the implementation following Dave Hansen's suggestion
> > >>
> > >> Signed-off-by: Zhang Zhen 
> > >> ---
> > >>  Documentation/ABI/testing/sysfs-devices-memory |  8 
> > >>  Documentation/memory-hotplug.txt   |  4 +-
> > >>  drivers/base/memory.c  | 62 
> > >> ++
> > >>  include/linux/memory_hotplug.h |  1 +
> > >>  mm/memory_hotplug.c|  2 +-
> > >>  5 files changed, 75 insertions(+), 2 deletions(-)
> > >>
> > >> diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
> > >> b/Documentation/ABI/testing/sysfs-devices-memory
> > >> index 7405de2..2b2a1d7 100644
> > >> --- a/Documentation/ABI/testing/sysfs-devices-memory
> > >> +++ b/Documentation/ABI/testing/sysfs-devices-memory
> > >> @@ -61,6 +61,14 @@ Users:hotplug memory remove tools
> > >>  
> > >> http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils
> > >>
> > >>
> > >> +What:   /sys/devices/system/memory/memoryX/zones_online_to
> > > 
> > > I think this name is a bit confusing.  How about "valid_online_types"?
> > > 
> > Thanks for your suggestion.
> > 
> > This patch has been added to -mm tree.
> > If most people think so, i would like to modify the interface name.
> > If not, let's leave it as it is.
> 
> Yes, the name could be better.  Do we actually need "online" in there? 
> How about "valid_zones"?

I suggested using "online" because a user specifies a zone type during
an online operation as follows.

  $ echo online_movable > /sys/devices/system/memory/memoryXXX/state

I also like "valid_zones" and it well represents what it is (and the
name is shorter :-).  I am fine with this name as well.

Thanks,
-Toshi

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-24 Thread Zhang Zhen
On 2014/8/23 6:16, Andrew Morton wrote:
> On Mon, 18 Aug 2014 11:25:36 +0800 Zhang Zhen  
> wrote:
> 
>> On 2014/8/16 5:37, Toshi Kani wrote:
>>> On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:
 Currently memory-hotplug has two limits:
 1. If the memory block is in ZONE_NORMAL, you can change it to
 ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
 2. If the memory block is in ZONE_MOVABLE, you can change it to
 ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.

 With this patch, we can easy to know a memory block can be onlined to
 which zone, and don't need to know the above two limits.

 Updated the related Documentation.

 Change v1 -> v2:
 - optimize the implementation following Dave Hansen's suggestion

 Signed-off-by: Zhang Zhen 
 ---
  Documentation/ABI/testing/sysfs-devices-memory |  8 
  Documentation/memory-hotplug.txt   |  4 +-
  drivers/base/memory.c  | 62 
 ++
  include/linux/memory_hotplug.h |  1 +
  mm/memory_hotplug.c|  2 +-
  5 files changed, 75 insertions(+), 2 deletions(-)

 diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
 b/Documentation/ABI/testing/sysfs-devices-memory
 index 7405de2..2b2a1d7 100644
 --- a/Documentation/ABI/testing/sysfs-devices-memory
 +++ b/Documentation/ABI/testing/sysfs-devices-memory
 @@ -61,6 +61,14 @@ Users:  hotplug memory remove tools

 http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils


 +What:   /sys/devices/system/memory/memoryX/zones_online_to
>>>
>>> I think this name is a bit confusing.  How about "valid_online_types"?
>>>
>> Thanks for your suggestion.
>>
>> This patch has been added to -mm tree.
>> If most people think so, i would like to modify the interface name.
>> If not, let's leave it as it is.
> 
> Yes, the name could be better.  Do we actually need "online" in there? 
> How about "valid_zones"?

Ok, i will change it to valid_zones.
> 
> Also, it's not really clear to me why we need this sysfs file at all. 
> Do people really read sysfs files, make onlining decisions and manually
> type in commands?  Or is this stuff all automated?  If the latter then
> the script can take care of all this?  For example, attempt to online
> the memory into the desired zone and report failure if that didn't
> succeed?

Just like Dave Hansen says, the scripts should be changed when we add a new
zone type. And ZONE_MOVABLE may be missed by the scripts writer.
> 
> IOW, please update the changelog to show
> 
> a) example output from
>/sys/devices/system/memory/memoryX/whatever-we-call-it and
> 
> b) example use-cases which help reviewers understand why this
>feature will be valuable to users.

Sorry, this patch has been added to -next tree. I can't modify the changelog.
> 
> Also, please do address the error which Yasuaki Ishimatsu identified.
> 
Yeah, i have been waiting for 
http://ozlabs.org/~akpm/mmots/broken-out/memory-hotplug-add-sysfs-zones_online_to-attribute-fix-2.patch
added to -mm tree.
So i can send a patch based on -mm tree to address the error which Yasuaki 
Ishimatsu identified.
Otherwise, conflicts may occur.

Thanks!
> 
> .
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-22 Thread Dave Hansen
On 08/22/2014 03:16 PM, Andrew Morton wrote:
> Also, it's not really clear to me why we need this sysfs file at all. 
> Do people really read sysfs files, make onlining decisions and manually
> type in commands?  Or is this stuff all automated?  If the latter then
> the script can take care of all this?  For example, attempt to online
> the memory into the desired zone and report failure if that didn't
> succeed?

I guess we can just iterate over all possible zone types from userspace
until we find one.  Seems a bit hokey, but it would work at least until
we add a new zone type and we have to teach the scripts about the new
type.  But that's a pretty rare event I guess.  Let's hope the script
writers get this right, and don't make omissions like ZONE_MOVABLE
because it's not that common in practice.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-22 Thread Andrew Morton
On Mon, 18 Aug 2014 11:25:36 +0800 Zhang Zhen  
wrote:

> On 2014/8/16 5:37, Toshi Kani wrote:
> > On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:
> >> Currently memory-hotplug has two limits:
> >> 1. If the memory block is in ZONE_NORMAL, you can change it to
> >> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
> >> 2. If the memory block is in ZONE_MOVABLE, you can change it to
> >> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
> >>
> >> With this patch, we can easy to know a memory block can be onlined to
> >> which zone, and don't need to know the above two limits.
> >>
> >> Updated the related Documentation.
> >>
> >> Change v1 -> v2:
> >> - optimize the implementation following Dave Hansen's suggestion
> >>
> >> Signed-off-by: Zhang Zhen 
> >> ---
> >>  Documentation/ABI/testing/sysfs-devices-memory |  8 
> >>  Documentation/memory-hotplug.txt   |  4 +-
> >>  drivers/base/memory.c  | 62 
> >> ++
> >>  include/linux/memory_hotplug.h |  1 +
> >>  mm/memory_hotplug.c|  2 +-
> >>  5 files changed, 75 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
> >> b/Documentation/ABI/testing/sysfs-devices-memory
> >> index 7405de2..2b2a1d7 100644
> >> --- a/Documentation/ABI/testing/sysfs-devices-memory
> >> +++ b/Documentation/ABI/testing/sysfs-devices-memory
> >> @@ -61,6 +61,14 @@ Users:  hotplug memory remove tools
> >>
> >> http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils
> >>
> >>
> >> +What:   /sys/devices/system/memory/memoryX/zones_online_to
> > 
> > I think this name is a bit confusing.  How about "valid_online_types"?
> > 
> Thanks for your suggestion.
> 
> This patch has been added to -mm tree.
> If most people think so, i would like to modify the interface name.
> If not, let's leave it as it is.

Yes, the name could be better.  Do we actually need "online" in there? 
How about "valid_zones"?

Also, it's not really clear to me why we need this sysfs file at all. 
Do people really read sysfs files, make onlining decisions and manually
type in commands?  Or is this stuff all automated?  If the latter then
the script can take care of all this?  For example, attempt to online
the memory into the desired zone and report failure if that didn't
succeed?

IOW, please update the changelog to show

a) example output from
   /sys/devices/system/memory/memoryX/whatever-we-call-it and

b) example use-cases which help reviewers understand why this
   feature will be valuable to users.

Also, please do address the error which Yasuaki Ishimatsu identified.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-19 Thread Yasuaki Ishimatsu

(2014/08/19 16:35), Zhang Zhen wrote:

On 2014/8/18 14:11, Yasuaki Ishimatsu wrote:

(2014/08/13 13:10), Zhang Zhen wrote:

Currently memory-hotplug has two limits:
1. If the memory block is in ZONE_NORMAL, you can change it to
ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
2. If the memory block is in ZONE_MOVABLE, you can change it to
ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.

With this patch, we can easy to know a memory block can be onlined to
which zone, and don't need to know the above two limits.

Updated the related Documentation.

Change v1 -> v2:
- optimize the implementation following Dave Hansen's suggestion

Signed-off-by: Zhang Zhen 
---
   Documentation/ABI/testing/sysfs-devices-memory |  8 
   Documentation/memory-hotplug.txt   |  4 +-
   drivers/base/memory.c  | 62 
++
   include/linux/memory_hotplug.h |  1 +
   mm/memory_hotplug.c|  2 +-
   5 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
b/Documentation/ABI/testing/sysfs-devices-memory
index 7405de2..2b2a1d7 100644
--- a/Documentation/ABI/testing/sysfs-devices-memory
+++ b/Documentation/ABI/testing/sysfs-devices-memory
@@ -61,6 +61,14 @@ Users:hotplug memory remove tools
   http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils


+What:   /sys/devices/system/memory/memoryX/zones_online_to
+Date:   July 2014
+Contact:Zhang Zhen 
+Description:
+The file /sys/devices/system/memory/memoryX/zones_online_to
+is read-only and is designed to show which zone this memory block can
+be onlined to.
+
   What:/sys/devices/system/memoryX/nodeY
   Date:October 2009
   Contact:Linux Memory Management list 
diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt
index 45134dc..5b34e33 100644
--- a/Documentation/memory-hotplug.txt
+++ b/Documentation/memory-hotplug.txt
@@ -155,6 +155,7 @@ Under each memory block, you can see 4 files:
   /sys/devices/system/memory/memoryXXX/phys_device
   /sys/devices/system/memory/memoryXXX/state
   /sys/devices/system/memory/memoryXXX/removable
+/sys/devices/system/memory/memoryXXX/zones_online_to

   'phys_index'  : read-only and contains memory block id, same as XXX.
   'state'   : read-write
@@ -170,6 +171,8 @@ Under each memory block, you can see 4 files:
   block is removable and a value of 0 indicates that
   it is not removable. A memory block is removable only if
   every section in the block is removable.
+'zones_online_to' : read-only: designed to show which zone this memory block
+can be onlined to.

   NOTE:
 These directories/files appear after physical memory hotplug phase.
@@ -408,7 +411,6 @@ node if necessary.
 - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
   sysctl or new control file.
 - showing memory block and physical device relationship.
-  - showing memory block is under ZONE_MOVABLE or not
 - test and make it better memory offlining.
 - support HugeTLB page migration and offlining.
 - memmap removing at memory offline.
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index a2e13e2..b5d693f 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -373,10 +373,71 @@ static ssize_t show_phys_device(struct device *dev,
   return sprintf(buf, "%d\n", mem->phys_device);
   }

+static int __zones_online_to(unsigned long end_pfn,
+struct page *first_page, unsigned long nr_pages)
+{
+struct zone *zone_next;
+



+/*The mem block is the last block of memory.*/
+if (!pfn_valid(end_pfn + 1))
+return 1;


The check is not enough if memory has hole as follows:

PFN   0x00  0xd0  0xe0  0xf0
 +-+-+-+
zone type   |   Normal| hole|   Normal|
 +-+-+-+

In this case, 0xd1 is invalid pfn. But __zones_online_to should return 0
since 0xe0-0xf0 is Normal zone.

Thanks,
Yasuaki Ishimatsu


You are right, it is not enough.




Here we should make a check as follows.
if ((end_pfn + 1) > zone_end_pfn(page_zone(first_page)))
return 1;
I will send a patch to fix it.


It's looks good to me.

Thanks,
Yasuaki Ishimatsu



Thanks !



+zone_next = page_zone(first_page + nr_pages);
+if (zone_idx(zone_next) == ZONE_MOVABLE)
+return 1;
+return 0;
+}
+
+static ssize_t show_zones_online_to(struct device *dev,
+struct device_attribute *attr, char *buf)
+{
+struct memory_block *mem = to_memory_block(dev);
+unsigned long start_pfn, end_pfn;
+unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
+struct

Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-19 Thread Zhang Zhen
On 2014/8/18 14:11, Yasuaki Ishimatsu wrote:
> (2014/08/13 13:10), Zhang Zhen wrote:
>> Currently memory-hotplug has two limits:
>> 1. If the memory block is in ZONE_NORMAL, you can change it to
>> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
>> 2. If the memory block is in ZONE_MOVABLE, you can change it to
>> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
>>
>> With this patch, we can easy to know a memory block can be onlined to
>> which zone, and don't need to know the above two limits.
>>
>> Updated the related Documentation.
>>
>> Change v1 -> v2:
>> - optimize the implementation following Dave Hansen's suggestion
>>
>> Signed-off-by: Zhang Zhen 
>> ---
>>   Documentation/ABI/testing/sysfs-devices-memory |  8 
>>   Documentation/memory-hotplug.txt   |  4 +-
>>   drivers/base/memory.c  | 62 
>> ++
>>   include/linux/memory_hotplug.h |  1 +
>>   mm/memory_hotplug.c|  2 +-
>>   5 files changed, 75 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
>> b/Documentation/ABI/testing/sysfs-devices-memory
>> index 7405de2..2b2a1d7 100644
>> --- a/Documentation/ABI/testing/sysfs-devices-memory
>> +++ b/Documentation/ABI/testing/sysfs-devices-memory
>> @@ -61,6 +61,14 @@ Users:hotplug memory remove tools
>>   
>> http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils
>>
>>
>> +What:   /sys/devices/system/memory/memoryX/zones_online_to
>> +Date:   July 2014
>> +Contact:Zhang Zhen 
>> +Description:
>> +The file /sys/devices/system/memory/memoryX/zones_online_to
>> +is read-only and is designed to show which zone this memory block 
>> can
>> +be onlined to.
>> +
>>   What:/sys/devices/system/memoryX/nodeY
>>   Date:October 2009
>>   Contact:Linux Memory Management list 
>> diff --git a/Documentation/memory-hotplug.txt 
>> b/Documentation/memory-hotplug.txt
>> index 45134dc..5b34e33 100644
>> --- a/Documentation/memory-hotplug.txt
>> +++ b/Documentation/memory-hotplug.txt
>> @@ -155,6 +155,7 @@ Under each memory block, you can see 4 files:
>>   /sys/devices/system/memory/memoryXXX/phys_device
>>   /sys/devices/system/memory/memoryXXX/state
>>   /sys/devices/system/memory/memoryXXX/removable
>> +/sys/devices/system/memory/memoryXXX/zones_online_to
>>
>>   'phys_index'  : read-only and contains memory block id, same as XXX.
>>   'state'   : read-write
>> @@ -170,6 +171,8 @@ Under each memory block, you can see 4 files:
>>   block is removable and a value of 0 indicates that
>>   it is not removable. A memory block is removable only 
>> if
>>   every section in the block is removable.
>> +'zones_online_to' : read-only: designed to show which zone this memory block
>> +can be onlined to.
>>
>>   NOTE:
>> These directories/files appear after physical memory hotplug phase.
>> @@ -408,7 +411,6 @@ node if necessary.
>> - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
>>   sysctl or new control file.
>> - showing memory block and physical device relationship.
>> -  - showing memory block is under ZONE_MOVABLE or not
>> - test and make it better memory offlining.
>> - support HugeTLB page migration and offlining.
>> - memmap removing at memory offline.
>> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
>> index a2e13e2..b5d693f 100644
>> --- a/drivers/base/memory.c
>> +++ b/drivers/base/memory.c
>> @@ -373,10 +373,71 @@ static ssize_t show_phys_device(struct device *dev,
>>   return sprintf(buf, "%d\n", mem->phys_device);
>>   }
>>
>> +static int __zones_online_to(unsigned long end_pfn,
>> +struct page *first_page, unsigned long nr_pages)
>> +{
>> +struct zone *zone_next;
>> +
> 
>> +/*The mem block is the last block of memory.*/
>> +if (!pfn_valid(end_pfn + 1))
>> +return 1;
> 
> The check is not enough if memory has hole as follows:
> 
> PFN   0x00  0xd0  0xe0  0xf0
> +-+-+-+
> zone type   |   Normal| hole|   Normal|
> +-+-+-+
> 
> In this case, 0xd1 is invalid pfn. But __zones_online_to should return 0
> since 0xe0-0xf0 is Normal zone.
> 
> Thanks,
> Yasuaki Ishimatsu
> 
You are right, it is not enough.

Here we should make a check as follows.
if ((end_pfn + 1) > zone_end_pfn(page_zone(first_page)))
return 1;
I will send a patch to fix it.

Thanks !
> 
>> +zone_next = page_zone(first_page + nr_pages);
>> +if (zone_idx(zone_next) == ZONE_MOVABLE)
>> +return 1;
>> +return 0;
>> +}
>> +
>> +static ssize_t show_zones_online_to(struct device *dev,
>> +struct device_attribute

Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-18 Thread Zhang Zhen
On 2014/8/19 5:48, David Rientjes wrote:
> On Wed, 13 Aug 2014, Zhang Zhen wrote:
> 
>> Currently memory-hotplug has two limits:
>> 1. If the memory block is in ZONE_NORMAL, you can change it to
>> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
>> 2. If the memory block is in ZONE_MOVABLE, you can change it to
>> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
>>
>> With this patch, we can easy to know a memory block can be onlined to
>> which zone, and don't need to know the above two limits.
>>
>> Updated the related Documentation.
>>
>> Change v1 -> v2:
>> - optimize the implementation following Dave Hansen's suggestion
>>
>> Signed-off-by: Zhang Zhen 
> 
> linux-next build failure:
> 
> drivers/built-in.o: In function `show_zones_online_to':
> memory.c:(.text+0x13ee09): undefined reference to `test_pages_in_a_zone'
> 
The function implementation in mm/memory_hotplug.c is only built if
CONFIG_MEMORY_HOTREMOVE is enabled.

A fix has been proposed.
http://ozlabs.org/~akpm/mmots/broken-out/memory-hotplug-add-sysfs-zones_online_to-attribute-fix-2.patch

Thanks!
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-18 Thread David Rientjes
On Wed, 13 Aug 2014, Zhang Zhen wrote:

> Currently memory-hotplug has two limits:
> 1. If the memory block is in ZONE_NORMAL, you can change it to
> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
> 2. If the memory block is in ZONE_MOVABLE, you can change it to
> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
> 
> With this patch, we can easy to know a memory block can be onlined to
> which zone, and don't need to know the above two limits.
> 
> Updated the related Documentation.
> 
> Change v1 -> v2:
> - optimize the implementation following Dave Hansen's suggestion
> 
> Signed-off-by: Zhang Zhen 

linux-next build failure:

drivers/built-in.o: In function `show_zones_online_to':
memory.c:(.text+0x13ee09): undefined reference to `test_pages_in_a_zone'
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-17 Thread Yasuaki Ishimatsu

(2014/08/18 12:25), Zhang Zhen wrote:

On 2014/8/16 5:37, Toshi Kani wrote:

On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:

Currently memory-hotplug has two limits:
1. If the memory block is in ZONE_NORMAL, you can change it to
ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
2. If the memory block is in ZONE_MOVABLE, you can change it to
ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.

With this patch, we can easy to know a memory block can be onlined to
which zone, and don't need to know the above two limits.

Updated the related Documentation.

Change v1 -> v2:
- optimize the implementation following Dave Hansen's suggestion

Signed-off-by: Zhang Zhen 
---
  Documentation/ABI/testing/sysfs-devices-memory |  8 
  Documentation/memory-hotplug.txt   |  4 +-
  drivers/base/memory.c  | 62 ++
  include/linux/memory_hotplug.h |  1 +
  mm/memory_hotplug.c|  2 +-
  5 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
b/Documentation/ABI/testing/sysfs-devices-memory
index 7405de2..2b2a1d7 100644
--- a/Documentation/ABI/testing/sysfs-devices-memory
+++ b/Documentation/ABI/testing/sysfs-devices-memory
@@ -61,6 +61,14 @@ Users:   hotplug memory remove tools

http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils





+What:   /sys/devices/system/memory/memoryX/zones_online_to


I think this name is a bit confusing.  How about "valid_online_types"?


Thanks for your suggestion.

This patch has been added to -mm tree.
If most people think so, i would like to modify the interface name.


I like Toshi's idea (valid_online_types).

Thanks,
Yasuaki Ishimatsu


If not, let's leave it as it is.

Best regards!

Thanks,
-Toshi



--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majord...@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: mailto:"d...@kvack.org";> em...@kvack.org 








--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-17 Thread Yasuaki Ishimatsu

(2014/08/13 13:10), Zhang Zhen wrote:

Currently memory-hotplug has two limits:
1. If the memory block is in ZONE_NORMAL, you can change it to
ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
2. If the memory block is in ZONE_MOVABLE, you can change it to
ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.

With this patch, we can easy to know a memory block can be onlined to
which zone, and don't need to know the above two limits.

Updated the related Documentation.

Change v1 -> v2:
- optimize the implementation following Dave Hansen's suggestion

Signed-off-by: Zhang Zhen 
---
  Documentation/ABI/testing/sysfs-devices-memory |  8 
  Documentation/memory-hotplug.txt   |  4 +-
  drivers/base/memory.c  | 62 ++
  include/linux/memory_hotplug.h |  1 +
  mm/memory_hotplug.c|  2 +-
  5 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
b/Documentation/ABI/testing/sysfs-devices-memory
index 7405de2..2b2a1d7 100644
--- a/Documentation/ABI/testing/sysfs-devices-memory
+++ b/Documentation/ABI/testing/sysfs-devices-memory
@@ -61,6 +61,14 @@ Users:   hotplug memory remove tools

http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils


+What:   /sys/devices/system/memory/memoryX/zones_online_to
+Date:   July 2014
+Contact:   Zhang Zhen 
+Description:
+   The file /sys/devices/system/memory/memoryX/zones_online_to
+   is read-only and is designed to show which zone this memory 
block can
+   be onlined to.
+
  What: /sys/devices/system/memoryX/nodeY
  Date: October 2009
  Contact:  Linux Memory Management list 
diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt
index 45134dc..5b34e33 100644
--- a/Documentation/memory-hotplug.txt
+++ b/Documentation/memory-hotplug.txt
@@ -155,6 +155,7 @@ Under each memory block, you can see 4 files:
  /sys/devices/system/memory/memoryXXX/phys_device
  /sys/devices/system/memory/memoryXXX/state
  /sys/devices/system/memory/memoryXXX/removable
+/sys/devices/system/memory/memoryXXX/zones_online_to

  'phys_index'  : read-only and contains memory block id, same as XXX.
  'state'   : read-write
@@ -170,6 +171,8 @@ Under each memory block, you can see 4 files:
  block is removable and a value of 0 indicates that
  it is not removable. A memory block is removable only if
  every section in the block is removable.
+'zones_online_to' : read-only: designed to show which zone this memory block
+   can be onlined to.

  NOTE:
These directories/files appear after physical memory hotplug phase.
@@ -408,7 +411,6 @@ node if necessary.
- allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
  sysctl or new control file.
- showing memory block and physical device relationship.
-  - showing memory block is under ZONE_MOVABLE or not
- test and make it better memory offlining.
- support HugeTLB page migration and offlining.
- memmap removing at memory offline.
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index a2e13e2..b5d693f 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -373,10 +373,71 @@ static ssize_t show_phys_device(struct device *dev,
return sprintf(buf, "%d\n", mem->phys_device);
  }

+static int __zones_online_to(unsigned long end_pfn,
+   struct page *first_page, unsigned long nr_pages)
+{
+   struct zone *zone_next;
+



+   /*The mem block is the last block of memory.*/
+   if (!pfn_valid(end_pfn + 1))
+   return 1;


The check is not enough if memory has hole as follows:

PFN   0x00  0xd0  0xe0  0xf0
+-+-+-+
zone type   |   Normal| hole|   Normal|
+-+-+-+

In this case, 0xd1 is invalid pfn. But __zones_online_to should return 0
since 0xe0-0xf0 is Normal zone.

Thanks,
Yasuaki Ishimatsu



+   zone_next = page_zone(first_page + nr_pages);
+   if (zone_idx(zone_next) == ZONE_MOVABLE)
+   return 1;
+   return 0;
+}
+
+static ssize_t show_zones_online_to(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct memory_block *mem = to_memory_block(dev);
+   unsigned long start_pfn, end_pfn;
+   unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
+   struct page *first_page;
+   struct zone *zone, *zone_prev;
+
+   start_pfn = section_nr_to_pfn(mem->start_section_nr);
+   end_pfn = start_pfn + nr_pages;
+   first_page = pfn_to_page(start_pfn);
+
+   /*The block contains m

Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-17 Thread Zhang Zhen
On 2014/8/16 5:37, Toshi Kani wrote:
> On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:
>> Currently memory-hotplug has two limits:
>> 1. If the memory block is in ZONE_NORMAL, you can change it to
>> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
>> 2. If the memory block is in ZONE_MOVABLE, you can change it to
>> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
>>
>> With this patch, we can easy to know a memory block can be onlined to
>> which zone, and don't need to know the above two limits.
>>
>> Updated the related Documentation.
>>
>> Change v1 -> v2:
>> - optimize the implementation following Dave Hansen's suggestion
>>
>> Signed-off-by: Zhang Zhen 
>> ---
>>  Documentation/ABI/testing/sysfs-devices-memory |  8 
>>  Documentation/memory-hotplug.txt   |  4 +-
>>  drivers/base/memory.c  | 62 
>> ++
>>  include/linux/memory_hotplug.h |  1 +
>>  mm/memory_hotplug.c|  2 +-
>>  5 files changed, 75 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
>> b/Documentation/ABI/testing/sysfs-devices-memory
>> index 7405de2..2b2a1d7 100644
>> --- a/Documentation/ABI/testing/sysfs-devices-memory
>> +++ b/Documentation/ABI/testing/sysfs-devices-memory
>> @@ -61,6 +61,14 @@ Users:hotplug memory remove tools
>>  
>> http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils
>>
>>
>> +What:   /sys/devices/system/memory/memoryX/zones_online_to
> 
> I think this name is a bit confusing.  How about "valid_online_types"?
> 
Thanks for your suggestion.

This patch has been added to -mm tree.
If most people think so, i would like to modify the interface name.
If not, let's leave it as it is.

Best regards!
> Thanks,
> -Toshi
> 
> 
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majord...@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: mailto:"d...@kvack.org";> em...@kvack.org 
> 
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-15 Thread Toshi Kani
On Wed, 2014-08-13 at 12:10 +0800, Zhang Zhen wrote:
> Currently memory-hotplug has two limits:
> 1. If the memory block is in ZONE_NORMAL, you can change it to
> ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
> 2. If the memory block is in ZONE_MOVABLE, you can change it to
> ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.
> 
> With this patch, we can easy to know a memory block can be onlined to
> which zone, and don't need to know the above two limits.
> 
> Updated the related Documentation.
> 
> Change v1 -> v2:
> - optimize the implementation following Dave Hansen's suggestion
> 
> Signed-off-by: Zhang Zhen 
> ---
>  Documentation/ABI/testing/sysfs-devices-memory |  8 
>  Documentation/memory-hotplug.txt   |  4 +-
>  drivers/base/memory.c  | 62 
> ++
>  include/linux/memory_hotplug.h |  1 +
>  mm/memory_hotplug.c|  2 +-
>  5 files changed, 75 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
> b/Documentation/ABI/testing/sysfs-devices-memory
> index 7405de2..2b2a1d7 100644
> --- a/Documentation/ABI/testing/sysfs-devices-memory
> +++ b/Documentation/ABI/testing/sysfs-devices-memory
> @@ -61,6 +61,14 @@ Users: hotplug memory remove tools
>   
> http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils
> 
> 
> +What:   /sys/devices/system/memory/memoryX/zones_online_to

I think this name is a bit confusing.  How about "valid_online_types"?

Thanks,
-Toshi



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v2] memory-hotplug: add sysfs zones_online_to attribute

2014-08-12 Thread Zhang Zhen
Currently memory-hotplug has two limits:
1. If the memory block is in ZONE_NORMAL, you can change it to
ZONE_MOVABLE, but this memory block must be adjacent to ZONE_MOVABLE.
2. If the memory block is in ZONE_MOVABLE, you can change it to
ZONE_NORMAL, but this memory block must be adjacent to ZONE_NORMAL.

With this patch, we can easy to know a memory block can be onlined to
which zone, and don't need to know the above two limits.

Updated the related Documentation.

Change v1 -> v2:
- optimize the implementation following Dave Hansen's suggestion

Signed-off-by: Zhang Zhen 
---
 Documentation/ABI/testing/sysfs-devices-memory |  8 
 Documentation/memory-hotplug.txt   |  4 +-
 drivers/base/memory.c  | 62 ++
 include/linux/memory_hotplug.h |  1 +
 mm/memory_hotplug.c|  2 +-
 5 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-devices-memory 
b/Documentation/ABI/testing/sysfs-devices-memory
index 7405de2..2b2a1d7 100644
--- a/Documentation/ABI/testing/sysfs-devices-memory
+++ b/Documentation/ABI/testing/sysfs-devices-memory
@@ -61,6 +61,14 @@ Users:   hotplug memory remove tools

http://www.ibm.com/developerworks/wikis/display/LinuxP/powerpc-utils


+What:   /sys/devices/system/memory/memoryX/zones_online_to
+Date:   July 2014
+Contact:   Zhang Zhen 
+Description:
+   The file /sys/devices/system/memory/memoryX/zones_online_to
+   is read-only and is designed to show which zone this memory 
block can
+   be onlined to.
+
 What:  /sys/devices/system/memoryX/nodeY
 Date:  October 2009
 Contact:   Linux Memory Management list 
diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt
index 45134dc..5b34e33 100644
--- a/Documentation/memory-hotplug.txt
+++ b/Documentation/memory-hotplug.txt
@@ -155,6 +155,7 @@ Under each memory block, you can see 4 files:
 /sys/devices/system/memory/memoryXXX/phys_device
 /sys/devices/system/memory/memoryXXX/state
 /sys/devices/system/memory/memoryXXX/removable
+/sys/devices/system/memory/memoryXXX/zones_online_to

 'phys_index'  : read-only and contains memory block id, same as XXX.
 'state'   : read-write
@@ -170,6 +171,8 @@ Under each memory block, you can see 4 files:
 block is removable and a value of 0 indicates that
 it is not removable. A memory block is removable only if
 every section in the block is removable.
+'zones_online_to' : read-only: designed to show which zone this memory block
+   can be onlined to.

 NOTE:
   These directories/files appear after physical memory hotplug phase.
@@ -408,7 +411,6 @@ node if necessary.
   - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
 sysctl or new control file.
   - showing memory block and physical device relationship.
-  - showing memory block is under ZONE_MOVABLE or not
   - test and make it better memory offlining.
   - support HugeTLB page migration and offlining.
   - memmap removing at memory offline.
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index a2e13e2..b5d693f 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -373,10 +373,71 @@ static ssize_t show_phys_device(struct device *dev,
return sprintf(buf, "%d\n", mem->phys_device);
 }

+static int __zones_online_to(unsigned long end_pfn,
+   struct page *first_page, unsigned long nr_pages)
+{
+   struct zone *zone_next;
+
+   /*The mem block is the last block of memory.*/
+   if (!pfn_valid(end_pfn + 1))
+   return 1;
+   zone_next = page_zone(first_page + nr_pages);
+   if (zone_idx(zone_next) == ZONE_MOVABLE)
+   return 1;
+   return 0;
+}
+
+static ssize_t show_zones_online_to(struct device *dev,
+   struct device_attribute *attr, char *buf)
+{
+   struct memory_block *mem = to_memory_block(dev);
+   unsigned long start_pfn, end_pfn;
+   unsigned long nr_pages = PAGES_PER_SECTION * sections_per_block;
+   struct page *first_page;
+   struct zone *zone, *zone_prev;
+
+   start_pfn = section_nr_to_pfn(mem->start_section_nr);
+   end_pfn = start_pfn + nr_pages;
+   first_page = pfn_to_page(start_pfn);
+
+   /*The block contains more than one zone can not be offlined.*/
+   if (!test_pages_in_a_zone(start_pfn, end_pfn))
+   return sprintf(buf, "none\n");
+
+   zone = page_zone(first_page);
+
+#ifdef CONFIG_HIGHMEM
+   if (zone_idx(zone) == ZONE_HIGHMEM) {
+   if (__zones_online_to(end_pfn, first_page, nr_pages))
+   return sprintf(buf, "%s %s\n",
+   zone->name, (zone + 1)->name);
+   }
+#else
+   if (zone_i