[libvirt] [PATCH v2 1/2] visrh dump compression support
KAMEZAWA Hiroyuki
kamezawa.hiroyu at jp.fujitsu.com
Mon Oct 25 23:40:46 UTC 2010
On Mon, 25 Oct 2010 16:18:07 +0100
"Daniel P. Berrange" <berrange at 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
More information about the libvir-list
mailing list