On Mon, 25 Oct 2010 16:18:07 +0100
"Daniel P. Berrange" <berrange(a)redhat.com> wrote:
On Mon, Oct 25, 2010 at 09:04:10AM +0900, KAMEZAWA Hiroyuki wrote:
> Sorry, email was empty..
>
> ==
> Add dump_image_format[] to qemu.conf and support compressed dump
> at virsh dump. coredump compression is important for saving disk space
> in an environment where multiple guest run.
> (In general, "disk space for dump" is specially allocated and will be
> a dead space in the system. It's used only at emergency. So, it's better
> to have both of save_image_format and dump_image_format. "save" is done
> in scheduled manner with enough calculated disk space for it.)
>
> This code reuses some of save_image_format[] and supports the same format
> with virsh save.
>
> ---
> src/qemu/qemu.conf | 4 ++++
> src/qemu/qemu_conf.c | 11 +++++++++++
> src/qemu/qemu_conf.h | 1 +
> src/qemu/qemu_driver.c | 30 +++++++++++++++++++++++++-----
> 4 files changed, 41 insertions(+), 5 deletions(-)
This all looks good, but it is also neccessary to add the new
option to the augeas files libvirtd_qemu.aug and
test_libvirtd_qemu.aug
Ah, I missed it. I'll look into.
>
> Index: libvirt-0.8.4/src/qemu/qemu_conf.c
> ===================================================================
> --- libvirt-0.8.4.orig/src/qemu/qemu_conf.c
> +++ libvirt-0.8.4/src/qemu/qemu_conf.c
> @@ -324,6 +324,17 @@ int qemudLoadDriverConfig(struct qemud_d
> }
> }
>
> + p = virConfGetValue (conf, "dump_image_format");
> + CHECK_TYPE ("dump_image_format", VIR_CONF_STRING);
> + if (p && p->str) {
> + VIR_FREE(driver->dumpImageFormat);
> + if (!(driver->dumpImageFormat = strdup(p->str))) {
> + virReportOOMError();
> + virConfFree(conf);
> + return -1;
> + }
> + }
> +
> p = virConfGetValue (conf, "hugetlbfs_mount");
> CHECK_TYPE ("hugetlbfs_mount", VIR_CONF_STRING);
> if (p && p->str) {
> Index: libvirt-0.8.4/src/qemu/qemu_conf.h
> ===================================================================
> --- libvirt-0.8.4.orig/src/qemu/qemu_conf.h
> +++ libvirt-0.8.4/src/qemu/qemu_conf.h
> @@ -159,6 +159,7 @@ struct qemud_driver {
> virSecurityDriverPtr securitySecondaryDriver;
>
> char *saveImageFormat;
> + char *dumpImageFormat;
>
> pciDeviceList *activePciHostdevs;
>
> Index: libvirt-0.8.4/src/qemu/qemu.conf
> ===================================================================
> --- libvirt-0.8.4.orig/src/qemu/qemu.conf
> +++ libvirt-0.8.4/src/qemu/qemu.conf
> @@ -144,7 +144,11 @@
> # saving a domain in order to save disk space; the list above is in descending
> # order by performance and ascending order by compression ratio.
> #
> +# save_image_format is used when you use 'virsh save' at scheduled saving.
> +# dump_image_format is used when you use 'virsh dump' at emergency
crashdump.
> +#
> # save_image_format = "raw"
> +# dump_image_format = "raw"
>
> # If provided by the host and a hugetlbfs mount point is configured,
> # a guest may request huge page backing. When this mount point is
> Index: libvirt-0.8.4/src/qemu/qemu_driver.c
> ===================================================================
> --- libvirt-0.8.4.orig/src/qemu/qemu_driver.c
> +++ libvirt-0.8.4/src/qemu/qemu_driver.c
> @@ -5716,11 +5716,15 @@ static int qemudDomainCoreDump(virDomain
> int resume = 0, paused = 0;
> int ret = -1, fd = -1;
> virDomainEventPtr event = NULL;
> - const char *args[] = {
> - "cat",
> - NULL,
> - };
> + int compress;
> qemuDomainObjPrivatePtr priv;
> + /*
> + * We reuse "save" flag for "dump" here. Then, we can
support the same
> + * format in "save" and "dump".
> + */
> + compress = QEMUD_SAVE_FORMAT_RAW;
> + if (driver->dumpImageFormat)
> + compress = qemudSaveCompressionTypeFromString(driver->dumpImageFormat);
>
> qemuDriverLock(driver);
> vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> @@ -5787,9 +5791,25 @@ static int qemudDomainCoreDump(virDomain
> }
>
> qemuDomainObjEnterMonitorWithDriver(driver, vm);
> - ret = qemuMonitorMigrateToFile(priv->mon,
> + if (compress == QEMUD_SAVE_FORMAT_RAW) {
> + const char *args[] = {
> + "cat",
> + NULL,
> + };
> + ret = qemuMonitorMigrateToFile(priv->mon,
> QEMU_MONITOR_MIGRATE_BACKGROUND,
> args, path, 0);
> + } else {
> + const char *prog = qemudSaveCompressionTypeToString(compress);
> + const char *args[] = {
> + prog,
> + "-c",
> + NULL,
> + };
> + ret = qemuMonitorMigrateToFile(priv->mon,
> + QEMU_MONITOR_MIGRATE_BACKGROUND,
> + args, path, 0);
> + }
The whitespace indentation looks wrong here, seems to be using
tabs instead of spaces. You can verify coding style by running
'make syntax-check'
Ok. and check my .emacs..
Thank you for review.
Regards,
-Kame