[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->b
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap" |
Date: |
Mon, 23 Nov 2015 17:55:06 +0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Mon, 11/23 17:24, Wen Congyang wrote:
> On 11/23/2015 05:19 PM, Fam Zheng wrote:
> > On Mon, 11/23 17:01, Wen Congyang wrote:
> >> On 11/20/2015 05:59 PM, Fam Zheng wrote:
> >>> "s->bitmap" tracks done sectors, we only check bit states without using
> >>> any
> >>> iterator which HBitmap is good for. Switch to "Bitmap" which is simpler
> >>> and
> >>> more memory efficient.
> >>>
> >>> Meanwhile, rename it to done_bitmap, to reflect the intention.
> >>>
> >>> Signed-off-by: Fam Zheng <address@hidden>
> >>> ---
> >>> block/backup.c | 11 ++++++-----
> >>> 1 file changed, 6 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/block/backup.c b/block/backup.c
> >>> index 3b39119..d408f98 100644
> >>> --- a/block/backup.c
> >>> +++ b/block/backup.c
> >>> @@ -22,6 +22,7 @@
> >>> #include "qapi/qmp/qerror.h"
> >>> #include "qemu/ratelimit.h"
> >>> #include "sysemu/block-backend.h"
> >>> +#include "qemu/bitmap.h"
> >>>
> >>> #define BACKUP_CLUSTER_BITS 16
> >>> #define BACKUP_CLUSTER_SIZE (1 << BACKUP_CLUSTER_BITS)
> >>> @@ -47,7 +48,7 @@ typedef struct BackupBlockJob {
> >>> BlockdevOnError on_target_error;
> >>> CoRwlock flush_rwlock;
> >>> uint64_t sectors_read;
> >>> - HBitmap *bitmap;
> >>> + unsigned long *done_bitmap;
> >>> QLIST_HEAD(, CowRequest) inflight_reqs;
> >>> } BackupBlockJob;
> >>>
> >>> @@ -113,7 +114,7 @@ static int coroutine_fn
> >>> backup_do_cow(BlockDriverState *bs,
> >>> cow_request_begin(&cow_request, job, start, end);
> >>>
> >>> for (; start < end; start++) {
> >>> - if (hbitmap_get(job->bitmap, start)) {
> >>> + if (test_bit(start, job->done_bitmap)) {
> >>> trace_backup_do_cow_skip(job, start);
> >>> continue; /* already copied */
> >>> }
> >>> @@ -164,7 +165,7 @@ static int coroutine_fn
> >>> backup_do_cow(BlockDriverState *bs,
> >>> goto out;
> >>> }
> >>>
> >>> - hbitmap_set(job->bitmap, start, 1);
> >>> + bitmap_set(job->done_bitmap, start, 1);
> >>
> >> You can use set_bit() here.
> >
> > Why? I think bitmap_set is a better match with bitmap_new below.
>
> set_bit() is quicker than bitmap_set() if you only set one bit.
>
How much quicker is it? This doesn't sound convincing enough for me to lose the
readability.
Fam
Re: [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap", John Snow, 2015/11/23
[Qemu-devel] [PATCH for 2.6 3/3] hbitmap: Drop "granularity", Fam Zheng, 2015/11/20
[Qemu-devel] [PATCH for 2.6 2/3] block: Hide HBitmap in block dirty bitmap interface, Fam Zheng, 2015/11/20