[libvirt] [PATCH v2 1/2] visrh dump compression support

Daniel P. Berrange berrange at redhat.com
Mon Oct 25 15:18:07 UTC 2010


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

> 
> 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'


Regards,
Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list