[libvirt] [PATCH] add --nocow option to vol-create and vol-clone

Chunyan Liu cyliu at suse.com
Fri Dec 6 03:56:27 UTC 2013


2013/12/5 Daniel P. Berrange <berrange at redhat.com>

> On Thu, Dec 05, 2013 at 06:35:12PM +0800, Chunyan Liu wrote:
> > Btrfs has terrible 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 (since having copy
> on
> > write for this kind of data is not useful).
> >
> > According to 'chattr' manpage, NOCOW could be set to new or empty file
> only on
> > btrfs, so this patch tries to add a --nocow option to vol-create
> functions and
> > vol-clone function, so that users could have a chance to set NOCOW to a
> new
> > volume if that happens to create on a btrfs like file system.
>
> What effect / impact does setting this flag have from a functional
> POV ?


It implies nodatasum as well. But COW may still happen if a snapshot is
taken.

Following is quoted from:
 https://btrfs.wiki.kernel.org/index.php/FAQ

 Can copy-on-write be turned off for data blocks?

 Yes, there are several ways how to do that.

 Disable it by mounting with nodatacow. This implies nodatasum as well. COW
may
still happen if a snapshot is taken. However COW will still be maintained
for
existing files, because the COW status can be modified only for empty or
newly
created files.

 For an empty file, add the NOCOW file attribute (use chattr utility with
+C),
 or you create a new file in a directory with the NOCOW attribute set (then
the
 new file will inherit this attribute). Now copy the original data into the
 pre-created file, delete original and rename back.

 Why would we not just unconditonally enable it on btrfs so
> it was fast "out of the box" ?


 COW is default feature of Btrfs. There are many advantages with COW
mechanism.
 Other uses may want the COW advantages at the same time we set NOCOW to a
VM
 image.

 But in pool-create and vol-create case, it seems the whole pool is used
 to hold VM images, so maybe we could just disable COW in pool side. Then
all
 vol created in it will be NOCOW. That means, in pool-start phase, if
checking
 fs format is 'btrfs', add '-o nodatacow' option to 'mount' command. That
still need some
 change in libvirt code. How do you think about this way?

Thanks,
Chunyan


> I'm loathe to add a btrfs-specific
> flag to our public API.
>
> Daniel
> --
> |: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/:|
> |: http://libvirt.org              -o-             http://virt-manager.org:|
> |: http://autobuild.org       -o-         http://search.cpan.org/~danberr/:|
> |: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc:|
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20131206/8cda624e/attachment-0001.htm>


More information about the libvir-list mailing list