Skip to content

arm: dirty page logging support for ARMv7

Mario Smarduch kvm linux-arm-kernel 10 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v11 Latest6 patches 7 repliesIn review
  2. v106 patches 2 repliesSuperseded
  3. v94 patches 25 repliesSuperseded
Earlier versions · 7
VersionPostedPatchesRepliesStatus
v84 patches0 repliesSuperseded
v74 patches25 repliesSuperseded
v64 patches21 repliesSuperseded
v54 patches8 repliesSuperseded
v45 patches2 repliesSuperseded
v34 patches3 repliesSuperseded
v15 patches8 repliesSuperseded

Changes in v11 from the cover letter

- addressed wanghaibin comments
- addressed Christoffers comments

Patches in v11 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/6KVM: Add architecture-specific TLB flush implementationsinclude/linux/kvm_host.h virt/kvm/Kconfig virt/kvm/kvm_main.c+8 -01 reply
2/6KVM: Add generic implementation of kvm_vm_ioctl_get_dirty_logarch/arm/kvm/Kconfig arch/arm/kvm/arm.c arch/arm64/kvm/Kconfig +13 more+112 -924 replies
3/6arm: KVM: Add ARMv7 API to flush TLBsarch/arm/include/asm/kvm_asm.h arch/arm/include/asm/kvm_host.h arch/arm/kvm/Kconfig +1 more+26 -00 replies
4/6arm: KVM: Add initial dirty page locking infrastructurearch/arm/include/asm/kvm_host.h arch/arm/include/asm/kvm_mmu.h arch/arm/include/asm/pgtable-3level.h +2 more+161 -00 replies
5/6arm: KVM: dirty log read write protect supportarch/arm/kvm/Kconfig arch/arm/kvm/arm.c arch/arm/kvm/mmu.c+24 -10 replies
6/6arm: KVM: ARMv7 dirty page logging 2nd stage page faultarch/arm/kvm/mmu.c+39 -62 replies

Reviews trailers per patch

1 of 6 patches has a Reviewed-by or Acked-by.

PatchCornelia Huck
1/6
2/6A-b
3/6
4/6
5/6
6/6

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v11 thread

Cover letter [PATCH v11 0/6] arm: dirty page logging support for ARMv7

This patch adds support for ARMv7 dirty page logging. Some functions of dirty page logging have been split to generic and arch specific implementations, details below. Dirty page logging is one of serveral features required for live migration, live migration has been tested for ARMv7.

Testing:
- QEMU machvirt, VExpress - Exynos 5440, FastModels - lmbench + dirty guest memory cycling.
- ARMv8 Foundation Model/kvmtool - Due to slight overlap in 2nd stage handlers did a basic bringup and memory test.
- x86_64 QEMU basic migration on same platform.

See https://github.com/mjsmar/arm-migration-howto for details testing and setup (see README).

The patch affects armv7,armv8, mips, ia64, powerpc, s390, x86_64. Patch series has been compiled for affected architectures:

- x86_64 - defconfig
- ia64 - ia64-linux-gcc4.6.3 - defconfig, ia64 Kconfig defines BROKEN worked around that to make sure new changes don't break build. Eventually build breaks due to other reasons.
- mips - mips64-linux-gcc4.6.3 - malta_kvm_defconfig
- ppc - powerpc64-linux-gcc4.6.3 - pseries_defconfig
- s390 - s390x-linux-gcc4.6.3 - defconfig
- armv8 - aarch64-linux-gnu-gcc4.8.1 - defconfig

ARMv7 Dirty page logging support overivew-
- initially write protects VM RAM memory regions - 2nd stage page tables
- add support to read dirty page log and again write protect the dirty pages
- second stage page table for next pass.
- second stage huge page are dissolved into small page tables to keep track of dirty pages at page granularity. Tracking at huge page granularity limits migration to an almost idle system.
- In the event migration is canceled, normal behavior is resumed huge pages are rebuilt over time.

- Future Work
o Completed ARMv8 additions - need to validate, on hardware juno
o ARMv8 Validation test - with no migration support yet, implement replication of memory DB using dirty page logging in HA environment.

Changes since v10:
- addressed wanghaibin comments
- addressed Christoffers comments

Changes since v9:
- Split patches into generic and architecture specific variants for TLB Flushing and dirty log read (patches 1,2 & 3,4,5,6)
- rebased to 3.16.0-rc1
- Applied Christoffers comments.

Mario Smarduch (6):
KVM: Add architecture-specific TLB flush implementations
KVM: Add generic implementation of kvm_vm_ioctl_get_dirty_log
arm: KVM: Add ARMv7 API to flush TLBs
arm: KVM: Add initial dirty page locking infrastructure
arm: KVM: dirty log read write protect support
arm: KVM: ARMv7 dirty page logging 2nd stage page fault

 arch/arm/include/asm/kvm_asm.h        |    1 +
 arch/arm/include/asm/kvm_host.h       |   14 +++
 arch/arm/include/asm/kvm_mmu.h        |   20 ++++
 arch/arm/include/asm/pgtable-3level.h |    1 +
 arch/arm/kvm/Kconfig                  |    1 +
 arch/arm/kvm/arm.c                    |   13 ++-
 arch/arm/kvm/interrupts.S             |   12 ++
 arch/arm/kvm/mmu.c                    |  196 ++++++++++++++++++++++++++++++++-
 arch/arm64/kvm/Kconfig                |    1 +
 arch/ia64/kvm/Kconfig                 |    1 +
 arch/ia64/kvm/kvm-ia64.c              |    2 +-
 arch/mips/kvm/Kconfig                 |    1 +
 arch/mips/kvm/mips.c                  |    2 +-
 arch/powerpc/kvm/Kconfig              |    1 +
 arch/powerpc/kvm/book3s.c             |    2 +-
 arch/powerpc/kvm/booke.c              |    2 +-
 arch/s390/kvm/Kconfig                 |    1 +
 arch/s390/kvm/kvm-s390.c              |    2 +-
 arch/x86/kvm/x86.c                    |   86 ---------------
 include/linux/kvm_host.h              |    7 ++
 virt/kvm/Kconfig                      |    6 +
 virt/kvm/kvm_main.c                   |   95 ++++++++++++++++
 22 files changed, 369 insertions(+), 98 deletions(-)
Signature · 1 line
1.7.9.5