From: Wen Congyang <wency@cn.fujitsu.com>
To: Fam Zheng <famz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
vsementsov@virtuozzo.com, qemu-block@nongnu.org,
Jeff Cody <jcody@redhat.com>,
qemu-devel@nongnu.org, mreitz@redhat.com, pbonzini@redhat.com,
jsnow@redhat.com
Subject: Re: [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap"
Date: Mon, 23 Nov 2015 17:24:04 +0800 [thread overview]
Message-ID: <5652DB34.5090300@cn.fujitsu.com> (raw)
In-Reply-To: <20151123091911.GB689@ad.usersys.redhat.com>
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 <famz@redhat.com>
>>> ---
>>> 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.
Thanks
Wen Congyang
>
> Fam
>
>>
>> Thanks
>> Wen Congyang
>>
>>>
>>> /* Publish progress, guest I/O counts as progress too. Note that the
>>> * offset field is an opaque progress value, it is not a disk offset.
>>> @@ -394,7 +395,7 @@ static void coroutine_fn backup_run(void *opaque)
>>> start = 0;
>>> end = DIV_ROUND_UP(job->common.len, BACKUP_CLUSTER_SIZE);
>>>
>>> - job->bitmap = hbitmap_alloc(end, 0);
>>> + job->done_bitmap = bitmap_new(end);
>>>
>>> bdrv_set_enable_write_cache(target, true);
>>> if (target->blk) {
>>> @@ -475,7 +476,7 @@ static void coroutine_fn backup_run(void *opaque)
>>> /* wait until pending backup_do_cow() calls have completed */
>>> qemu_co_rwlock_wrlock(&job->flush_rwlock);
>>> qemu_co_rwlock_unlock(&job->flush_rwlock);
>>> - hbitmap_free(job->bitmap);
>>> + g_free(job->done_bitmap);
>>>
>>> if (target->blk) {
>>> blk_iostatus_disable(target->blk);
>>>
>>
> .
>
next prev parent reply other threads:[~2015-11-23 9:24 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-20 9:59 [Qemu-devel] [PATCH for 2.6 0/3] Bitmap clean-up patches for 2.6 Fam Zheng
2015-11-20 9:59 ` [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap" Fam Zheng
2015-11-20 15:53 ` Vladimir Sementsov-Ogievskiy
2015-11-23 6:42 ` Fam Zheng
2015-11-23 9:01 ` Wen Congyang
2015-11-23 9:19 ` Fam Zheng
2015-11-23 9:24 ` Wen Congyang [this message]
2015-11-23 9:55 ` Fam Zheng
2015-11-23 9:58 ` Wen Congyang
2015-11-23 14:49 ` Paolo Bonzini
2015-11-23 21:00 ` John Snow
2015-11-20 9:59 ` [Qemu-devel] [PATCH for 2.6 2/3] block: Hide HBitmap in block dirty bitmap interface Fam Zheng
2015-11-20 16:08 ` Vladimir Sementsov-Ogievskiy
2015-11-23 6:44 ` Fam Zheng
2015-11-23 21:34 ` John Snow
2015-11-24 2:28 ` Fam Zheng
2015-11-24 9:12 ` Vladimir Sementsov-Ogievskiy
2015-11-25 2:49 ` Fam Zheng
2015-11-24 19:19 ` John Snow
2015-11-20 9:59 ` [Qemu-devel] [PATCH for 2.6 3/3] hbitmap: Drop "granularity" Fam Zheng
2015-11-20 16:22 ` Vladimir Sementsov-Ogievskiy
2015-11-23 6:46 ` Fam Zheng
2015-11-20 16:42 ` [Qemu-devel] [PATCH for 2.6 0/3] Bitmap clean-up patches for 2.6 Vladimir Sementsov-Ogievskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5652DB34.5090300@cn.fujitsu.com \
--to=wency@cn.fujitsu.com \
--cc=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).