[PATCH 0/4] Batch register access for live migration optimization

Yize Wang posted 4 patches 1 week, 1 day ago
hw/intc/arm_gicv3_kvm.c       | 1087 ++++++++++++++++++++++++++++++++++-------
linux-headers/asm-arm64/kvm.h |    9 +
2 files changed, 925 insertions(+), 171 deletions(-)
[PATCH 0/4] Batch register access for live migration optimization
Posted by Yize Wang 1 week, 1 day ago
This series adds batch register access support to QEMU's KVM GICv3
register synchronization path, reducing syscall overhead during
ARM64 live migration.

Currently, QEMU issues one ioctl per register when saving/restoring VGIC
state. On large VM configurations this means tens of thousands of syscalls,
where lock acquisition and context switch overhead dominates migration
downtime. Thus, we provide a batch register method to allow userspace
read/write multiple distributor and redistributor registers in a single call.
In this way, we can significantly reduce syscalls and migration downtime.

All batch paths probe kernel capability at runtime and fall back to the
original one-by-one path when the kernel does not support batch access,
ensuring backward compatibility.

This series depends on the corresponding kernel patches that add
KVM_DEV_ARM_VGIC_GRP_BATCH_REGS support.

Test the VM migration time under pressure conditions.
The VM specifications for migration are as follows:
- VM use 4-K page;
- the number of VCPU is 160;
- the total memory is 320Gigabit;
- use 'Redis SET-benchmark' to pressurize VM;

Performance results (3-run average, ms):

    | Metric              | Without patch | With patch | Improvement |
    |---------------------|---------------|------------|-------------|
    | Migration downtime  |        536    |     321    |     40%     |
    | Source (total)      |        344    |     230    |     33%     |
    |   - VGIC put        |        158    |      40    |     75%     |
    |   - VGIC get        |        120    |      19    |     84%     |
    | Destination (total) |        192    |      91    |     53%     |
    |   - VGIC put        |        132    |      27    |     80%     |

Yize Wang (4):
  Sync KVM ARM VGIC batch register UAPI to QEMU headers
  hw/intc/arm_gicv3_kvm: Add batch helper structures and functions
  hw/intc/arm_gicv3_kvm: Refactor kvm_arm_gicv3_put for batch register access
  hw/intc/arm_gicv3_kvm: Refactor kvm_arm_gicv3_get for batch register access

 hw/intc/arm_gicv3_kvm.c       | 1087 ++++++++++++++++++++++++++++++++++-------
 linux-headers/asm-arm64/kvm.h |    9 +
 2 files changed, 925 insertions(+), 171 deletions(-)

References:
[1] [PATCH 0/2] Batch register access for live migration optimization
    https://lore.kernel.org/kvmarm/20260918081930.4014735-1-wangyize7@huawei.com/T/#t