]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: introduce 'autodeflate' attribute for memballoon device
authorDmitry Andreev <dandreev@virtuozzo.com>
Fri, 8 Jan 2016 10:45:05 +0000 (13:45 +0300)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 12 Jan 2016 15:48:21 +0000 (10:48 -0500)
Excessive memory balloon inflation can cause invocation of OOM-killer,
when Linux is under severe memory pressure. QEMU memballoon device
has a feature to release some memory at the last moment before some
process will be get killed by OOM-killer.

Introduce a new optional balloon device attribute 'autodeflate' to
enable or disable this feature.

docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h

index 889e721b9c592cd28268536726eccc1ed21ea151..b3187bb0a7f946c95d5f2fbc7ac4c11513302a64 100644 (file)
@@ -5962,6 +5962,16 @@ qemu-kvm -net nic,model=? /dev/null
           <li>'xen' &mdash; default with Xen</li>
         </ul>
       </dd>
+      <dt><code>autodeflate</code></dt>
+      <dd>
+        <p>
+          The optional <code>autodeflate</code> attribute allows to
+          enable/disable (values "on"/"off", respectively) the ability of the
+          QEMU virtio memory balloon to release some memory at the last moment
+          before a guest's process get killed by Out of Memory killer.
+          <span class="since">Since 1.3.1, QEMU and KVM only</span>
+        </p>
+      </dd>
       <dt><code>period</code></dt>
       <dd>
         <p>
index 7c47f60feb4f53093935eca27ae79ded15ed52dd..5deb17b0316e28e510487e8e87a65d4706fc5f91 100644 (file)
           <value>none</value>
         </choice>
       </attribute>
+      <optional>
+        <attribute name="autodeflate">
+          <ref name="virOnOff"/>
+        </attribute>
+      </optional>
       <interleave>
         <optional>
           <ref name="alias"/>
index 72018a3128b4eea873a3cd49d5c400cf627cc1b4..1e78da1cf75c3bc54c8e0945dd337148d64d5225 100644 (file)
@@ -11354,6 +11354,7 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
                                unsigned int flags)
 {
     char *model;
+    char *deflate;
     virDomainMemballoonDefPtr def;
     xmlNodePtr save = ctxt->node;
     unsigned int period = 0;
@@ -11374,6 +11375,13 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
         goto error;
     }
 
+    if ((deflate = virXMLPropString(node, "autodeflate")) &&
+        (def->autodeflate = virTristateSwitchTypeFromString(deflate)) <= 0) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("invalid autodeflate attribute value '%s'"), deflate);
+        goto error;
+    }
+
     ctxt->node = node;
     if (virXPathUInt("string(./stats/@period)", ctxt, &period) < -1) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
@@ -11392,6 +11400,7 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
 
  cleanup:
     VIR_FREE(model);
+    VIR_FREE(deflate);
 
     ctxt->node = save;
     return def;
@@ -17342,6 +17351,15 @@ virDomainMemballoonDefCheckABIStability(virDomainMemballoonDefPtr src,
         return false;
     }
 
+    if (src->autodeflate != dst->autodeflate) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Target balloon autodeflate attribute value "
+                         "'%s' does not match source '%s'"),
+                       virTristateSwitchTypeToString(dst->autodeflate),
+                       virTristateSwitchTypeToString(src->autodeflate));
+        return false;
+    }
+
     if (!virDomainDeviceInfoCheckABIStability(&src->info, &dst->info))
         return false;
 
@@ -20523,6 +20541,11 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
     }
 
     virBufferAsprintf(buf, "<memballoon model='%s'", model);
+
+    if (def->autodeflate != VIR_TRISTATE_SWITCH_ABSENT)
+        virBufferAsprintf(buf, " autodeflate='%s'",
+                          virTristateSwitchTypeToString(def->autodeflate));
+
     virBufferAdjustIndent(&childrenBuf, indent + 2);
 
     if (def->period)
index a3573d44ca720c9fdfad85b57e963bc7c45cb16d..014100980b0bde11440b801996b52a80b653ff76 100644 (file)
@@ -1635,6 +1635,7 @@ struct _virDomainMemballoonDef {
     int model;
     virDomainDeviceInfo info;
     int period; /* seconds between collections */
+    int autodeflate; /* enum virTristateSwitch */
 };
 
 struct _virDomainNVRAMDef {