From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, david@redhat.com, cohuck@redhat.com,
borntraeger@de.ibm.com, qemu-s390x@nongnu.org,
pbonzini@redhat.com
Subject: [Qemu-devel] [PATCH RFC v2 0/4] s390: stop abusing memory_region_allocate_system_memory()
Date: Fri, 2 Aug 2019 05:38:50 -0400 [thread overview]
Message-ID: <20190802093854.5343-1-imammedo@redhat.com> (raw)
Changelog:
since v1:
- include 4.2 machines patch for adding compat RAM layout on top
- 2/4 add missing in v1 patch for splitting too big MemorySection on
several memslots
- 3/4 amend code path on alias destruction to ensure that RAMBlock is
cleaned properly
- 4/4 add compat machine code to keep old layout (migration-wise) for
4.1 and older machines
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/4] split too big RAM chunk inside of KVM code on several memory slots
if necessary
* [4/4] use memory region aliases to partition hostmem backend RAM on
KVM_SLOT_MAX_BYTES chunks, which should keep KVM side working
* [3/4] 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 re-shape 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 and x86 pc/q35
(with reduced KVM_SLOT_MAX_BYTES since I don't have access to large
enough host)
CC: pbonzini@redhat.com
CC: qemu-s390x@nongnu.org
CC: borntraeger@de.ibm.com
CC: thuth@redhat.com
CC: david@redhat.com
CC: cohuck@redhat.com
Cornelia Huck (1):
hw: add compat machines for 4.2
Igor Mammedov (3):
kvm: s390: split too big memory section on several memslots
memory: make MemoryRegion alias migratable
s390: do not call memory_region_allocate_system_memory() multiple
times
include/hw/boards.h | 3 ++
include/hw/i386/pc.h | 3 ++
include/hw/s390x/s390-virtio-ccw.h | 14 ++++++
include/sysemu/kvm_int.h | 1 +
accel/kvm/kvm-all.c | 77 +++++++++++++++++------------
exec.c | 9 ++--
hw/arm/virt.c | 9 +++-
hw/core/machine.c | 3 ++
hw/i386/pc.c | 3 ++
hw/i386/pc_piix.c | 14 +++++-
hw/i386/pc_q35.c | 13 ++++-
hw/ppc/spapr.c | 15 +++++-
hw/s390x/s390-virtio-ccw.c | 79 ++++++++++++++++++++----------
memory.c | 6 +++
target/s390x/kvm.c | 1 +
15 files changed, 183 insertions(+), 67 deletions(-)
--
2.18.1
next reply other threads:[~2019-08-02 9:39 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-02 9:38 Igor Mammedov [this message]
2019-08-02 9:38 ` [Qemu-devel] [PATCH RFC v2 1/4] hw: add compat machines for 4.2 Igor Mammedov
2019-08-02 9:38 ` [Qemu-devel] [PATCH RFC v2 2/4] kvm: s390: split too big memory section on several memslots Igor Mammedov
2019-08-02 9:38 ` [Qemu-devel] [PATCH RFC v2 3/4] memory: make MemoryRegion alias migratable Igor Mammedov
2019-08-02 9:38 ` [Qemu-devel] [PATCH RFC v2 4/4] s390: do not call memory_region_allocate_system_memory() multiple times Igor Mammedov
2019-08-02 10:25 ` David Hildenbrand
2019-08-02 10:27 ` Christian Borntraeger
2019-08-02 11:40 ` Igor Mammedov
2019-08-02 12:13 ` Christian Borntraeger
2019-08-02 9:53 ` [Qemu-devel] [PATCH RFC v2 0/4] s390: stop abusing memory_region_allocate_system_memory() no-reply
2019-08-02 10:09 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190802093854.5343-1-imammedo@redhat.com \
--to=imammedo@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).