[libvirt] patch: allow disk cache mode to be specified in a domain's xml definition.

Daniel P. Berrange berrange at redhat.com
Tue Jan 20 10:13:14 UTC 2009


On Mon, Jan 19, 2009 at 10:06:47PM -0500, john cooper wrote:
> >There have been two differnet syntaxes supported in QEMU for caching,
> >so we need to detect this and switch between them. Originally there
> >was just
> >
> >  cache=on & cache=off (writethrough and no caching)
> >
> >Now it supports
> >
> >  cache=writeback, cache=writethrough and cache=none|off
> >
> >So, if we detect the earlier syntax we need to raise an error if
> >the user requested writeback (or translate it to 'cache=off' for
> >safety sake).
> I was trying to address part of this as above. But in general
> I don't see how we can force an error in advance of launching
> qemu without some information beforehand of whether we're
> dealing with an old vs. new syntax qemu. One way to do so is
> to test launch "qemu --help" and let it tell us what it accepts.

Bingo :-)  We already have this problem for many QEMU arguments are
do exactly that.

If you loook at src/qemu_conf.c, you'll find a nice method called
qemudExtractVersionInfo, which runs 'qemu -help' and checks for
certain interesting command line arguments :-) So in src/qemu_conf.h
just define a new enum value QEMUD_CMD_FLAG_NEW_CACHE and then
check for something in the help output as per existing examples.

> Alternatively we can just let qemu error exit in the case an
> old/new qemu version doesn't recognize the alternate syntax.
> 
> Other than the above I believe I've incorporated all of
> your remaining suggestions. Attached is an updated patch.

One note about the enums - rather than adding old style CACHEON
CACHE_OFF options to the main enum in domain_conf, just create
a second enum in the qemu_conf.c file for recording the mapping
of virDomainDiskCache values to old style QEMU arguments values

So in domain_conf.c you'd have

 VIR_ENUM_IMPL(virDomainDiskCacheNew, VIR_DOMAIN_DISK_CACHE_LAST,
               "default", "off", "writeback", "writethrough")

While for the legacy qemu syntax can define

 VIR_ENUM_DECL(virDomainDiskCacheOld)
 VIR_ENUM_IMPL(virDomainDiskCacheOld, VIR_DOMAIN_DISK_CACHE_LAST,
               "default", "off", "off", "on")


Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.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