[PATCH v6 04/16] conf: Introduce virtio-mem <memory/> model

Ján Tomko jtomko at redhat.com
Tue Sep 21 15:20:53 UTC 2021


On a Tuesday in 2021, Michal Privoznik wrote:
>The virtio-mem is paravirtualized mechanism of adding/removing
>memory to/from a VM. A virtio-mem-pci device is split into blocks
>of equal size which are then exposed (all or only a requested
>portion of them) to the guest kernel to use as regular memory.
>Therefore, the device has two important attributes:
>
>  1) block-size, which defines the size of a block
>  2) requested-size, which defines how much memory (in bytes)
>     is the device requested to expose to the guest.
>
>The 'block-size' is configured on command line and immutable
>throughout device's lifetime. The 'requested-size' can be set on
>the command line too, but also is adjustable via monitor. In
>fact, that is how management software places its requests to
>change the memory allocation. If it wants to give more memory to
>the guest it changes 'requested-size' to a bigger value, and if it
>wants to shrink guest memory it changes the 'requested-size' to a
>smaller value. Note, value of zero means that guest should
>release all memory offered by the device. Of course, guest has to
>cooperate. Therefore, there is a third attribute 'size' which is
>read only and reflects how much memory the guest still has. This
>can be different to 'requested-size', obviously. Because of name
>clash, I've named it 'current' and it is dealt with in future
>commits (it is a runtime information anyway).
>
>In the backend, memory for virtio-mem is backed by usual objects:
>memory-backend-{ram,file,memfd} and their size puts the cap on
>the amount of memory that a virtio-mem device can offer to a
>guest. But we are already able to express this info using <size/>
>under <target/>.
>
>Therefore, we need only two more elements to cover 'block-size'
>and 'requested-size' attributes. This is the XML I've came up
>with:
>
>  <memory model='virtio-mem'>
>    <source>
>      <nodemask>1-3</nodemask>
>      <pagesize unit='KiB'>2048</pagesize>
>    </source>
>    <target>
>      <size unit='KiB'>2097152</size>
>      <node>0</node>
>      <block unit='KiB'>2048</block>
>      <requested unit='KiB'>1048576</requested>
>    </target>
>    <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
>  </memory>
>
>I hope by now it is obvious that:
>
>  1) 'requested-size' must be an integer multiple of
>     'block-size', and
>  2) virtio-mem-pci device goes onto PCI bus and thus needs PCI
>     address.
>
>Then there is a limitation that the minimal 'block-size' is
>transparent huge page size (I'll leave this without explanation).
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> docs/formatdomain.rst                         | 38 +++++++++--
> docs/schemas/domaincommon.rng                 | 11 +++
> src/conf/domain_conf.c                        | 53 ++++++++++++++-
> src/conf/domain_conf.h                        |  3 +
> src/conf/domain_validate.c                    | 39 +++++++++++
> src/qemu/qemu_alias.c                         |  1 +
> src/qemu/qemu_command.c                       |  1 +
> src/qemu/qemu_domain.c                        | 10 +++
> src/qemu/qemu_domain_address.c                | 38 ++++++++---
> src/qemu/qemu_process.c                       |  2 +
> src/qemu/qemu_validate.c                      |  8 +++
> src/security/security_apparmor.c              |  1 +
> src/security/security_dac.c                   |  2 +
> src/security/security_selinux.c               |  2 +
> .../memory-hotplug-virtio-mem.xml             | 67 +++++++++++++++++++
> ...emory-hotplug-virtio-mem.x86_64-latest.xml |  1 +
> tests/qemuxml2xmltest.c                       |  1 +
> 17 files changed, 261 insertions(+), 17 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/memory-hotplug-virtio-mem.xml
> create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-virtio-mem.x86_64-latest.xml
>
>diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
>index 0f5d833521..87fa8b617d 100644
>--- a/docs/formatdomain.rst
>+++ b/docs/formatdomain.rst
>@@ -7792,6 +7792,18 @@ Example: usage of the memory devices
>          <size unit='KiB'>524288</size>
>        </target>
>      </memory>
>+     <memory model='virtio-mem'>
>+       <source>
>+         <nodemask>1-3</nodemask>
>+         <pagesize unit='KiB'>2048</pagesize>
>+       </source>
>+       <target>
>+         <size unit='KiB'>2097152</size>
>+         <node>0</node>
>+         <block unit='KiB'>2048</block>
>+         <requested unit='KiB'>1048576</requested>
>+       </target>
>+     </memory>
>    </devices>
>    ...
>
>@@ -7799,7 +7811,8 @@ Example: usage of the memory devices
>    Provide ``dimm`` to add a virtual DIMM module to the guest. :since:`Since
>    1.2.14` Provide ``nvdimm`` model that adds a Non-Volatile DIMM module.
>    :since:`Since 3.2.0` Provide ``virtio-pmem`` model to add a paravirtualized
>-   persistent memory device. :since:`Since 7.1.0`
>+   persistent memory device. :since:`Since 7.1.0` Provide ``virtio-mem`` model
>+   to add paravirtualized memory device. :since:`Since 7.4.0`

7.8.0

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210921/09163ec3/attachment-0001.sig>


More information about the libvir-list mailing list