Re: [PATCH v8 0/7] KVM: arm64: Enable ring-based dirty memory tracking

2022-11-06 Thread Gavin Shan

Hi Marc,

On 11/7/22 12:08 AM, Marc Zyngier wrote:

On Fri, 04 Nov 2022 23:40:42 +,
Gavin Shan  wrote:


This series enables the ring-based dirty memory tracking for ARM64.
The feature has been available and enabled on x86 for a while. It
is beneficial when the number of dirty pages is small in a checkpointing
system or live migration scenario. More details can be found from
fb04a1eddb1a ("KVM: X86: Implement ring-based dirty memory tracking").

This series is applied to v6.1.rc3, plus commit c227590467cb ("KVM:
Check KVM_CAP_DIRTY_LOG_{RING, RING_ACQ_REL} prior to enabling them").
The commit is currently in Marc's 'fixes' branch, targeting v6.1.rc4/5.


This is starting to look good to me, and my only concerns are around
the documentation and the bit of nitpicking on patch 4. If we can
converge quickly on that, I'd like to queue this quickly and leave it
to simmer in -next.



Ok, thanks.


v7: https://lore.kernel.org/kvmarm/20221031003621.164306-1-gs...@redhat.com/
v6: https://lore.kernel.org/kvmarm/20221011061447.131531-1-gs...@redhat.com/
v5: https://lore.kernel.org/all/20221005004154.83502-1-gs...@redhat.com/
v4: https://lore.kernel.org/kvmarm/20220927005439.21130-1-gs...@redhat.com/
v3: https://lore.kernel.org/r/20220922003214.276736-1-gs...@redhat.com
v2: https://lore.kernel.org/lkml/YyiV%2Fl7O23aw5aaO@xz-m1.local/T/
v1: https://lore.kernel.org/lkml/20220819005601.198436-1-gs...@redhat.com

Testing
===
(1) kvm/selftests/dirty_log_test
(2) Live migration by QEMU


Could you point to a branch that has the required QEMU changes?



I'm still under progress to figure out migrating the (extra) dirty pages,
which is tracked by the backup bitmap. So the branch is pre-mature.

  g...@github.com:gwshan/qemu.git ("kvm/arm64_dirtyring")

Thanks,
Gavin

___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm


Re: [PATCH v8 0/7] KVM: arm64: Enable ring-based dirty memory tracking

2022-11-06 Thread Marc Zyngier
On Fri, 04 Nov 2022 23:40:42 +,
Gavin Shan  wrote:
> 
> This series enables the ring-based dirty memory tracking for ARM64.
> The feature has been available and enabled on x86 for a while. It
> is beneficial when the number of dirty pages is small in a checkpointing
> system or live migration scenario. More details can be found from
> fb04a1eddb1a ("KVM: X86: Implement ring-based dirty memory tracking").
> 
> This series is applied to v6.1.rc3, plus commit c227590467cb ("KVM:
> Check KVM_CAP_DIRTY_LOG_{RING, RING_ACQ_REL} prior to enabling them").
> The commit is currently in Marc's 'fixes' branch, targeting v6.1.rc4/5.

This is starting to look good to me, and my only concerns are around
the documentation and the bit of nitpicking on patch 4. If we can
converge quickly on that, I'd like to queue this quickly and leave it
to simmer in -next.

> v7: https://lore.kernel.org/kvmarm/20221031003621.164306-1-gs...@redhat.com/
> v6: https://lore.kernel.org/kvmarm/20221011061447.131531-1-gs...@redhat.com/
> v5: https://lore.kernel.org/all/20221005004154.83502-1-gs...@redhat.com/
> v4: https://lore.kernel.org/kvmarm/20220927005439.21130-1-gs...@redhat.com/
> v3: https://lore.kernel.org/r/20220922003214.276736-1-gs...@redhat.com
> v2: https://lore.kernel.org/lkml/YyiV%2Fl7O23aw5aaO@xz-m1.local/T/
> v1: https://lore.kernel.org/lkml/20220819005601.198436-1-gs...@redhat.com
> 
> Testing
> ===
> (1) kvm/selftests/dirty_log_test
> (2) Live migration by QEMU

Could you point to a branch that has the required QEMU changes?

Thanks,

M.

-- 
Without deviation from the norm, progress is not possible.
___
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm


[PATCH v8 0/7] KVM: arm64: Enable ring-based dirty memory tracking

2022-11-04 Thread Gavin Shan
This series enables the ring-based dirty memory tracking for ARM64.
The feature has been available and enabled on x86 for a while. It
is beneficial when the number of dirty pages is small in a checkpointing
system or live migration scenario. More details can be found from
fb04a1eddb1a ("KVM: X86: Implement ring-based dirty memory tracking").

This series is applied to v6.1.rc3, plus commit c227590467cb ("KVM:
Check KVM_CAP_DIRTY_LOG_{RING, RING_ACQ_REL} prior to enabling them").
The commit is currently in Marc's 'fixes' branch, targeting v6.1.rc4/5.

v7: https://lore.kernel.org/kvmarm/20221031003621.164306-1-gs...@redhat.com/
v6: https://lore.kernel.org/kvmarm/20221011061447.131531-1-gs...@redhat.com/
v5: https://lore.kernel.org/all/20221005004154.83502-1-gs...@redhat.com/
v4: https://lore.kernel.org/kvmarm/20220927005439.21130-1-gs...@redhat.com/
v3: https://lore.kernel.org/r/20220922003214.276736-1-gs...@redhat.com
v2: https://lore.kernel.org/lkml/YyiV%2Fl7O23aw5aaO@xz-m1.local/T/
v1: https://lore.kernel.org/lkml/20220819005601.198436-1-gs...@redhat.com

Testing
===
(1) kvm/selftests/dirty_log_test
(2) Live migration by QEMU

Changelog
=
v8:
  * Pick review-by and ack-by   (Peter/Sean)
  * Drop chunk of code to clear KVM_REQ_DIRTY_RING_SOFT_FULL
in kvm_dirty_ring_reset(). Add comments to say the event
will be cleared by the VCPU thread next time when it enters
the guest. All other changes related to kvm_dirty_ring_reset()
are dropped in PATCH[v8 1/7].   
(Sean/Peter/Marc)
  * Drop PATCH[v7 3/7] since it has been merged (Marc/Oliver)
  * Document the order of DIRTY_RING_{ACQ_REL, WITH_BITMAP},
add check to ensure no memslots are created when
DIRTY_RING_WITH_BITMAP is enabled, and add weak function
kvm_arch_allow_write_without_running_vcpu() in PATCH[v8 3/7] (Oliver)
  * Only keep ourself out of non-running-vcpu radar when vgic/its
tables are being saved in PATCH[v8 4/7]  (Marc/Sean)
v7:
  * Cut down #ifdef, avoid using 'container_of()', move the
dirty-ring check after KVM_REQ_VM_DEAD, add comments
for kvm_dirty_ring_check_request(), use tab character
for KVM event definitions in kvm_host.h in PATCH[v7 01](Sean)
  * Add PATCH[v7 03] to recheck if the capability has
been advertised prior to enable RING/RING_ACEL_REL (Sean)
  * Improve the description about capability RING_WITH_BITMAP,
rename kvm_dirty_ring_exclusive() to kvm_use_dirty_bitmap()
in PATCH[v7 04/09] 
(Peter/Oliver/Sean)
  * Add PATCH[v7 05/09] to improve no-running-vcpu report  (Marc/Sean)
  * Improve commit messages(Sean/Oliver)
v6:
  * Add CONFIG_HAVE_KVM_DIRTY_RING_WITH_BITMAP, for arm64
to advertise KVM_CAP_DIRTY_RING_WITH_BITMAP in
PATCH[v6 3/8]  (Oliver/Peter)
  * Add helper kvm_dirty_ring_exclusive() to check if
traditional bitmap-based dirty log tracking is
exclusive to dirty-ring in PATCH[v6 3/8]   (Peter)
  * Enable KVM_CAP_DIRTY_RING_WITH_BITMAP in PATCH[v6 5/8] (Gavin)
v5:
  * Drop empty stub kvm_dirty_ring_check_request() (Marc/Peter)
  * Add PATCH[v5 3/7] to allow using bitmap, indicated by
KVM_CAP_DIRTY_LOG_RING_ALLOW_BITMAP(Marc/Peter)
v4:
  * Commit log improvement (Marc)
  * Add helper kvm_dirty_ring_check_request()  (Marc)
  * Drop ifdef for kvm_cpu_dirty_log_size()(Marc)
v3:
  * Check KVM_REQ_RING_SOFT_RULL inside kvm_request_pending()  (Peter)
  * Move declaration of kvm_cpu_dirty_log_size()   (test-robot)
v2:
  * Introduce KVM_REQ_RING_SOFT_FULL   (Marc)
  * Changelog improvement  (Marc)
  * Fix dirty_log_test without knowing host page size  (Drew)

Gavin Shan (7):
  KVM: x86: Introduce KVM_REQ_DIRTY_RING_SOFT_FULL
  KVM: Move declaration of kvm_cpu_dirty_log_size() to kvm_dirty_ring.h
  KVM: Support dirty ring in conjunction with bitmap
  KVM: arm64: Enable ring-based dirty memory tracking
  KVM: selftests: Use host page size to map ring buffer in
dirty_log_test
  KVM: selftests: Clear dirty ring states between two modes in
dirty_log_test
  KVM: selftests: Automate choosing dirty ring size in dirty_log_test

 Documentation/virt/kvm/api.rst   | 35 ++---
 arch/arm64/include/uapi/asm/kvm.h|  1 +
 arch/arm64/kvm/Kconfig   |  2 +
 arch/arm64/kvm/arm.c |  3 ++
 arch/arm64/kvm/mmu.c | 15 ++
 arch/arm64/kvm/vgic/vgic-its.c   |  3 ++
 arch/arm64/kvm/vgic/vgic-mmio-v3.c   |  7 +++
 arch/x86/include/asm/kvm_host.h  |  2 -
 arch/x86/kvm/x86.c   | 15