<devices>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
+ <stats period='10'/>
</memballoon>
</devices>
</domain></pre>
<li>'xen' — default with Xen</li>
</ul>
</dd>
+ <dt><code>period</code></dt>
+ <dd>
+ <p>
+ The optional <code>period</code> allows the QEMU virtio memory
+ balloon driver to provide statistics through the <code>virsh
+ dommemstat [domain]</code> command.
+ <span class='since'>Since 1.1.1, requires QEMU 1.5</span>
+ </p>
+ </dd>
</dl>
<h4><a name="elementsRng">Random number generator device</a></h4>
static virDomainMemballoonDefPtr
virDomainMemballoonDefParseXML(const xmlNodePtr node,
+ xmlXPathContextPtr ctxt,
unsigned int flags)
{
char *model;
virDomainMemballoonDefPtr def;
+ xmlNodePtr save = ctxt->node;
if (VIR_ALLOC(def) < 0)
return NULL;
model = virXMLPropString(node, "model");
if (model == NULL) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ virReportError(VIR_ERR_XML_ERROR, "%s",
_("balloon memory must contain model name"));
goto error;
}
+
if ((def->model = virDomainMemballoonModelTypeFromString(model)) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
+ virReportError(VIR_ERR_XML_ERROR,
_("unknown memory balloon model '%s'"), model);
goto error;
}
+ ctxt->node = node;
+ if (virXPathUInt("string(./stats/@period)", ctxt, &def->period) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("invalid statistics collection period"));
+ goto error;
+ }
+
if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0)
goto error;
cleanup:
VIR_FREE(model);
+ ctxt->node = save;
return def;
error:
goto error;
break;
case VIR_DOMAIN_DEVICE_MEMBALLOON:
- if (!(dev->data.memballoon = virDomainMemballoonDefParseXML(node, flags)))
+ if (!(dev->data.memballoon = virDomainMemballoonDefParseXML(node,
+ ctxt,
+ flags)))
goto error;
break;
case VIR_DOMAIN_DEVICE_NVRAM:
}
if (n > 0) {
virDomainMemballoonDefPtr memballoon =
- virDomainMemballoonDefParseXML(nodes[0], flags);
+ virDomainMemballoonDefParseXML(nodes[0], ctxt, flags);
if (!memballoon)
goto error;
unsigned int flags)
{
const char *model = virDomainMemballoonModelTypeToString(def->model);
+ bool noopts = true;
if (!model) {
virReportError(VIR_ERR_INTERNAL_ERROR,
virBufferAddLit(buf, ">\n");
if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
return -1;
- virBufferAddLit(buf, " </memballoon>\n");
- } else {
- virBufferAddLit(buf, "/>\n");
+ noopts = false;
}
+ if (def->period) {
+ if (noopts)
+ virBufferAddLit(buf, ">\n");
+ virBufferAsprintf(buf, " <stats period='%u'/>\n", def->period);
+ noopts = false;
+ }
+
+ if (noopts)
+ virBufferAddLit(buf, "/>\n");
+ else
+ virBufferAddLit(buf, " </memballoon>\n");
+
return 0;
}
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ <memballoon model='virtio'>
+ <address type='pci' domain='0' bus='0' slot='18' function='0'/>
+ <stats period='10'/>
+ </memballoon>
+ </devices>
+</domain>