However, the value will be rounded up to the nearest kibibyte
by libvirt, and may be further rounded to the granularity
supported by the hypervisor. Some hypervisors also enforce a
- minimum, such as
- 4000KiB. <span class='since'><code>unit</code> since
- 0.9.11</span></dd>
+ minimum, such as 4000KiB.
+
+ In the case of crash, optional attribute <code>dumpCore</code>
+ can be used to control whether the guest memory should be
+ included in the generated coredump or not (values "on", "off").
+
+ <span class='since'><code>unit</code> since 0.9.11</span>,
+ <span class='since'><code>dumpCore</code> since 0.10.2
+ (QEMU only)</span></dd>
<dt><code>currentMemory</code></dt>
<dd>The actual allocation of memory for the guest. This value can
be less than the maximum allocation, to allow for ballooning
<interleave>
<element name="memory">
<ref name='scaledInteger'/>
+ <optional>
+ <attribute name="dumpCore">
+ <choice>
+ <value>on</value>
+ <value>off</value>
+ </choice>
+ </attribute>
+ </optional>
</element>
<optional>
<element name="currentMemory">
"ac97",
"ich6")
+VIR_ENUM_IMPL(virDomainMemDump, VIR_DOMAIN_MEM_DUMP_LAST,
+ "default",
+ "on",
+ "off")
+
VIR_ENUM_IMPL(virDomainMemballoonModel, VIR_DOMAIN_MEMBALLOON_MODEL_LAST,
"virtio",
"xen",
&def->mem.cur_balloon, false) < 0)
goto error;
+ /* and info about it */
+ tmp = virXPathString("string(./memory[1]/@dumpCore)", ctxt);
+ if (tmp) {
+ def->mem.dump_core = virDomainMemDumpTypeFromString(tmp);
+
+ if (def->mem.dump_core <= 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("Bad value '%s'"), tmp);
+ goto error;
+ }
+ VIR_FREE(tmp);
+ }
+
if (def->mem.cur_balloon > def->mem.max_balloon) {
/* Older libvirt could get into this situation due to
* rounding; if the discrepancy is less than 1MiB, we silently
xmlIndentTreeOutput = oldIndentTreeOutput;
}
- virBufferAsprintf(buf, " <memory unit='KiB'>%llu</memory>\n",
+ virBufferAddLit(buf, " <memory");
+ if (def->mem.dump_core)
+ virBufferAsprintf(buf, " dumpCore='%s'",
+ virDomainMemDumpTypeToString(def->mem.dump_core));
+ virBufferAsprintf(buf, " unit='KiB'>%llu</memory>\n",
def->mem.max_balloon);
+
virBufferAsprintf(buf, " <currentMemory unit='KiB'>%llu</currentMemory>\n",
def->mem.cur_balloon);
virDomainRedirFilterUsbDevDefPtr *usbdevs;
};
+enum virDomainMemDump {
+ VIR_DOMAIN_MEM_DUMP_DEFAULT = 0,
+ VIR_DOMAIN_MEM_DUMP_ON,
+ VIR_DOMAIN_MEM_DUMP_OFF,
+
+ VIR_DOMAIN_MEM_DUMP_LAST,
+};
+
enum {
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO,
VIR_DOMAIN_MEMBALLOON_MODEL_XEN,
unsigned long long max_balloon; /* in kibibytes */
unsigned long long cur_balloon; /* in kibibytes */
bool hugepage_backed;
+ int dump_core; /* enum virDomainMemDump */
unsigned long long hard_limit; /* in kibibytes */
unsigned long long soft_limit; /* in kibibytes */
unsigned long long min_guarantee; /* in kibibytes */
VIR_ENUM_DECL(virDomainChrSpicevmc)
VIR_ENUM_DECL(virDomainSoundCodec)
VIR_ENUM_DECL(virDomainSoundModel)
+VIR_ENUM_DECL(virDomainMemDump)
VIR_ENUM_DECL(virDomainMemballoonModel)
VIR_ENUM_DECL(virDomainSmbiosMode)
VIR_ENUM_DECL(virDomainWatchdogModel)
virDomainLoadAllConfigs;
virDomainMemballoonModelTypeFromString;
virDomainMemballoonModelTypeToString;
+virDomainMemDumpTypeFromString;
+virDomainMemDumpTypeToString;
virDomainNetDefFree;
virDomainNetFind;
virDomainNetGetActualBandwidth;