[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to
From: |
Wen Congyang |
Subject: |
Re: [Qemu-block] [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap" |
Date: |
Mon, 23 Nov 2015 17:58:21 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 11/23/2015 05:55 PM, Fam Zheng wrote:
> 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.
I don't test it. It is just a suggestion.
Thanks
Wen Congyang
>
> Fam
> .
>
Re: [Qemu-block] [Qemu-devel] [PATCH for 2.6 1/3] backup: Use Bitmap to replace "s->bitmap", John Snow, 2015/11/23
[Qemu-block] [PATCH for 2.6 2/3] block: Hide HBitmap in block dirty bitmap interface, Fam Zheng, 2015/11/20