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").
The generic part has been comprehensive, meaning there isn't too much work, needed to extend it to ARM64.
- PATCH[1] introduces KVM_REQ_RING_SOFT_FULL for x86 - PATCH[2] enables the feature on ARM64 - PATCH[3-5] improves kvm/selftests/dirty_log_test
v1: https://lore.kernel.org/lkml/20220819005601.198436-1-gshan@redhat.com
Testing =======
(1) kvm/selftests/dirty_log_test (2) Live migration by QEMU
Changelog ========= v2: * Introduce KVM_REQ_RING_SOFT_FULL (Marc) * Changelog improvement (Marc) * Fix dirty_log_test without knowing host page size (Drew)
Gavin Shan (5): KVM: x86: Introduce KVM_REQ_RING_SOFT_FULL 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 | 2 +- arch/arm64/include/uapi/asm/kvm.h | 1 + arch/arm64/kvm/Kconfig | 1 + arch/arm64/kvm/arm.c | 8 +++ arch/x86/kvm/x86.c | 5 +- include/linux/kvm_host.h | 1 + tools/testing/selftests/kvm/dirty_log_test.c | 53 ++++++++++++++------ tools/testing/selftests/kvm/lib/kvm_util.c | 2 +- virt/kvm/dirty_ring.c | 4 ++ 9 files changed, 59 insertions(+), 18 deletions(-)