[libvirt] [PATCH v3 5/5] qemu: Introduce memoryBacking/discard

Ján Tomko jtomko at redhat.com
Thu Apr 19 16:22:49 UTC 2018


On Thu, Apr 19, 2018 at 04:00:27PM +0200, Michal Privoznik wrote:
>https://bugzilla.redhat.com/show_bug.cgi?id=1480668
>
>QEMU has this new feature memory-backend-file.discard-data=yes
>which is a nifty optimization. Basically, when qemu is quitting
>or on memory hotplug it calls munmap() and close() on the file
>that is backing the memory. However, this does not mean kernel
>won't stop touching that part of memory. It still might. With
>this feature enabled we tell kernel: "we don't need this memory
>nor data stored in it". This makes kernel drop the memory
>immediately without trying to sync memory with the mapped file.
>
>Unfortunately, this cannot be turned on by default because we
>can't be sure when users really don't care about what happens to
>data after qemu dies. So it has to be opt-in. As usual, there are
>three places where one can configure memory attributes. This
>patch adds the feature to all of them.
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> docs/formatdomain.html.in                    | 40 +++++++++++++++++++++++++---
> docs/schemas/cputypes.rng                    |  5 ++++
> docs/schemas/domaincommon.rng                | 10 +++++++
> src/conf/domain_conf.c                       | 39 +++++++++++++++++++++++++--
> src/conf/domain_conf.h                       |  3 +++
> src/conf/numa_conf.c                         | 27 +++++++++++++++++++
> src/conf/numa_conf.h                         |  3 +++
> src/libvirt_private.syms                     |  1 +
> src/qemu/qemu_command.c                      | 27 ++++++++++++++++---
> tests/qemuxml2argvdata/hugepages-pages7.args |  3 ++-
> tests/qemuxml2argvdata/hugepages-pages7.xml  |  4 +--
> tests/qemuxml2argvtest.c                     |  3 ++-
> 12 files changed, 152 insertions(+), 13 deletions(-)
>
>diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>index 5e99884dc5..d40536d06f 100644
>--- a/docs/formatdomain.html.in
>+++ b/docs/formatdomain.html.in
>@@ -1016,6 +1016,7 @@
>     <source type="file|anonymous"/>
>     <access mode="shared|private"/>
>     <allocation mode="immediate|ondemand"/>
>+    <discard/>
>   </memoryBacking>
>   ...
> </domain>

>@@ -1063,11 +1064,21 @@
>         suitable for the specific environment at the same time to mitigate
>         the risks described above. <span class="since">Since 1.0.6</span></dd>
>        <dt><code>source</code></dt>
>-       <dd>In this attribute you can switch to file memorybacking or keep default anonymous.</dd>
>+       <dd>In this attribute you can switch to file memorybacking or keep
>+         default anonymous.</dd>
>        <dt><code>access</code></dt>
>-       <dd>Specify if memory is shared or private. This can be overridden per numa node by <code>memAccess</code></dd>
>+       <dd>Specify if memory is shared or private. This can be overridden per
>+         numa node by <code>memAccess</code></dd>
>        <dt><code>allocation</code></dt>

Unrelated trivial changes can be pushed separately.

>        <dd>Specify when allocate the memory</dd>
>+       <dt><code>discard</code></dt>
>+       <dd>When set an supported by hypervisor the memory

s/an/and/

>+         content is discarded just before guest shuts down (or
>+         when DIMM module is unplugged). Please note that this is
>+         just an optimization and is not guaranteed to work in
>+         all cases (e.g. when hypervisor crashes).
>+         <span class="since">Since 4.3.0</span> (QEMU/KVM only)
>+       </dd>
>     </dl>
>
>
>@@ -1606,7 +1617,7 @@
> <cpu>
>   ...
>   <numa>
>-    <cell id='0' cpus='0-3' memory='512000' unit='KiB'/>
>+    <cell id='0' cpus='0-3' memory='512000' unit='KiB' discard='yes'/>
>     <cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/>
>   </numa>
>   ...
>@@ -1632,6 +1643,13 @@
>       <code>memAccess</code> can control whether the memory is to be
>       mapped as "shared" or "private".  This is valid only for
>       hugepages-backed memory and nvdimm modules.
>+
>+      Each <code>cell</code> element can have an optional
>+      attribute <code>discard</code> which fine tunes the discard

'optional discard attribute' sounds better to me than 'optional
attribute discard', but it doesn't matter

>+      feature for given numa node as described under
>+      <a href="#elementsMemoryBacking">Memory Backing</a>.
>+      Accepted values are <code>yes</code> and <code>no</code>.
>+      <span class='since'>Since 4.3.0</span>
>     </p>
>
>     <p>

The rest looks good to me, but you might want Peter's opinion as well.

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180419/fdb698c9/attachment-0001.sig>


More information about the libvir-list mailing list