aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kletzander <mkletzan@redhat.com>2012-08-15 09:51:58 +0200
committerMartin Kletzander <mkletzan@redhat.com>2012-09-20 16:41:07 +0200
commit78f3666fe929428016ce55694094f65efb0b9a0f (patch)
treef6289e9b43fc1a41f408424621aae11bad6b4865 /src/conf/domain_conf.c
parentQEMU Tests for reboot-timeout (diff)
downloadlibvirt-78f3666fe929428016ce55694094f65efb0b9a0f.tar.gz
libvirt-78f3666fe929428016ce55694094f65efb0b9a0f.tar.bz2
libvirt-78f3666fe929428016ce55694094f65efb0b9a0f.zip
Add support for limiting guest coredump
Sometimes when guest machine crashes, coredump can get huge due to the guest memory. This can be limited using madvise(2) system call and is being used in QEMU hypervisor. This patch adds an option for configuring that in the domain XML and related documentation.
Diffstat (limited to 'src/conf/domain_conf.c')
-rw-r--r--src/conf/domain_conf.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d6f2ebfe2..4b20b72f3 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -381,6 +381,11 @@ VIR_ENUM_IMPL(virDomainSoundModel, VIR_DOMAIN_SOUND_MODEL_LAST,
"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",
@@ -8524,6 +8529,18 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
&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
@@ -13266,8 +13283,13 @@ virDomainDefFormatInternal(virDomainDefPtr def,
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);