[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 42/51] ram: Pass RAMBlock to bitmap_sync
From: |
Juan Quintela |
Subject: |
Re: [Qemu-devel] [PATCH 42/51] ram: Pass RAMBlock to bitmap_sync |
Date: |
Fri, 24 Mar 2017 09:29:20 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Yang Hongyang <address@hidden> wrote:
> On 2017/3/24 4:45, Juan Quintela wrote:
>> We change the meaning of start to be the offset from the beggining of
>> the block.
>>
>> @@ -701,7 +701,7 @@ static void migration_bitmap_sync(RAMState *rs)
>> qemu_mutex_lock(&rs->bitmap_mutex);
>> rcu_read_lock();
>> QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
>> - migration_bitmap_sync_range(rs, block->offset, block->used_length);
>> + migration_bitmap_sync_range(rs, block, 0, block->used_length);
>
> Since RAMBlock been passed to bitmap_sync, could we remove
> param 'block->used_length' either?
Hi
good catch.
I had that removed, and then realized that I want to synchronize parts
of the bitmap, not the whole one. That part of the series is still not
done.
Right now we do something like (I have simplified a lot of details):
while(true) {
foreach(block)
bitmap_sync(block)
foreach(page)
if(dirty(page))
page_send(page)
}
If you have several terabytes of RAM that is too ineficient, because
when we arrive to the page_send(page), it is possible that it is already
dirty again, and we have to send it twice. So, the idea is to change to
something like:
while(true) {
foreach(block)
bitmap_sync(block)
foreach(block)
foreach(64pages)
bitmap_sync(64pages)
foreach(page of the 64)
if (dirty)
page_send(page)
}
Where 64 is a magic number, I have to test what is the good value.
Basically it should be a multiple of sizeof(long) and a multiple/divisor
of host page size.
Reason of changing the for to be for each block, is that then we can
easily put bitmaps by hostpage size, instead of having to had it for
target page size.
Thanks for the review, Juan.
Later, Juan.
- Re: [Qemu-devel] [PATCH 39/51] ram: We don't need MigrationState parameter anymore, (continued)
Re: [Qemu-devel] [PATCH 42/51] ram: Pass RAMBlock to bitmap_sync, Dr. David Alan Gilbert, 2017/03/30
[Qemu-devel] [PATCH 45/51] ram: Use page number instead of an address for the bitmap operations, Juan Quintela, 2017/03/23
[Qemu-devel] [PATCH 43/51] ram: ram_discard_range() don't use the mis parameter, Juan Quintela, 2017/03/23