[libvirt] [PATCH] add --nocow option to vol-create and vol-clone
Jim Fehlig
jfehlig at suse.com
Wed Dec 18 04:35:36 UTC 2013
Chunyan Liu wrote:
>
> 2013/12/5 Daniel P. Berrange <berrange at redhat.com
> <mailto: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,
Any thoughts on Chunyan's suggestion? It seems mounting a btrfs pool
with nodatacow provides out-of-the-box performance improvement, but
doesn't later preclude creating/using COW volumes from the pool.
Regards,
Jim
More information about the libvir-list
mailing list