[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200731091838.7490-1-david@redhat.com>
Date: Fri, 31 Jul 2020 11:18:33 +0200
From: David Hildenbrand <david@...hat.com>
To: linux-kernel@...r.kernel.org
Cc: virtualization@...ts.linux-foundation.org, linux-mm@...ck.org,
linux-hyperv@...r.kernel.org, xen-devel@...ts.xenproject.org,
David Hildenbrand <david@...hat.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Ard Biesheuvel <ardb@...nel.org>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Dan Williams <dan.j.williams@...el.com>,
Haiyang Zhang <haiyangz@...rosoft.com>,
Jason Gunthorpe <jgg@...pe.ca>,
Juergen Gross <jgross@...e.com>, Julien Grall <julien@....org>,
Kees Cook <keescook@...omium.org>,
"K. Y. Srinivasan" <kys@...rosoft.com>,
Michal Hocko <mhocko@...e.com>,
Roger Pau Monné <roger.pau@...rix.com>,
Stefano Stabellini <sstabellini@...nel.org>,
Stephen Hemminger <sthemmin@...rosoft.com>,
Thomas Gleixner <tglx@...utronix.de>,
Wei Liu <wei.liu@...nel.org>,
Wei Yang <richardw.yang@...ux.intel.com>
Subject: [PATCH RFCv1 0/5] mm/memory_hotplug: selective merging of memory resources
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 more than ~100GB
of memory with a memory block size of 128MB on x86-64).
Let's allow to selectively merge resources, speciyfing a parent node and
a resource idendifier string. The memory unplug path will properly split
up merged resources again.
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.
David Hildenbrand (5):
kernel/resource: make release_mem_region_adjustable() never fail
kernel/resource: merge_child_mem_resources() to merge memory resources
after adding succeeded
virtio-mem: try to merge "System RAM (virtio_mem)" 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 | 105 ++++++++++++++++++++++++++++--------
mm/memory_hotplug.c | 22 +-------
6 files changed, 109 insertions(+), 46 deletions(-)
--
2.26.2
Powered by blists - more mailing lists