Experiments show, that copy_range is not always making things faster. So, to make experimentation simpler, let's add a parameter. Some more perf parameters will be added soon, so here is a new struct. For now, add new backup qmp parameter with x- prefix for the following reasons: - We are going to add more performance parameters, some will be related to the whole block-copy process, some only to background copying in backup (ignored for copy-before-write operations). - On the other hand, we are going to use block-copy interface in other block jobs, which will need performance options as well.. And it should be the same structure or at least somehow related. So, there are too much unclean things about how the interface and now we need the new options mostly for testing. Let's keep them experimental for a while. In do_backup_common() new x-perf parameter handled in a way to make further options addition simpler. We add use-copy-range with default=true, and we'll change the default in further patch, after moving backup to use block-copy. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20210116214705.822267-2-vsementsov@virtuozzo.com> [mreitz: s/5\.2/6.0/] Signed-off-by: Max Reitz <mreitz@redhat.com>
48 lines
1.5 KiB
C
48 lines
1.5 KiB
C
/*
|
|
* block_copy API
|
|
*
|
|
* Copyright (C) 2013 Proxmox Server Solutions
|
|
* Copyright (c) 2019 Virtuozzo International GmbH.
|
|
*
|
|
* Authors:
|
|
* Dietmar Maurer (dietmar@proxmox.com)
|
|
* Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef BLOCK_COPY_H
|
|
#define BLOCK_COPY_H
|
|
|
|
#include "block/block.h"
|
|
#include "qemu/co-shared-resource.h"
|
|
|
|
typedef void (*ProgressBytesCallbackFunc)(int64_t bytes, void *opaque);
|
|
typedef struct BlockCopyState BlockCopyState;
|
|
|
|
BlockCopyState *block_copy_state_new(BdrvChild *source, BdrvChild *target,
|
|
int64_t cluster_size, bool use_copy_range,
|
|
BdrvRequestFlags write_flags,
|
|
Error **errp);
|
|
|
|
void block_copy_set_progress_callback(
|
|
BlockCopyState *s,
|
|
ProgressBytesCallbackFunc progress_bytes_callback,
|
|
void *progress_opaque);
|
|
|
|
void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm);
|
|
|
|
void block_copy_state_free(BlockCopyState *s);
|
|
|
|
int64_t block_copy_reset_unallocated(BlockCopyState *s,
|
|
int64_t offset, int64_t *count);
|
|
|
|
int coroutine_fn block_copy(BlockCopyState *s, int64_t offset, int64_t bytes,
|
|
bool *error_is_read);
|
|
|
|
BdrvDirtyBitmap *block_copy_dirty_bitmap(BlockCopyState *s);
|
|
void block_copy_set_skip_unallocated(BlockCopyState *s, bool skip);
|
|
|
|
#endif /* BLOCK_COPY_H */
|