On Mon, Sep 20, 2010 at 11:53:02AM -0500, Anthony Liguori wrote:
> cache=none
>
> All read and write requests SHOULD avoid any type of caching in the
> host. Any write request MUST complete after the next level of storage
> reports that the write request has completed. A flush from the guest
> MUST complete after all pending I/O requests for the guest have been
> completed.
>
> As an implementation detail, with the raw format, these guarantees are
> only in place for preallocated images. Sparse images do not provide as
> strong of a guarantee.
That's not how cache=none ever worked nor works currently.
But discussion the current cache modes is rather mood as they try to
map multi-dimension behaviour difference into a single options. I have
some patches that I need to finish up a bit more that will give you
your no caching enabled mode, but I don't think mapping cache=none to it
will do anyone a favour.
With the split between the guest visible write-cache-enable (WCE) flag, and
the host-specific "use O_DIRECT" and "ignore cache flushes" flags we'll
get the following modes:
| WC enable | WC disable
-----------------------------------------------
direct | |
buffer | |
buffer + ignore flush | |
currently we only have:
cache=none direct + WC enable
cache=writeback buffer + WC enable
cache=writethrough buffer + WC disable
cache=unsafe buffer + ignore flush + WC enable
splitting these up is important because we want to migrate between
hosts that can support direct I/O or not without requiring guest visible
state changes, and also because we want to use direct I/O with guest
that were installed using cache=unsafe without stopping the guest.
It also allows the guest to change the WC enable/disable flag, which
they can do for real IDE/SCSI hardware. And it allows Anthony's belowed
no caching at all mode, which actually is useful for guest that can not
deal with volatile write caches.