[libvirt] [PATCHv2] Add unsafe cache mode support for disk driver
Eric Blake
eblake at redhat.com
Wed Sep 21 21:14:38 UTC 2011
On 09/21/2011 10:29 AM, Oskari Saarenmaa wrote:
> QEMU 0.13 introduced cache=unsafe for -drive, this patch exposes
> it in the libvirt layer.
>
> * Introduced a new QEMU capability flag ($prefix_CACHE_UNSAFE),
> as even if $prefix_CACHE_V2 is set, we can't known if unsafe
> is supported.
>
> * qemuhelptest prints test case name on failure.
> ---
> Updated patch based on Osier Yang's comments and rebased it to 3abadf82
I'm thinking that this is enough of a feature to delay until after we
decide whether to do a rapid-turnaround 0.9.6 for the qemu workaround.
> +++ b/docs/formatdomain.html.in
> @@ -996,9 +996,10 @@
> <li>
> The optional<code>cache</code> attribute controls the
> cache mechanism, possible values are "default", "none",
> - "writethrough", "writeback", and "directsync". "directsync"
> - is like "writethrough", but it bypasses the host page
> - cache.
> + "writethrough", "writeback", "directsync" (like
> + "writethrough", but it bypasses the host page cache) and
> + "unsafe" (host may cache all disk io and sync requests from
> + guest are ignored).
> <span class="since">Since 0.6.0</span>
Tweak the since wording:
<span class="since">Since 0.6.0, "unsafe" since 0.9.x</span>
(where x is 6 or 7, depending on delay)
> +++ b/src/qemu/qemu_capabilities.c
> @@ -137,6 +137,8 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
> "usb-redir",
> "usb-hub",
> "no-shutdown",
> +
> + "cache-unsafe", /* 75 */
> );
>
> struct qemu_feature_flags {
> @@ -918,6 +920,8 @@ qemuCapsComputeCmdFlags(const char *help,
> qemuCapsSet(flags, QEMU_CAPS_DRIVE_CACHE_V2);
> if (strstr(help, "directsync"))
> qemuCapsSet(flags, QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
> + if (strstr(help, "|unsafe"))
> + qemuCapsSet(flags, QEMU_CAPS_DRIVE_CACHE_UNSAFE);
I'd feel a bit better if we did strstr(help, "cache="), then strchr(str,
'\n'), then validated that strstr(str, "|unsafe") falls before the
strchr result, since "unsafe" is a string likely to appear elsewhere in
future -help output.
> +++ b/tests/qemuhelptest.c
> @@ -77,8 +77,8 @@ static int testHelpStrParsing(const void *data)
>
> if (STRNEQ(got, expected)) {
> fprintf(stderr,
> - "Computed flags do not match: got %s, expected %s\n",
> - got, expected);
> + "%s: computed flags do not match: got %s, expected %s\n",
> + info->name, got, expected);
This addition of info->name throughout failed tests output is useful as
an independent patch, that we could push even now.
Overall, looking pretty good. Hopefully we'll settle out the 0.9.6
decision soon, at which point a v3 of this patch should be worth including.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list