mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-21 06:58:36 -07:00
Let's add our virtio-mem-ccw proxy device and wire it up. We should
be supporting everything (e.g., device unplug, "dynamic-memslots") that
we already support for the virtio-pci variant.
With a Linux guest that supports virtio-mem (and has automatic memory
onlining properly configured) the following example will work:
1. Start a VM with 4G initial memory and a virtio-mem device with a maximum
capacity of 16GB:
qemu/build/qemu-system-s390x \
--enable-kvm \
-m 4G,maxmem=20G \
-nographic \
-smp 8 \
-hda Fedora-Server-KVM-40-1.14.s390x.qcow2 \
-chardev socket,id=monitor,path=/var/tmp/monitor,server,nowait \
-mon chardev=monitor,mode=readline \
-object memory-backend-ram,id=mem0,size=16G,reserve=off \
-device virtio-mem-ccw,id=vmem0,memdev=mem0,dynamic-memslots=on
2. Query the current size of virtio-mem device:
(qemu) info memory-devices
Memory device [virtio-mem]: "vmem0"
memaddr: 0x100000000
node: 0
requested-size: 0
size: 0
max-size: 17179869184
block-size: 1048576
memdev: /objects/mem0
3. Request to grow it to 8GB (hotplug 8GB):
(qemu) qom-set vmem0 requested-size 8G
(qemu) info memory-devices
Memory device [virtio-mem]: "vmem0"
memaddr: 0x100000000
node: 0
requested-size: 8589934592
size: 8589934592
max-size: 17179869184
block-size: 1048576
memdev: /objects/mem0
4. Request to grow to 16GB (hotplug another 8GB):
(qemu) qom-set vmem0 requested-size 16G
(qemu) info memory-devices
Memory device [virtio-mem]: "vmem0"
memaddr: 0x100000000
node: 0
requested-size: 17179869184
size: 17179869184
max-size: 17179869184
block-size: 1048576
memdev: /objects/mem0
5. Try to hotunplug all memory again, shrinking to 0GB:
(qemu) qom-set vmem0 requested-size 0G
(qemu) info memory-devices
Memory device [virtio-mem]: "vmem0"
memaddr: 0x100000000
node: 0
requested-size: 0
size: 0
max-size: 17179869184
block-size: 1048576
memdev: /objects/mem0
6. If it worked, unplug the device
(qemu) device_del vmem0
(qemu) info memory-devices
(qemu) object_del mem0
7. Hotplug a new device with a smaller capacity and directly size it to 1GB
(qemu) object_add memory-backend-ram,id=mem0,size=8G,reserve=off
(qemu) device_add virtio-mem-ccw,id=vmem0,memdev=mem0,\
dynamic-memslots=on,requested-size=1G
(qemu) info memory-devices
Memory device [virtio-mem]: "vmem0"
memaddr: 0x100000000
node: 0
requested-size: 1073741824
size: 1073741824
max-size: 8589934592
block-size: 1048576
memdev: /objects/mem0
Trying to use a virtio-mem device backed by hugetlb into a !hugetlb VM
correctly results in the error:
... Memory device uses a bigger page size than initial memory
Note that the virtio-mem driver in Linux will supports 1 MiB (pageblock)
granularity.
Message-ID: <20241219144115.2820241-15-david@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
|
||
|---|---|---|
| .. | ||
| cbor-helpers.c | ||
| Kconfig | ||
| meson.build | ||
| trace-events | ||
| trace.h | ||
| vdpa-dev-pci.c | ||
| vdpa-dev.c | ||
| vhost-backend.c | ||
| vhost-iova-tree.c | ||
| vhost-iova-tree.h | ||
| vhost-scsi-pci.c | ||
| vhost-shadow-virtqueue.c | ||
| vhost-shadow-virtqueue.h | ||
| vhost-stub.c | ||
| vhost-user-base.c | ||
| vhost-user-blk-pci.c | ||
| vhost-user-device-pci.c | ||
| vhost-user-device.c | ||
| vhost-user-fs-pci.c | ||
| vhost-user-fs.c | ||
| vhost-user-gpio-pci.c | ||
| vhost-user-gpio.c | ||
| vhost-user-i2c-pci.c | ||
| vhost-user-i2c.c | ||
| vhost-user-input-pci.c | ||
| vhost-user-input.c | ||
| vhost-user-rng-pci.c | ||
| vhost-user-rng.c | ||
| vhost-user-scmi-pci.c | ||
| vhost-user-scmi.c | ||
| vhost-user-scsi-pci.c | ||
| vhost-user-snd-pci.c | ||
| vhost-user-snd.c | ||
| vhost-user-vsock-pci.c | ||
| vhost-user-vsock.c | ||
| vhost-user.c | ||
| vhost-vdpa.c | ||
| vhost-vsock-common.c | ||
| vhost-vsock-pci.c | ||
| vhost-vsock.c | ||
| vhost.c | ||
| virtio-9p-pci.c | ||
| virtio-acpi.c | ||
| virtio-balloon-pci.c | ||
| virtio-balloon.c | ||
| virtio-blk-pci.c | ||
| virtio-bus.c | ||
| virtio-config-io.c | ||
| virtio-crypto-pci.c | ||
| virtio-crypto.c | ||
| virtio-hmp-cmds.c | ||
| virtio-input-host-pci.c | ||
| virtio-input-pci.c | ||
| virtio-iommu-pci.c | ||
| virtio-iommu.c | ||
| virtio-md-pci.c | ||
| virtio-md-stubs.c | ||
| virtio-mem-pci.c | ||
| virtio-mem-pci.h | ||
| virtio-mem.c | ||
| virtio-mmio.c | ||
| virtio-net-pci.c | ||
| virtio-nsm-pci.c | ||
| virtio-nsm.c | ||
| virtio-pci.c | ||
| virtio-pmem-pci.c | ||
| virtio-pmem-pci.h | ||
| virtio-pmem.c | ||
| virtio-qmp.c | ||
| virtio-qmp.h | ||
| virtio-rng-pci.c | ||
| virtio-rng.c | ||
| virtio-scsi-pci.c | ||
| virtio-serial-pci.c | ||
| virtio-stub.c | ||
| virtio.c | ||