[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH] vpc: unlock Coroutine lock to make IO submit Co
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-block] [PATCH] vpc: unlock Coroutine lock to make IO submit Concurrently |
Date: |
Fri, 15 Mar 2019 16:05:22 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 |
On 15/03/19 15:04, Zhengui li wrote:
> Concurrent IO becomes serial IO because of the qemu Coroutine lock,
> which reduce IO performance severely.
>
> So unlock Coroutine lock before bdrv_co_pwritev and
> bdrv_co_preadv to fix it.
>
> Signed-off-by: Zhengui li <address@hidden>
> ---
> block/vpc.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/block/vpc.c b/block/vpc.c
> index 52ab717..1133855 100644
> --- a/block/vpc.c
> +++ b/block/vpc.c
> @@ -639,8 +639,10 @@ vpc_co_preadv(BlockDriverState *bs, uint64_t offset,
> uint64_t bytes,
> qemu_iovec_reset(&local_qiov);
> qemu_iovec_concat(&local_qiov, qiov, bytes_done, n_bytes);
>
> + qemu_co_mutex_unlock(&s->lock);
> ret = bdrv_co_preadv(bs->file, image_offset, n_bytes,
> &local_qiov, 0);
> + qemu_co_mutex_lock(&s->lock);
> if (ret < 0) {
> goto fail;
> }
> @@ -697,8 +699,10 @@ vpc_co_pwritev(BlockDriverState *bs, uint64_t offset,
> uint64_t bytes,
> qemu_iovec_reset(&local_qiov);
> qemu_iovec_concat(&local_qiov, qiov, bytes_done, n_bytes);
>
> + qemu_co_mutex_unlock(&s->lock);
> ret = bdrv_co_pwritev(bs->file, image_offset, n_bytes,
> &local_qiov, 0);
> + qemu_co_mutex_lock(&s->lock);
> if (ret < 0) {
> goto fail;
> }
>
This should be okay, because vpc.c is somewhat simple-minded and it
doesn't recycle unused blocks in the middle of the file.
Reviewed-by: Paolo Bonzini <address@hidden>
Paolo