[libvirt] [PATCH V2] storagevol: add nocow to vol xml
Chun Yan Liu
cyliu at suse.com
Thu Jul 10 03:11:16 UTC 2014
>>> On 7/9/2014 at 07:25 PM, in message <53BD26A7.9090404 at redhat.com>, Ján
Tomko<jtomko at redhat.com> wrote:
> On 07/08/2014 08:47 AM, Chunyan Liu wrote:
> > Add 'nocow' to storage volume xml so that user can have an option
> > to set NOCOW flag to the newly created volume. It's useful on btrfs
> > file system to enhance performance.
> > Btrfs has low performance when hosting VM images, even more when the guest
> > in those VM are also using btrfs as file system. One way to mitigate this
> > bad performance is to turn off COW attributes on VM files. Generally, there
> > are two ways to turn off NOCOW on btrfs: a) by mounting fs with nodatacow,
> s/turn off NOCOW/turn off COW/
> > then all newly created files will be NOCOW. b) per file. Add the NOCOW file
> > attribute. It could only be done to empty or new files.
> > This patch tries the second way, according to 'nocow' option, it could set
> > NOCOW flag per file:
> > for raw file images, handle 'nocow' in libvirt code; for non-raw file
> > pass 'nocow=on' option to qemu-img, and let qemu-img to handle that (requires
> > qemu-img version >= 2.1).
> > Signed-off-by: Chunyan Liu <cyliu at suse.com>
> > ---
> > Changes:
> > - now qemu-img can handle 'nocow=on' option, just pass 'nocow=on' to
> > qemu-img for non-raw file images. No need to handle all file type
> > in libvirt code.
> > Pervious version is here:
> > http://www.redhat.com/archives/libvir-list/2013-December/msg01257.html
> > ---
> > docs/formatstorage.html.in | 7 +++++++
> > docs/schemas/storagevol.rng | 5 +++++
> Adding a test case to storagevolxml2argvtest would be nice. Also, by adding
> the volume XML to storagevolxml2xmlin for this test, it will get validated
> against the rng schema in 'storagevolschematest'.
Thanks. Will add it.
> > src/conf/storage_conf.c | 3 +++
> > src/storage/storage_backend.c | 22 ++++++++++++++++++++++
> > src/util/virstoragefile.h | 1 +
> > 5 files changed, 38 insertions(+)
> > diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
> > index 1cd82b4..e8862bf 100644
> > --- a/docs/formatstorage.html.in
> > +++ b/docs/formatstorage.html.in
> > @@ -385,6 +385,7 @@
> > <label>virt_image_t</label>
> > </permissions>
> > <compat>1.1</compat>
> > + <nocow/>
> > <features>
> > <lazy_refcounts/>
> > </features>
> > @@ -424,6 +425,12 @@
> > 1.1 is used. If omitted, qemu-img default is used.
> > <span class="since">Since 1.1.0</span>
> > </dd>
> > + <dt><code>nocow</code></dt>
> > + <dd>Turn off COW of the newly created volume. So far, this is only
> > + to a file image in btrfs file system. It will improve performance
> s/to a file/for a file/
> > + the file image is used in VM. To create non-raw file images, it
> > + requires QEMU version since 2.1. <span class="since">Since
> Otherwise looks good to me.
More information about the libvir-list