All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH RFC 0/2] s390: stop abusing memory_region_allocate_system_memory()
@ 2019-07-29 14:52 Igor Mammedov
  2019-07-29 14:52 ` [Qemu-devel] [PATCH RFC 1/2] memory: make MemoryRegion alias migratable Igor Mammedov
                   ` (4 more replies)
  0 siblings, 5 replies; 18+ messages in thread
From: Igor Mammedov @ 2019-07-29 14:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, qemu-s390x, dgilbert


While looking into unifying guest RAM allocation to use hostmem backends
for initial RAM (especially when -mempath is used) and retiring
memory_region_allocate_system_memory() API, leaving only single hostmem backend,
I was inspecting how currently it is used by boards and it turns out several
boards abuse it by calling the function several times (despite documented contract
forbiding it).

s390 is one of such boards where KVM limitation on memslot size got propagated
to board design and memory_region_allocate_system_memory() was abused to satisfy
KVM requirement for max RAM chunk where memory region alias would suffice.

Unfortunately, memory_region_allocate_system_memory() usage created migration
dependency where guest RAM is transferred in migration stream as several RAMBlocks
if it's more than KVM_SLOT_MAX_BYTES.

In order to replace these several RAM chunks with a single memdev and keep it
working with KVM memslot size limit and migration compatible, following was done:
   * [2/2] use memory region aliases to partition hostmem backend RAM on
           KVM_SLOT_MAX_BYTES chunks, which should keep KVM side working
   * [1/2] hacked memory region aliases (to ram memory regions only) to have
           its own RAMBlocks pointing to RAM chunks owned by aliased memory
           region. While it's admittedly a hack, but it's relatively simple and
           allows board code rashape migration stream as necessary

           I haven't tried to use migratable aliases on x86 machines, but with it
           it could be possible to drop legacy RAM allocation and compat knob
           (cd5ff8333a) dropping '-numa node,mem' completely even for old machines.

PS:
   Tested with ping pong cross version migration on s390 machine 
   (with reduced KVM_SLOT_MAX_BYTES since I don't have access to large
    enough host)
     

Igor Mammedov (2):
  memory: make MemoryRegion alias migratable
  s390: do not call memory_region_allocate_system_memory() multiple
    times

 exec.c                     |  7 ++++---
 hw/s390x/s390-virtio-ccw.c | 20 +++++++++++++++-----
 memory.c                   |  5 +++++
 3 files changed, 24 insertions(+), 8 deletions(-)

-- 
2.18.1



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2019-08-02 10:25 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-29 14:52 [Qemu-devel] [PATCH RFC 0/2] s390: stop abusing memory_region_allocate_system_memory() Igor Mammedov
2019-07-29 14:52 ` [Qemu-devel] [PATCH RFC 1/2] memory: make MemoryRegion alias migratable Igor Mammedov
2019-07-29 17:53   ` Dr. David Alan Gilbert
2019-07-30 13:25     ` Igor Mammedov
2019-07-30 13:34       ` Paolo Bonzini
2019-07-30 14:35         ` Igor Mammedov
2019-07-30 15:41           ` Dr. David Alan Gilbert
2019-07-29 14:52 ` [Qemu-devel] [PATCH RFC 2/2] s390: do not call memory_region_allocate_system_memory() multiple times Igor Mammedov
2019-07-29 14:58 ` [Qemu-devel] [PATCH RFC 0/2] s390: stop abusing memory_region_allocate_system_memory() Cornelia Huck
2019-07-30 15:22 ` [Qemu-devel] [qemu-s390x] " Christian Borntraeger
2019-07-30 15:49   ` Igor Mammedov
2019-08-02  8:04 ` David Hildenbrand
2019-08-02  8:23   ` David Hildenbrand
2019-08-02  8:26   ` David Hildenbrand
2019-08-02  8:29   ` Christian Borntraeger
2019-08-02  8:37     ` David Hildenbrand
2019-08-02 10:24       ` Christian Borntraeger
2019-08-02  9:18     ` Igor Mammedov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.