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

Chunyan Liu cyliu at suse.com
Tue Dec 10 09:10:09 UTC 2013


2013/12/6 Chunyan Liu <cyliu at suse.com>

>
>
>
> 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?
>

Daniel, about the nocow issue, could we do *mount* -o *nodatacow* in
pool-start if checked
that fs format is btrfs?

Chunyan


>
> 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/20131210/04d87439/attachment-0001.htm>


More information about the libvir-list mailing list