qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] qemu-img: set nocow flag to new file


From: Chunyan Liu
Subject: Re: [Qemu-devel] [PATCH] qemu-img: set nocow flag to new file
Date: Fri, 15 Nov 2013 12:05:50 +0800




2013/11/14 Kevin Wolf <address@hidden>
Am 14.11.2013 um 09:15 hat Chunyan Liu geschrieben:
> Set NOCOW flag to newly created images to solve performance issues on btrfs.
>
> 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).
>
> Signed-off-by: Chunyan Liu <address@hidden>
> ---
>  block/raw-posix.c     |    6 ++++++
>  block/vdi.c           |    7 +++++++
>  block/vmdk.c          |    7 +++++++
>  include/qemu-common.h |    9 +++++++++
>  4 files changed, 29 insertions(+), 0 deletions(-)
>
> diff --git a/block/raw-posix.c b/block/raw-posix.c
> index f6d48bb..4a3e9d0 100644
> --- a/block/raw-posix.c
> +++ b/block/raw-posix.c
> @@ -1072,6 +1072,12 @@ static int raw_create(const char *filename, QEMUOptionParameter *options,
>          result = -errno;
>          error_setg_errno(errp, -result, "Could not create file");
>      } else {
> +#ifdef __linux__
> +        /* set NOCOW flag to solve performance issue on fs like btrfs */
> +        int attr;
> +        attr = FS_NOCOW_FL;
> +        ioctl(fd, FS_IOC_SETFLAGS, &attr);
> +#endif

ioctl() returning an error is ignored. This is probably okay because
we're only talking about an optimisation here. Perhaps worth a word or
two in the comment.

However, while this ioctl is setting FS_NOCOW_FL, it is at the same time
clearing all other flags. This doesn't look right.
 
Yes, strictly it should be GETFLAGS and then SETFLAGS. Here because it does
FS_IOC_SETFLAGS right after creating the file, and checking the qemu_open()
parameter, in fact no FLAGS has been set, so just setting FS_NOCOW_FL directly.
I can revise that if it's not good.
 

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]