Re: [PATCH V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On Wed, 21 Oct 2015 17:18:36 +0800 Tang Chen wrote: > > On 10/21/2015 05:00 PM, Vlastimil Babka wrote: > > On 10/21/2015 04:20 AM, Changsheng Liu wrote: > >> > >> > >> 在 2015/10/15 0:18, Vlastimil Babka 写道: > >>> On 10/12/2015 08:58 AM, Changsheng Liu wrote: > From: Changsheng Liu > > After the user config CONFIG_MOVABLE_NODE, > When the memory is hot added, should_add_memory_movable() return 0 > because all zones including ZONE_MOVABLE are empty, > so the memory that was hot added will be assigned to ZONE_NORMAL > and ZONE_NORMAL will be created firstly. > But we want the whole node to be added to ZONE_MOVABLE by default. > > So we change should_add_memory_movable(): if the user config > CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 > and the ZONE_NORMAL is empty or the pfn of the hot-added memory > is after the end of the ZONE_NORMAL it will always return 1 > and then the whole node will be added to ZONE_MOVABLE by default. > If we want the node to be assigned to ZONE_NORMAL, > we can do it as follows: > "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" > > By the patch, the behavious of kernel is changed by sysctl, > user can automatically create movable memory > by only the following udev rule: > SUBSYSTEM=="memory", ACTION=="add", > ATTR{state}=="offline", ATTR{state}="online" > >> I'm sorry for replying you so late due to the busy business trip. > >>> So just to be clear, we are adding a new sysctl, because the existing > >>> movable_node kernel option, which is checked by > >>> movable_node_is_enabled(), and > >>> does the same thing for non-hot-added-memory (?) cannot be reused > >>> for hot-added > >>> memory, as that would be a potentially surprising behavior change? > >>> Correct? Then > >>> this should be mentioned in the changelog too, and wherever > >>> "movable_node" is > >>> documented should also mention the new sysctl. Personally, I would > >>> expect > >>> movable_node to affect hot-added memory as well, and would be > >>> surprised that it > >>> doesn't... > >> I think it can let the user decides when to use this feature. > >> The user can enable the feature when making the hot_added memory > >> of a node movable and > >> make the feature disable to assign the hot_added memory of the > >> next > >> node to ZONE_NORMAL . > > > > So you mean sysctl is more flexible than boot option. OK, but wasn't > > such flexibility already provided by "echo online_kernel" vs "echo > > online_movable"? It doesn't sound like a strong reason for a new > > sysctl? Not doing surprising behavior change maybe does... > > . > > > Hi Vlastimil, > > The current kernel will add hot-added memory to ZONE_NORMAL by default. > If users use a udev rule as below: > > SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", > ATTR{state}="online" > > it will online the memory as normal memory, which will not be hotpluggable. > > Please refer to: https://lkml.org/lkml/2015/10/9/58 > > I think this is the root motivation of the patch. > > But BTW, I'm quite familiar with udev rules, but can something like this > work ? > > SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", > ATTR{state}="online_movable" > > I'm not sure. I added Ishimatu in. I think the udev rules fails to online memory as movable. When hot adding memory, the memory is managed as ZONE_NORMAL. And add events of memory section are notified to udev in ascending order, like 0->1->2->3. Thus udev starts to online memory from section 0. But to change zone from ZONE_NORMAL to ZONE_MOVALBE, udev onlines memory in descending order, like 3->2->1->0. So the udev rules cannot online memory as movable. Thanks, Yasuaki Ishimatsu > > For now, I think, if the above rule works, we don't need this patch. If > not, maybe we should just change the kernel behavior to make the > hot-added memory be added to ZONE_MOVABLE by default. > > I don't have objection. But a sysctl doesn't sound necessary. > > 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On Wed, 21 Oct 2015 17:18:36 +0800 Tang Chenwrote: > > On 10/21/2015 05:00 PM, Vlastimil Babka wrote: > > On 10/21/2015 04:20 AM, Changsheng Liu wrote: > >> > >> > >> 在 2015/10/15 0:18, Vlastimil Babka 写道: > >>> On 10/12/2015 08:58 AM, Changsheng Liu wrote: > From: Changsheng Liu > > After the user config CONFIG_MOVABLE_NODE, > When the memory is hot added, should_add_memory_movable() return 0 > because all zones including ZONE_MOVABLE are empty, > so the memory that was hot added will be assigned to ZONE_NORMAL > and ZONE_NORMAL will be created firstly. > But we want the whole node to be added to ZONE_MOVABLE by default. > > So we change should_add_memory_movable(): if the user config > CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 > and the ZONE_NORMAL is empty or the pfn of the hot-added memory > is after the end of the ZONE_NORMAL it will always return 1 > and then the whole node will be added to ZONE_MOVABLE by default. > If we want the node to be assigned to ZONE_NORMAL, > we can do it as follows: > "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" > > By the patch, the behavious of kernel is changed by sysctl, > user can automatically create movable memory > by only the following udev rule: > SUBSYSTEM=="memory", ACTION=="add", > ATTR{state}=="offline", ATTR{state}="online" > >> I'm sorry for replying you so late due to the busy business trip. > >>> So just to be clear, we are adding a new sysctl, because the existing > >>> movable_node kernel option, which is checked by > >>> movable_node_is_enabled(), and > >>> does the same thing for non-hot-added-memory (?) cannot be reused > >>> for hot-added > >>> memory, as that would be a potentially surprising behavior change? > >>> Correct? Then > >>> this should be mentioned in the changelog too, and wherever > >>> "movable_node" is > >>> documented should also mention the new sysctl. Personally, I would > >>> expect > >>> movable_node to affect hot-added memory as well, and would be > >>> surprised that it > >>> doesn't... > >> I think it can let the user decides when to use this feature. > >> The user can enable the feature when making the hot_added memory > >> of a node movable and > >> make the feature disable to assign the hot_added memory of the > >> next > >> node to ZONE_NORMAL . > > > > So you mean sysctl is more flexible than boot option. OK, but wasn't > > such flexibility already provided by "echo online_kernel" vs "echo > > online_movable"? It doesn't sound like a strong reason for a new > > sysctl? Not doing surprising behavior change maybe does... > > . > > > Hi Vlastimil, > > The current kernel will add hot-added memory to ZONE_NORMAL by default. > If users use a udev rule as below: > > SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", > ATTR{state}="online" > > it will online the memory as normal memory, which will not be hotpluggable. > > Please refer to: https://lkml.org/lkml/2015/10/9/58 > > I think this is the root motivation of the patch. > > But BTW, I'm quite familiar with udev rules, but can something like this > work ? > > SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", > ATTR{state}="online_movable" > > I'm not sure. I added Ishimatu in. I think the udev rules fails to online memory as movable. When hot adding memory, the memory is managed as ZONE_NORMAL. And add events of memory section are notified to udev in ascending order, like 0->1->2->3. Thus udev starts to online memory from section 0. But to change zone from ZONE_NORMAL to ZONE_MOVALBE, udev onlines memory in descending order, like 3->2->1->0. So the udev rules cannot online memory as movable. Thanks, Yasuaki Ishimatsu > > For now, I think, if the above rule works, we don't need this patch. If > not, maybe we should just change the kernel behavior to make the > hot-added memory be added to ZONE_MOVABLE by default. > > I don't have objection. But a sysctl doesn't sound necessary. > > 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 05:18 PM, Tang Chen wrote: On 10/21/2015 05:00 PM, Vlastimil Babka wrote: On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng Liu After the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... . Hi Vlastimil, The current kernel will add hot-added memory to ZONE_NORMAL by default. If users use a udev rule as below: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" it will online the memory as normal memory, which will not be hotpluggable. Please refer to: https://lkml.org/lkml/2015/10/9/58 I think this is the root motivation of the patch. But BTW, I'm quite familiar with udev rules, but can something like this work ? sorry, I'm NOT quite familiar with udev rules, .. SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online_movable" I'm not sure. I added Ishimatu in. For now, I think, if the above rule works, we don't need this patch. If not, maybe we should just change the kernel behavior to make the hot-added memory be added to ZONE_MOVABLE by default. I don't have objection. But a sysctl doesn't sound necessary. 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/ . -- 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 05:00 PM, Vlastimil Babka wrote: On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng Liu After the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... . Hi Vlastimil, The current kernel will add hot-added memory to ZONE_NORMAL by default. If users use a udev rule as below: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" it will online the memory as normal memory, which will not be hotpluggable. Please refer to: https://lkml.org/lkml/2015/10/9/58 I think this is the root motivation of the patch. But BTW, I'm quite familiar with udev rules, but can something like this work ? SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online_movable" I'm not sure. I added Ishimatu in. For now, I think, if the above rule works, we don't need this patch. If not, maybe we should just change the kernel behavior to make the hot-added memory be added to ZONE_MOVABLE by default. I don't have objection. But a sysctl doesn't sound necessary. 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng Liu After the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... -- 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 05:00 PM, Vlastimil Babka wrote: On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng LiuAfter the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... . Hi Vlastimil, The current kernel will add hot-added memory to ZONE_NORMAL by default. If users use a udev rule as below: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" it will online the memory as normal memory, which will not be hotpluggable. Please refer to: https://lkml.org/lkml/2015/10/9/58 I think this is the root motivation of the patch. But BTW, I'm quite familiar with udev rules, but can something like this work ? SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online_movable" I'm not sure. I added Ishimatu in. For now, I think, if the above rule works, we don't need this patch. If not, maybe we should just change the kernel behavior to make the hot-added memory be added to ZONE_MOVABLE by default. I don't have objection. But a sysctl doesn't sound necessary. 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 05:18 PM, Tang Chen wrote: On 10/21/2015 05:00 PM, Vlastimil Babka wrote: On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng LiuAfter the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... . Hi Vlastimil, The current kernel will add hot-added memory to ZONE_NORMAL by default. If users use a udev rule as below: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" it will online the memory as normal memory, which will not be hotpluggable. Please refer to: https://lkml.org/lkml/2015/10/9/58 I think this is the root motivation of the patch. But BTW, I'm quite familiar with udev rules, but can something like this work ? sorry, I'm NOT quite familiar with udev rules, .. SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online_movable" I'm not sure. I added Ishimatu in. For now, I think, if the above rule works, we don't need this patch. If not, maybe we should just change the kernel behavior to make the hot-added memory be added to ZONE_MOVABLE by default. I don't have objection. But a sysctl doesn't sound necessary. 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/ . -- 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/21/2015 04:20 AM, Changsheng Liu wrote: 在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng LiuAfter the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . So you mean sysctl is more flexible than boot option. OK, but wasn't such flexibility already provided by "echo online_kernel" vs "echo online_movable"? It doesn't sound like a strong reason for a new sysctl? Not doing surprising behavior change maybe does... -- 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 V7] mm: memory hot-add: memory can not be added to movable zone defaultly
在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng Liu After the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . Signed-off-by: Changsheng Liu Signed-off-by: Xiaofeng Yan Tested-by: Dongdong Fan Cc: Wang Nan Cc: Dave Hansen Cc: Yinghai Lu Cc: Tang Chen Cc: Yasuaki Ishimatsu Cc: Toshi Kani Cc: Xishi Qiu --- Documentation/memory-hotplug.txt |5 - kernel/sysctl.c | 15 +++ mm/memory_hotplug.c | 24 3 files changed, 43 insertions(+), 1 deletions(-) diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt index ce2cfcf..7ac7485 100644 --- a/Documentation/memory-hotplug.txt +++ b/Documentation/memory-hotplug.txt @@ -277,7 +277,7 @@ And if the memory block is in ZONE_MOVABLE, you can change it to ZONE_NORMAL: After this, memory block XXX's state will be 'online' and the amount of available memory will be increased. -Currently, newly added memory is added as ZONE_NORMAL (for powerpc, ZONE_DMA). +Currently, newly added memory is added as ZONE_NORMAL or ZONE_MOVABLE (for powerpc, ZONE_DMA). This may be changed in future. @@ -319,6 +319,9 @@ creates ZONE_MOVABLE as following. Size of memory not for movable pages (not for offline) is TOTAL - . Size of memory for movable pages (for offline) is . +And a sysctl parameter for assigning the hot added memory to ZONE_MOVABLE is +supported. If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added +memory will be assigned to ZONE_MOVABLE by default. Note: Unfortunately, there is no information to show which memory block belongs to ZONE_MOVABLE. This is TBD. diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 19b62b5..16b1501 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -166,6 +166,10 @@ extern int unaligned_dump_stack; extern int no_unaligned_warning; #endif +#ifdef CONFIG_MOVABLE_NODE +extern int hotadd_memory_as_movable; +#endif + #ifdef CONFIG_PROC_SYSCTL #define SYSCTL_WRITES_LEGACY -1 @@ -1139,6 +1143,17 @@ static struct ctl_table kern_table[] = { .proc_handler = timer_migration_handler, }, #endif +/*If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added + * memory will be assigned to ZONE_MOVABLE by default.*/ +#ifdef CONFIG_MOVABLE_NODE + { + .procname = "hotadd_memory_as_movable", + .data = _memory_as_movable, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, +#endif { } }; diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 26fbba7..eca5512 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -37,6 +37,11 @@ #include "internal.h" +/*If the global variable value is 1, + * the hot added memory will be assigned to ZONE_MOVABLE by default + */ +int hotadd_memory_as_movable; + /* * online_page_callback contains pointer to current page onlining function. * Initially it is
Re: [PATCH V7] mm: memory hot-add: memory can not be added to movable zone defaultly
在 2015/10/15 0:18, Vlastimil Babka 写道: On 10/12/2015 08:58 AM, Changsheng Liu wrote: From: Changsheng LiuAfter the user config CONFIG_MOVABLE_NODE, When the memory is hot added, should_add_memory_movable() return 0 because all zones including ZONE_MOVABLE are empty, so the memory that was hot added will be assigned to ZONE_NORMAL and ZONE_NORMAL will be created firstly. But we want the whole node to be added to ZONE_MOVABLE by default. So we change should_add_memory_movable(): if the user config CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 and the ZONE_NORMAL is empty or the pfn of the hot-added memory is after the end of the ZONE_NORMAL it will always return 1 and then the whole node will be added to ZONE_MOVABLE by default. If we want the node to be assigned to ZONE_NORMAL, we can do it as follows: "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" By the patch, the behavious of kernel is changed by sysctl, user can automatically create movable memory by only the following udev rule: SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" I'm sorry for replying you so late due to the busy business trip. So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... I think it can let the user decides when to use this feature. The user can enable the feature when making the hot_added memory of a node movable and make the feature disable to assign the hot_added memory of the next node to ZONE_NORMAL . Signed-off-by: Changsheng Liu Signed-off-by: Xiaofeng Yan Tested-by: Dongdong Fan Cc: Wang Nan Cc: Dave Hansen Cc: Yinghai Lu Cc: Tang Chen Cc: Yasuaki Ishimatsu Cc: Toshi Kani Cc: Xishi Qiu --- Documentation/memory-hotplug.txt |5 - kernel/sysctl.c | 15 +++ mm/memory_hotplug.c | 24 3 files changed, 43 insertions(+), 1 deletions(-) diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt index ce2cfcf..7ac7485 100644 --- a/Documentation/memory-hotplug.txt +++ b/Documentation/memory-hotplug.txt @@ -277,7 +277,7 @@ And if the memory block is in ZONE_MOVABLE, you can change it to ZONE_NORMAL: After this, memory block XXX's state will be 'online' and the amount of available memory will be increased. -Currently, newly added memory is added as ZONE_NORMAL (for powerpc, ZONE_DMA). +Currently, newly added memory is added as ZONE_NORMAL or ZONE_MOVABLE (for powerpc, ZONE_DMA). This may be changed in future. @@ -319,6 +319,9 @@ creates ZONE_MOVABLE as following. Size of memory not for movable pages (not for offline) is TOTAL - . Size of memory for movable pages (for offline) is . +And a sysctl parameter for assigning the hot added memory to ZONE_MOVABLE is +supported. If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added +memory will be assigned to ZONE_MOVABLE by default. Note: Unfortunately, there is no information to show which memory block belongs to ZONE_MOVABLE. This is TBD. diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 19b62b5..16b1501 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -166,6 +166,10 @@ extern int unaligned_dump_stack; extern int no_unaligned_warning; #endif +#ifdef CONFIG_MOVABLE_NODE +extern int hotadd_memory_as_movable; +#endif + #ifdef CONFIG_PROC_SYSCTL #define SYSCTL_WRITES_LEGACY -1 @@ -1139,6 +1143,17 @@ static struct ctl_table kern_table[] = { .proc_handler = timer_migration_handler, }, #endif +/*If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added + * memory will be assigned to ZONE_MOVABLE by default.*/ +#ifdef CONFIG_MOVABLE_NODE + { + .procname = "hotadd_memory_as_movable", + .data = _memory_as_movable, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, +#endif { } }; diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 26fbba7..eca5512 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -37,6 +37,11 @@ #include "internal.h"
Re: [PATCH V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/12/2015 08:58 AM, Changsheng Liu wrote: > From: Changsheng Liu > > After the user config CONFIG_MOVABLE_NODE, > When the memory is hot added, should_add_memory_movable() return 0 > because all zones including ZONE_MOVABLE are empty, > so the memory that was hot added will be assigned to ZONE_NORMAL > and ZONE_NORMAL will be created firstly. > But we want the whole node to be added to ZONE_MOVABLE by default. > > So we change should_add_memory_movable(): if the user config > CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 > and the ZONE_NORMAL is empty or the pfn of the hot-added memory > is after the end of the ZONE_NORMAL it will always return 1 > and then the whole node will be added to ZONE_MOVABLE by default. > If we want the node to be assigned to ZONE_NORMAL, > we can do it as follows: > "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" > > By the patch, the behavious of kernel is changed by sysctl, > user can automatically create movable memory > by only the following udev rule: > SUBSYSTEM=="memory", ACTION=="add", > ATTR{state}=="offline", ATTR{state}="online" So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... > Signed-off-by: Changsheng Liu > Signed-off-by: Xiaofeng Yan > Tested-by: Dongdong Fan > Cc: Wang Nan > Cc: Dave Hansen > Cc: Yinghai Lu > Cc: Tang Chen > Cc: Yasuaki Ishimatsu > Cc: Toshi Kani > Cc: Xishi Qiu > --- > Documentation/memory-hotplug.txt |5 - > kernel/sysctl.c | 15 +++ > mm/memory_hotplug.c | 24 > 3 files changed, 43 insertions(+), 1 deletions(-) > > diff --git a/Documentation/memory-hotplug.txt > b/Documentation/memory-hotplug.txt > index ce2cfcf..7ac7485 100644 > --- a/Documentation/memory-hotplug.txt > +++ b/Documentation/memory-hotplug.txt > @@ -277,7 +277,7 @@ And if the memory block is in ZONE_MOVABLE, you can > change it to ZONE_NORMAL: > After this, memory block XXX's state will be 'online' and the amount of > available memory will be increased. > > -Currently, newly added memory is added as ZONE_NORMAL (for powerpc, > ZONE_DMA). > +Currently, newly added memory is added as ZONE_NORMAL or ZONE_MOVABLE (for > powerpc, ZONE_DMA). > This may be changed in future. > > > @@ -319,6 +319,9 @@ creates ZONE_MOVABLE as following. >Size of memory not for movable pages (not for offline) is TOTAL - . >Size of memory for movable pages (for offline) is . > > +And a sysctl parameter for assigning the hot added memory to ZONE_MOVABLE is > +supported. If the value of "kernel/hotadd_memory_as_movable" is 1,the hot > added > +memory will be assigned to ZONE_MOVABLE by default. > > Note: Unfortunately, there is no information to show which memory block > belongs > to ZONE_MOVABLE. This is TBD. > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index 19b62b5..16b1501 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -166,6 +166,10 @@ extern int unaligned_dump_stack; > extern int no_unaligned_warning; > #endif > > +#ifdef CONFIG_MOVABLE_NODE > +extern int hotadd_memory_as_movable; > +#endif > + > #ifdef CONFIG_PROC_SYSCTL > > #define SYSCTL_WRITES_LEGACY -1 > @@ -1139,6 +1143,17 @@ static struct ctl_table kern_table[] = { > .proc_handler = timer_migration_handler, > }, > #endif > +/*If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added > + * memory will be assigned to ZONE_MOVABLE by default.*/ > +#ifdef CONFIG_MOVABLE_NODE > + { > + .procname = "hotadd_memory_as_movable", > + .data = _memory_as_movable, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > { } > }; > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 26fbba7..eca5512 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -37,6 +37,11 @@ > > #include "internal.h" > > +/*If the global variable value is 1, > + * the hot added memory will be assigned to ZONE_MOVABLE by default > + */ > +int hotadd_memory_as_movable; > + > /* > * online_page_callback contains pointer to current page onlining function. > * Initially it is generic_online_page(). If it is required it could be > @@ -1190,6 +1195,9 @@ static int check_hotplug_memory_range(u64 start, u64 > size) > /* > * If movable zone has already been setup,
Re: [PATCH V7] mm: memory hot-add: memory can not be added to movable zone defaultly
On 10/12/2015 08:58 AM, Changsheng Liu wrote: > From: Changsheng Liu> > After the user config CONFIG_MOVABLE_NODE, > When the memory is hot added, should_add_memory_movable() return 0 > because all zones including ZONE_MOVABLE are empty, > so the memory that was hot added will be assigned to ZONE_NORMAL > and ZONE_NORMAL will be created firstly. > But we want the whole node to be added to ZONE_MOVABLE by default. > > So we change should_add_memory_movable(): if the user config > CONFIG_MOVABLE_NODE and sysctl parameter hotadd_memory_as_movable is 1 > and the ZONE_NORMAL is empty or the pfn of the hot-added memory > is after the end of the ZONE_NORMAL it will always return 1 > and then the whole node will be added to ZONE_MOVABLE by default. > If we want the node to be assigned to ZONE_NORMAL, > we can do it as follows: > "echo online_kernel > /sys/devices/system/memory/memoryXXX/state" > > By the patch, the behavious of kernel is changed by sysctl, > user can automatically create movable memory > by only the following udev rule: > SUBSYSTEM=="memory", ACTION=="add", > ATTR{state}=="offline", ATTR{state}="online" So just to be clear, we are adding a new sysctl, because the existing movable_node kernel option, which is checked by movable_node_is_enabled(), and does the same thing for non-hot-added-memory (?) cannot be reused for hot-added memory, as that would be a potentially surprising behavior change? Correct? Then this should be mentioned in the changelog too, and wherever "movable_node" is documented should also mention the new sysctl. Personally, I would expect movable_node to affect hot-added memory as well, and would be surprised that it doesn't... > Signed-off-by: Changsheng Liu > Signed-off-by: Xiaofeng Yan > Tested-by: Dongdong Fan > Cc: Wang Nan > Cc: Dave Hansen > Cc: Yinghai Lu > Cc: Tang Chen > Cc: Yasuaki Ishimatsu > Cc: Toshi Kani > Cc: Xishi Qiu > --- > Documentation/memory-hotplug.txt |5 - > kernel/sysctl.c | 15 +++ > mm/memory_hotplug.c | 24 > 3 files changed, 43 insertions(+), 1 deletions(-) > > diff --git a/Documentation/memory-hotplug.txt > b/Documentation/memory-hotplug.txt > index ce2cfcf..7ac7485 100644 > --- a/Documentation/memory-hotplug.txt > +++ b/Documentation/memory-hotplug.txt > @@ -277,7 +277,7 @@ And if the memory block is in ZONE_MOVABLE, you can > change it to ZONE_NORMAL: > After this, memory block XXX's state will be 'online' and the amount of > available memory will be increased. > > -Currently, newly added memory is added as ZONE_NORMAL (for powerpc, > ZONE_DMA). > +Currently, newly added memory is added as ZONE_NORMAL or ZONE_MOVABLE (for > powerpc, ZONE_DMA). > This may be changed in future. > > > @@ -319,6 +319,9 @@ creates ZONE_MOVABLE as following. >Size of memory not for movable pages (not for offline) is TOTAL - . >Size of memory for movable pages (for offline) is . > > +And a sysctl parameter for assigning the hot added memory to ZONE_MOVABLE is > +supported. If the value of "kernel/hotadd_memory_as_movable" is 1,the hot > added > +memory will be assigned to ZONE_MOVABLE by default. > > Note: Unfortunately, there is no information to show which memory block > belongs > to ZONE_MOVABLE. This is TBD. > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index 19b62b5..16b1501 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -166,6 +166,10 @@ extern int unaligned_dump_stack; > extern int no_unaligned_warning; > #endif > > +#ifdef CONFIG_MOVABLE_NODE > +extern int hotadd_memory_as_movable; > +#endif > + > #ifdef CONFIG_PROC_SYSCTL > > #define SYSCTL_WRITES_LEGACY -1 > @@ -1139,6 +1143,17 @@ static struct ctl_table kern_table[] = { > .proc_handler = timer_migration_handler, > }, > #endif > +/*If the value of "kernel/hotadd_memory_as_movable" is 1,the hot added > + * memory will be assigned to ZONE_MOVABLE by default.*/ > +#ifdef CONFIG_MOVABLE_NODE > + { > + .procname = "hotadd_memory_as_movable", > + .data = _memory_as_movable, > + .maxlen = sizeof(int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > +#endif > { } > }; > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 26fbba7..eca5512 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -37,6 +37,11 @@ > > #include "internal.h" > > +/*If the global variable value is 1, > + * the hot added memory will be assigned to ZONE_MOVABLE by default > + */ > +int hotadd_memory_as_movable; > + > /* > * online_page_callback contains