Messages in this thread | | | Subject | Re: [PATCH v1 3/5] KVM: selftests: Dirty host pages in dirty_log_test | From | Gavin Shan <> | Date | Mon, 22 Aug 2022 16:29:52 +1000 |
| |
Hi Drew,
On 8/19/22 3:28 PM, Andrew Jones wrote: > On Fri, Aug 19, 2022 at 08:55:59AM +0800, Gavin Shan wrote: >> It's assumed that 1024 host pages, instead of guest pages, are dirtied >> in each iteration in guest_code(). The current implementation misses >> the case of mismatched page sizes in host and guest. For example, >> ARM64 could have 64KB page size in guest, but 4KB page size in host. >> (TEST_PAGES_PER_LOOP / 16), instead of TEST_PAGES_PER_LOOP, host pages >> are dirtied in every iteration. >> >> Fix the issue by touching all sub-pages when we have mismatched >> page sizes in host and guest. > > I'll let the dirty-log test authors decide what's best to do for this > test, but I'd think we should let the guest continue dirtying its > pages without knowledge of the host pages. Then, adjust the host test > code to assert all sub-pages, other than the ones it expects the guest > to have written, remain untouched. >
I don't think what is clarified in the change log is correct. The current implementation already had the logic to handle the mismatched page sizes in vm_dirty_log_verify() where 'step' is used for it by fetching value from vm_num_host_pages(mode, 1). Please ignore this patch for now, as explained below.
The issue I have is the 'dirty_log_test' hangs when I have 4KB host page size and 64KB guest page size. It seems the vcpu doesn't exit due to full ring buffer state or kick-off. I will have more investigations to figure out the root cause.
# ./dirty_log_test -M dirty-ring -m 7 Setting log mode to: 'dirty-ring' Test iterations: 32, interval: 10 (ms) Testing guest mode: PA-bits:40, VA-bits:48, 64K pages guest physical test memory offset: 0xffbffc0000 vcpu stops because vcpu is kicked out... Notifying vcpu to continue vcpu continues now. Iteration 1 collected 1903 pages <no more output>
'dirty_lot_test' works well when both host and guest have 4KB page size.
# ./dirty_log_test -M dirty-ring -m 5 Setting log mode to: 'dirty-ring' Test iterations: 32, interval: 10 (ms) Testing guest mode: PA-bits:40, VA-bits:48, 4K pages guest physical test memory offset: 0xffbfffc000 vcpu stops because vcpu is kicked out... Notifying vcpu to continue vcpu continues now. : Dirtied 1006592 pages Total bits checked: dirty (1020487), clear (7106070), track_next (974104)
Thanks, Gavin
| |