[PATCH v1 0/5] mm/memory_hotplug: selective merging of system ram resources

From: David Hildenbrand
Date: Fri Aug 21 2020 - 06:34:58 EST


This is the follow-up of "[PATCH RFCv1 0/5] mm/memory_hotplug: selective
merging of memory resources" [1]

Some add_memory*() users add memory in small, contiguous memory blocks.
Examples include virtio-mem, hyper-v balloon, and the XEN balloon.

This can quickly result in a lot of memory resources, whereby the actual
resource boundaries are not of interest (e.g., it might be relevant for
DIMMs, exposed via /proc/iomem to user space). We really want to merge
added resources in this scenario where possible.

Resources are effectively stored in a list-based tree. Having a lot of
resources not only wastes memory, it also makes traversing that tree more
expensive, and makes /proc/iomem explode in size (e.g., requiring
kexec-tools to manually merge resources when creating a kdump header. The
current kexec-tools resource count limit does not allow for more than
~100GB of memory with a memory block size of 128MB on x86-64).

Let's allow to selectively merge system ram resources directly below a
specific parent resource. Patch #3 contains a /proc/iomem example. Only
tested with virtio-mem.

Note: This gets the job done and is comparably simple. More complicated
approaches would require introducing IORESOURCE_MERGEABLE and extending our
add_memory*() interfaces with a flag, specifying that merging after adding
succeeded is acceptable. I'd like to avoid that complexity and code churn
for now.

[1] https://lkml.kernel.org/r/20200731091838.7490-1-david@xxxxxxxxxx

RFC -> v1:
- Switch from rather generic "merge_child_mem_resources()" where a resource
name has to be specified to "merge_system_ram_resources().
- Smaller comment/documentation/patch description changes/fixes

David Hildenbrand (5):
kernel/resource: make release_mem_region_adjustable() never fail
kernel/resource: merge_system_ram_resources() to merge resources after
hotplug
virtio-mem: try to merge system ram resources
xen/balloon: try to merge system ram resources
hv_balloon: try to merge system ram resources

drivers/hv/hv_balloon.c | 3 ++
drivers/virtio/virtio_mem.c | 14 ++++-
drivers/xen/balloon.c | 4 ++
include/linux/ioport.h | 7 ++-
kernel/resource.c | 101 ++++++++++++++++++++++++++++--------
mm/memory_hotplug.c | 22 +-------
6 files changed, 105 insertions(+), 46 deletions(-)

--
2.26.2