qemu-block
[Top][All Lists]
Advanced

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

Re: [PATCH v2 06/20] block/block-copy: add max_chunk and max_workers par


From: Max Reitz
Subject: Re: [PATCH v2 06/20] block/block-copy: add max_chunk and max_workers parameters
Date: Wed, 22 Jul 2020 11:39:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

On 01.06.20 20:11, Vladimir Sementsov-Ogievskiy wrote:
> They will be used for backup.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>  include/block/block-copy.h |  5 +++++
>  block/block-copy.c         | 10 ++++++++--
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/include/block/block-copy.h b/include/block/block-copy.h
> index ada0d99566..600984c733 100644
> --- a/include/block/block-copy.h
> +++ b/include/block/block-copy.h
> @@ -47,6 +47,11 @@ int coroutine_fn block_copy(BlockCopyState *s, int64_t 
> offset, int64_t bytes,
>  /*
>   * Run block-copy in a coroutine, return state pointer. If finished early
>   * returns NULL (@cb is called anyway).
> + *
> + * @max_workers means maximum of parallel coroutines to execute sub-requests,
> + * must be > 0.
> + *
> + * @max_chunk means maximum length for one IO operation. Zero means 
> unlimited.
>   */
>  BlockCopyCallState *block_copy_async(BlockCopyState *s,
>                                       int64_t offset, int64_t bytes,

I only just now notice that @max_workers and @max_chunk were already
added in the previous patch, even though they aren’t used there.  Should
we defer adding them until this patch?

> diff --git a/block/block-copy.c b/block/block-copy.c
> index a0477d90f3..4114d1fd25 100644
> --- a/block/block-copy.c
> +++ b/block/block-copy.c
> @@ -34,6 +34,8 @@ typedef struct BlockCopyCallState {
>      BlockCopyState *s;
>      int64_t offset;
>      int64_t bytes;
> +    int max_workers;
> +    int64_t max_chunk;
>      BlockCopyAsyncCallbackFunc cb;
>  
>      /* State */
> @@ -144,10 +146,11 @@ static BlockCopyTask 
> *block_copy_task_create(BlockCopyState *s,
>                                               int64_t offset, int64_t bytes)
>  {
>      BlockCopyTask *task;
> +    int64_t max_chunk = MIN_NON_ZERO(s->copy_size, call_state->max_chunk);
>  
>      if (!bdrv_dirty_bitmap_next_dirty_area(s->copy_bitmap,
>                                             offset, offset + bytes,
> -                                           s->copy_size, &offset, &bytes))
> +                                           max_chunk, &offset, &bytes))
>      {
>          return NULL;
>      }
> @@ -616,7 +619,7 @@ block_copy_dirty_clusters(BlockCopyCallState *call_state)
>          bytes = end - offset;
>  
>          if (!aio && bytes) {
> -            aio = aio_task_pool_new(BLOCK_COPY_MAX_WORKERS);
> +            aio = aio_task_pool_new(call_state->max_workers);
>          }
>  
>          ret = block_copy_task_run(aio, task);
> @@ -695,6 +698,7 @@ int coroutine_fn block_copy(BlockCopyState *s, int64_t 
> start, int64_t bytes,
>          .s = s,
>          .offset = start,
>          .bytes = bytes,
> +        .max_workers = BLOCK_COPY_MAX_WORKERS,
>      };
>  
>      int ret = block_copy_common(&call_state);
> @@ -726,6 +730,8 @@ BlockCopyCallState *block_copy_async(BlockCopyState *s,
>          .offset = offset,
>          .bytes = bytes,
>          .cb = cb,
> +        .max_workers = max_workers ?: BLOCK_COPY_MAX_WORKERS,

I thought this must be > 0?

> +        .max_chunk = max_chunk,
>      };
>  
>      qemu_coroutine_enter(co);
> 

And I now notice that there’s no newline after block_copy_async().
(Doesn’t concern this patch, of course, but the previous one.)

Max

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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