For now, distributions implement advanced udev rules to essentially - Don't online any hotplugged memory (s390x) - Online all memory to ZONE_NORMAL (e.g., most virt environments like hyperv) - Online all memory to ZONE_MOVABLE in case the zone imbalance is taken care of (e.g., bare metal, special virt environments) In summary: All memory is usually onlined the same way, however, the kernel always has to ask user space to come up with the same answer. E.g., Hyper-V always waits for a memory block to get onlined before continuing, otherwise it might end up adding memory faster than onlining it, which can result in strange OOM situations. This waiting slows down adding of a bigger amount of memory. Let's allow to specify a default online_type, not just "online" and "offline". This allows distributions to configure the default online_type when booting up and be done with it. We can now specify "offline", "online", "online_movable" and "online_kernel" via - "memhp_default_state=" on the kernel cmdline - /sys/devices/system/memory/auto_online_blocks just like we are able to specify for a single memory block via /sys/devices/system/memory/memoryX/state
Showing the changes to include/linux (1 of 3 files). Show all
Unified · Split
| @@ -117,6 +117,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size, · 116 unmodified lines | ||
| 117 | 117 | struct mhp_restrictions *restrictions); |
| 118 | 118 | extern u64 max_mem_size; |
| 119 | 119 | |
| 120 | +extern int memhp_online_type_from_str(const char *str); | |
| 121 | + | |
| 120 | 122 | /* Default online_type (MMOP_*) when new memory blocks are added. */ |
| 121 | 123 | extern int memhp_default_online_type; |
| 122 | 124 | /* If movable_node boot option specified */ |