From: Zenghui Yu <yuzenghui@huawei.com>
To: Peter Xu <peterx@redhat.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, wanghaibin.wang@huawei.com
Subject: Re: [PATCH] kvm: Take into account the unaligned section size when preparing bitmap
Date: Thu, 10 Dec 2020 12:23:47 +0800 [thread overview]
Message-ID: <d737a0db-cf0e-80b2-82dc-7799f0ebd8a1@huawei.com> (raw)
In-Reply-To: <20201209210907.GA3211@xz-x1>
On 2020/12/10 5:09, Peter Xu wrote:
> On Wed, Dec 09, 2020 at 10:33:41AM +0800, Zenghui Yu wrote:
>> Hi Peter,
>>
>> Thanks for having a look at it.
>>
>> On 2020/12/8 23:16, Peter Xu wrote:
>>> Hi, Zenghui,
>>>
>>> On Tue, Dec 08, 2020 at 07:40:13PM +0800, Zenghui Yu wrote:
>>>> The kernel KVM_CLEAR_DIRTY_LOG interface has align requirement on both the
>>>> start and the size of the given range of pages. We have been careful to
>>>> handle the unaligned cases when performing CLEAR on one slot. But it seems
>>>> that we forget to take the unaligned *size* case into account when
>>>> preparing bitmap for the interface, and we may end up clearing dirty status
>>>> for pages outside of [start, start + size).
>>>
>>> Thanks for the patch, though my understanding is that this is not a bug.
>>>
>>> Please have a look at kvm_memslot_init_dirty_bitmap() where we'll allocate the
>>> dirty bitmap to be aligned to 8 bytes (assuming that's the possible max of the
>>> value sizeof(unsigned long)). That exactly covers 64 pages.
>>>
>>> So here as long as start_delta==0 (so the value of "bmap_npages - size / psize"
>>> won't really matter a lot, imho), then we'll definitely have KVMSlot.dirty_bmap
>>> long enough to cover the range we'd like to clear.
>>
>> I agree. But actually I'm not saying that KVMSlot.dirty_bmap is not
>> long enough. What I was having in mind is something like:
>>
>> // psize = qemu_real_host_page_size;
>> // slot.start_addr = 0;
>> // slot.memory_size = 64 * psize;
>>
>> kvm_log_clear_one_slot(slot, as, 0 * psize, 32 * psize); --> [1]
>> kvm_log_clear_one_slot(slot, as, 32 * psize, 32 * psize); --> [2]
>>
>> So the @size is not aligned with 64 pages. Before this patch, we'll
>> clear dirty status for all pages(0-63) through [1]. It looks to me that
>> this violates the caller's expectation since we only want to clear
>> pages(0-31).
>
> Now I see; I think you're right. :)
>
>>
>> As I said, I don't think this will happen in practice -- the migration
>> code should always provide us with a 64-page aligned section (right?).
>
> Yes, migration is the major consumer, and that should be guaranteed indeed, see
> CLEAR_BITMAP_SHIFT_MIN.
>
> Not sure about VGA - that should try to do log clear even without migration,
> but I guess that satisfies the 64-page alignment too, since it's not a huge
> number (256KB). The VGA buffer size could be related to screen resolution,
> then N*1024*768 could still guarantee a safe use of the fast path.
>
>> I'm just thinking about the correctness of the specific algorithm used
>> by kvm_log_clear_one_slot().
>
> Yeah, then I think it's okay to have this, just in case someday we'll hit it.
>
> Acked-by: Peter Xu <peterx@redhat.com>
Thanks for that.
> (It would be nicer if above example could be squashed into commit message)
I'll squash it if v2 is needed.
Thanks,
Zenghui
next prev parent reply other threads:[~2020-12-10 4:25 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-08 11:40 [PATCH] kvm: Take into account the unaligned section size when preparing bitmap Zenghui Yu
2020-12-08 15:16 ` Peter Xu
2020-12-09 2:33 ` Zenghui Yu
2020-12-09 21:09 ` Peter Xu
2020-12-10 4:23 ` Zenghui Yu [this message]
2020-12-10 1:46 ` zhukeqian
2020-12-10 2:08 ` Peter Xu
2020-12-10 2:53 ` zhukeqian
2020-12-10 3:31 ` Zenghui Yu
2020-12-10 14:50 ` Peter Xu
2020-12-11 1:13 ` zhukeqian
2020-12-11 15:25 ` Peter Xu
2020-12-14 2:14 ` zhukeqian
2020-12-14 15:36 ` Peter Xu
2020-12-15 7:23 ` zhukeqian
2020-12-15 7:39 ` Zenghui Yu
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=d737a0db-cf0e-80b2-82dc-7799f0ebd8a1@huawei.com \
--to=yuzenghui@huawei.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wanghaibin.wang@huawei.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.