diff options
author | Martin Kletzander <mkletzan@redhat.com> | 2012-08-15 09:51:58 +0200 |
---|---|---|
committer | Martin Kletzander <mkletzan@redhat.com> | 2012-09-20 16:41:07 +0200 |
commit | 78f3666fe929428016ce55694094f65efb0b9a0f (patch) | |
tree | f6289e9b43fc1a41f408424621aae11bad6b4865 /src | |
parent | QEMU Tests for reboot-timeout (diff) | |
download | libvirt-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')
-rw-r--r-- | src/conf/domain_conf.c | 24 | ||||
-rw-r--r-- | src/conf/domain_conf.h | 10 | ||||
-rw-r--r-- | src/libvirt_private.syms | 2 |
3 files changed, 35 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); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index d719d57da..fae699f7d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1320,6 +1320,14 @@ struct _virDomainRedirFilterDef { 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, @@ -1641,6 +1649,7 @@ struct _virDomainDef { 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 */ @@ -2177,6 +2186,7 @@ VIR_ENUM_DECL(virDomainChrTcpProtocol) 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) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 0b538950e..0b6068d44 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -426,6 +426,8 @@ virDomainLiveConfigHelperMethod; virDomainLoadAllConfigs; virDomainMemballoonModelTypeFromString; virDomainMemballoonModelTypeToString; +virDomainMemDumpTypeFromString; +virDomainMemDumpTypeToString; virDomainNetDefFree; virDomainNetFind; virDomainNetGetActualBandwidth; |