[PATCH v6 0/4] Dirty Ring support (Libvirt)

huangy81@chinatelecom.cn posted 4 patches 2 years, 5 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/cover.1637395523.git.huangy81@chinatelecom.cn
There is a newer version of this series
docs/formatdomain.rst                         | 18 +++--
docs/schemas/domaincommon.rng                 | 10 +++
src/conf/domain_conf.c                        | 76 ++++++++++++++++++-
src/conf/domain_conf.h                        |  4 +
src/qemu/qemu_capabilities.c                  |  2 +
src/qemu/qemu_capabilities.h                  |  1 +
src/qemu/qemu_command.c                       | 40 +++++++++-
.../caps_2.11.0.s390x.xml                     |  1 +
.../caps_2.11.0.x86_64.xml                    |  1 +
.../caps_2.12.0.aarch64.xml                   |  1 +
.../caps_2.12.0.ppc64.xml                     |  1 +
.../caps_2.12.0.s390x.xml                     |  1 +
.../caps_2.12.0.x86_64.xml                    |  1 +
.../qemucapabilitiesdata/caps_3.0.0.ppc64.xml |  1 +
.../caps_3.0.0.riscv32.xml                    |  1 +
.../caps_3.0.0.riscv64.xml                    |  1 +
.../qemucapabilitiesdata/caps_3.0.0.s390x.xml |  1 +
.../caps_3.0.0.x86_64.xml                     |  1 +
.../qemucapabilitiesdata/caps_3.1.0.ppc64.xml |  1 +
.../caps_3.1.0.x86_64.xml                     |  1 +
.../caps_4.0.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_4.0.0.ppc64.xml |  1 +
.../caps_4.0.0.riscv32.xml                    |  1 +
.../caps_4.0.0.riscv64.xml                    |  1 +
.../qemucapabilitiesdata/caps_4.0.0.s390x.xml |  1 +
.../caps_4.0.0.x86_64.xml                     |  1 +
.../caps_4.1.0.x86_64.xml                     |  1 +
.../caps_4.2.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_4.2.0.ppc64.xml |  1 +
.../qemucapabilitiesdata/caps_4.2.0.s390x.xml |  1 +
.../caps_4.2.0.x86_64.xml                     |  1 +
.../caps_5.0.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_5.0.0.ppc64.xml |  1 +
.../caps_5.0.0.riscv64.xml                    |  1 +
.../caps_5.0.0.x86_64.xml                     |  1 +
.../qemucapabilitiesdata/caps_5.1.0.sparc.xml |  1 +
.../caps_5.1.0.x86_64.xml                     |  1 +
.../caps_5.2.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_5.2.0.ppc64.xml |  1 +
.../caps_5.2.0.riscv64.xml                    |  1 +
.../qemucapabilitiesdata/caps_5.2.0.s390x.xml |  1 +
.../caps_5.2.0.x86_64.xml                     |  1 +
.../caps_6.0.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_6.0.0.s390x.xml |  1 +
.../caps_6.0.0.x86_64.xml                     |  1 +
.../caps_6.1.0.x86_64.xml                     |  1 +
.../caps_6.2.0.aarch64.xml                    |  1 +
.../qemucapabilitiesdata/caps_6.2.0.ppc64.xml |  1 +
.../caps_6.2.0.x86_64.xml                     |  1 +
...fault-cpu-kvm-virt-4.2.aarch64-latest.args |  3 +-
.../aarch64-features-sve.aarch64-latest.args  |  3 +-
.../channel-unix-guestfwd.x86_64-latest.args  |  3 +-
.../clock-timer-armvtimer.aarch64-latest.args |  3 +-
.../console-virtio-unix.x86_64-latest.args    |  3 +-
...u-Icelake-Server-pconfig.x86_64-3.1.0.args |  3 +-
...-Icelake-Server-pconfig.x86_64-latest.args |  3 +-
.../cpu-host-model.x86_64-2.11.0.args         |  3 +-
.../cpu-host-model.x86_64-2.12.0.args         |  3 +-
.../cpu-host-model.x86_64-3.0.0.args          |  3 +-
.../cpu-host-model.x86_64-3.1.0.args          |  3 +-
.../cpu-host-model.x86_64-4.0.0.args          |  3 +-
.../cpu-host-model.x86_64-4.1.0.args          |  3 +-
.../cpu-host-model.x86_64-4.2.0.args          |  3 +-
.../cpu-host-model.x86_64-5.0.0.args          |  3 +-
.../cpu-host-model.x86_64-5.1.0.args          |  3 +-
.../cpu-host-model.x86_64-5.2.0.args          |  3 +-
.../cpu-host-model.x86_64-6.0.0.args          |  3 +-
.../cpu-host-model.x86_64-6.1.0.args          |  3 +-
.../cpu-host-model.x86_64-latest.args         |  3 +-
.../cpu-tsc-frequency.x86_64-4.0.0.args       |  3 +-
...ult-video-type-aarch64.aarch64-latest.args |  3 +-
...default-video-type-ppc64.ppc64-latest.args |  3 +-
...default-video-type-s390x.s390x-latest.args |  3 +-
.../disk-cdrom-network.x86_64-2.12.0.args     |  3 +-
.../disk-cdrom-network.x86_64-latest.args     |  3 +-
.../disk-network-http.x86_64-latest.args      |  3 +-
.../disk-serial.x86_64-latest.args            |  3 +-
.../graphics-spice-timeout.x86_64-latest.args |  3 +-
.../hugepages-memaccess3.x86_64-latest.args   |  3 +-
.../intel-iommu-aw-bits.x86_64-latest.args    |  3 +-
...ntel-iommu-caching-mode.x86_64-latest.args |  3 +-
...ntel-iommu-device-iotlb.x86_64-latest.args |  3 +-
.../intel-iommu-eim.x86_64-latest.args        |  3 +-
.../launch-security-s390-pv.s390x-latest.args |  3 +-
...v-missing-platform-info.x86_64-2.12.0.args |  3 +-
.../launch-security-sev.x86_64-2.12.0.args    |  3 +-
.../launch-security-sev.x86_64-6.0.0.args     |  3 +-
...memory-default-hugepage.x86_64-latest.args |  3 +-
.../memfd-memory-numa.x86_64-latest.args      |  3 +-
...mory-hotplug-virtio-mem.x86_64-latest.args |  3 +-
...mory-hotplug-virtio-pmem.x86_64-5.2.0.args |  3 +-
...ory-hotplug-virtio-pmem.x86_64-latest.args |  3 +-
.../os-firmware-bios.x86_64-latest.args       |  3 +-
...re-efi-no-enrolled-keys.x86_64-latest.args |  3 +-
...os-firmware-efi-secboot.x86_64-latest.args |  3 +-
.../os-firmware-efi.x86_64-latest.args        |  3 +-
.../parallel-unix-chardev.x86_64-latest.args  |  3 +-
...ault-cpu-kvm-pseries-2.7.ppc64-latest.args |  3 +-
...ault-cpu-kvm-pseries-3.1.ppc64-latest.args |  3 +-
...ault-cpu-kvm-pseries-4.2.ppc64-latest.args |  3 +-
...t-cpu-kvm-ccw-virtio-2.7.s390x-latest.args |  3 +-
...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args |  3 +-
...rtcard-passthrough-unix.x86_64-latest.args |  3 +-
.../usb-redir-unix.x86_64-latest.args         |  3 +-
...vhost-user-fs-fd-memory.x86_64-latest.args |  3 +-
.../virtio-rng-builtin.x86_64-5.2.0.args      |  3 +-
.../virtio-rng-builtin.x86_64-latest.args     |  3 +-
.../virtio-rng-egd-unix.x86_64-5.2.0.args     |  3 +-
.../virtio-rng-egd-unix.x86_64-latest.args    |  3 +-
...-default-cpu-kvm-pc-4.2.x86_64-latest.args |  3 +-
...default-cpu-kvm-q35-4.2.x86_64-latest.args |  3 +-
111 files changed, 307 insertions(+), 72 deletions(-)
[PATCH v6 0/4] Dirty Ring support (Libvirt)
Posted by huangy81@chinatelecom.cn 2 years, 5 months ago
From: "Hyman Huang(黄勇)" <huangy81@chinatelecom.cn>

Ping for this series.

I still keep thinking the dirty ring feature is something good to
have for libvirt.

qemu-6.1 has supported dirty ring feature and followed up with the
commit 0e21bf24 "support dirtyrate at the granualrity of vcpu",
which is a typical usage scenario of dirty ring. another usage
scenario may be the implementation of per-vcpu auto-converge during
live migration which is already being reviewed. so we can make full
use of dirty ring feature if libvirt supports. and any corrections
and comments about this series would be very appreciated.

Please review, Thanks!

Hyman

v6
- rebase on master

v5,v4: blank, just make v6 be the the latest version.

v3
- rebase master and fix the confilict when apply
  "conf: introduce dirty_ring_size in struct "_virDomainDef" to current 
  master.

v2
- split patchset into 4 patches

- leave out the tcg case when building commandline. 

- handle the VIR_DOMAIN_KVM_DIRTY_RING case independently in ,
  virDomainFeatureDefParse and virDomainDefFeaturesCheckABIStability,
  do not integrate it with other cases...

- add dirty ring size check in virDomainDefFeaturesCheckABIStability

- modify zero checks on integers of dirty ring size in a explicit way.

- set the default value of dirty ring size in a post-parser callback.

- check the absence of kvm_feature in a explicit way.

- code clean of virTristateSwitchTypeToString function.

this version's modification base on Peter's advices mostly, thanks
a lot, please review !

v1
since qemu has introduced a dirty ring feature in 6.1.0, may be it's
the right time to introduce dirty ring in libvirt meanwhile.

this patch add feature named 'dirty-ring', which enable dirty ring
feature when starting vm. to try this out, three things has done
in this patchset:

- introduce QEMU_CAPS_ACCEL so the the libvirt can use it to select 
  the right option when specifying the accelerator type.

- switch the option "-machine accel=xxx" to "-accel xxx" when specifying
  accelerator type once libvirt build QEMU command line, so that 
  dirty-ring-size property can be passed to qemu when start vm.

- introduce dirty_ring_size to hold the ring size configured by user
  and pass dirty_ring_size when building qemu commandline if dirty 
  ring feature enabled.

though dirty ring is per-cpu logically, the size of dirty ring is 
registered by 'struct kvm' in QEMU. so we would like to place the 
dirty_ring_size as a property of vm in Libvirt as the QEMU do.

the dirty ring feature is disabled by default, and if enabled, the
default value of ring size if 4096 if size not configured. 

for more details about dirty ring and "-accel" option, please refer to:
https://lore.kernel.org/qemu-devel/20210108165050.406906-10-peterx@redhat.com/
https://lore.kernel.org/qemu-devel/3aa73987-40e8-3619-0723-9f17f73850bd@redhat.com/

please review, Thanks!

Best Regards !

Hyman Huang(黄勇) (4):
  qemu_capabilities: introduce QEMU_CAPS_ACCEL
  qemu_command: switch accelerator option to new style
  conf: introduce dirty_ring_size field
  qemu: support dirty ring feature

 docs/formatdomain.rst                         | 18 +++--
 docs/schemas/domaincommon.rng                 | 10 +++
 src/conf/domain_conf.c                        | 76 ++++++++++++++++++-
 src/conf/domain_conf.h                        |  4 +
 src/qemu/qemu_capabilities.c                  |  2 +
 src/qemu/qemu_capabilities.h                  |  1 +
 src/qemu/qemu_command.c                       | 40 +++++++++-
 .../caps_2.11.0.s390x.xml                     |  1 +
 .../caps_2.11.0.x86_64.xml                    |  1 +
 .../caps_2.12.0.aarch64.xml                   |  1 +
 .../caps_2.12.0.ppc64.xml                     |  1 +
 .../caps_2.12.0.s390x.xml                     |  1 +
 .../caps_2.12.0.x86_64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml |  1 +
 .../caps_3.0.0.riscv32.xml                    |  1 +
 .../caps_3.0.0.riscv64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_3.0.0.s390x.xml |  1 +
 .../caps_3.0.0.x86_64.xml                     |  1 +
 .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml |  1 +
 .../caps_3.1.0.x86_64.xml                     |  1 +
 .../caps_4.0.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml |  1 +
 .../caps_4.0.0.riscv32.xml                    |  1 +
 .../caps_4.0.0.riscv64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_4.0.0.s390x.xml |  1 +
 .../caps_4.0.0.x86_64.xml                     |  1 +
 .../caps_4.1.0.x86_64.xml                     |  1 +
 .../caps_4.2.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml |  1 +
 .../qemucapabilitiesdata/caps_4.2.0.s390x.xml |  1 +
 .../caps_4.2.0.x86_64.xml                     |  1 +
 .../caps_5.0.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml |  1 +
 .../caps_5.0.0.riscv64.xml                    |  1 +
 .../caps_5.0.0.x86_64.xml                     |  1 +
 .../qemucapabilitiesdata/caps_5.1.0.sparc.xml |  1 +
 .../caps_5.1.0.x86_64.xml                     |  1 +
 .../caps_5.2.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_5.2.0.ppc64.xml |  1 +
 .../caps_5.2.0.riscv64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_5.2.0.s390x.xml |  1 +
 .../caps_5.2.0.x86_64.xml                     |  1 +
 .../caps_6.0.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_6.0.0.s390x.xml |  1 +
 .../caps_6.0.0.x86_64.xml                     |  1 +
 .../caps_6.1.0.x86_64.xml                     |  1 +
 .../caps_6.2.0.aarch64.xml                    |  1 +
 .../qemucapabilitiesdata/caps_6.2.0.ppc64.xml |  1 +
 .../caps_6.2.0.x86_64.xml                     |  1 +
 ...fault-cpu-kvm-virt-4.2.aarch64-latest.args |  3 +-
 .../aarch64-features-sve.aarch64-latest.args  |  3 +-
 .../channel-unix-guestfwd.x86_64-latest.args  |  3 +-
 .../clock-timer-armvtimer.aarch64-latest.args |  3 +-
 .../console-virtio-unix.x86_64-latest.args    |  3 +-
 ...u-Icelake-Server-pconfig.x86_64-3.1.0.args |  3 +-
 ...-Icelake-Server-pconfig.x86_64-latest.args |  3 +-
 .../cpu-host-model.x86_64-2.11.0.args         |  3 +-
 .../cpu-host-model.x86_64-2.12.0.args         |  3 +-
 .../cpu-host-model.x86_64-3.0.0.args          |  3 +-
 .../cpu-host-model.x86_64-3.1.0.args          |  3 +-
 .../cpu-host-model.x86_64-4.0.0.args          |  3 +-
 .../cpu-host-model.x86_64-4.1.0.args          |  3 +-
 .../cpu-host-model.x86_64-4.2.0.args          |  3 +-
 .../cpu-host-model.x86_64-5.0.0.args          |  3 +-
 .../cpu-host-model.x86_64-5.1.0.args          |  3 +-
 .../cpu-host-model.x86_64-5.2.0.args          |  3 +-
 .../cpu-host-model.x86_64-6.0.0.args          |  3 +-
 .../cpu-host-model.x86_64-6.1.0.args          |  3 +-
 .../cpu-host-model.x86_64-latest.args         |  3 +-
 .../cpu-tsc-frequency.x86_64-4.0.0.args       |  3 +-
 ...ult-video-type-aarch64.aarch64-latest.args |  3 +-
 ...default-video-type-ppc64.ppc64-latest.args |  3 +-
 ...default-video-type-s390x.s390x-latest.args |  3 +-
 .../disk-cdrom-network.x86_64-2.12.0.args     |  3 +-
 .../disk-cdrom-network.x86_64-latest.args     |  3 +-
 .../disk-network-http.x86_64-latest.args      |  3 +-
 .../disk-serial.x86_64-latest.args            |  3 +-
 .../graphics-spice-timeout.x86_64-latest.args |  3 +-
 .../hugepages-memaccess3.x86_64-latest.args   |  3 +-
 .../intel-iommu-aw-bits.x86_64-latest.args    |  3 +-
 ...ntel-iommu-caching-mode.x86_64-latest.args |  3 +-
 ...ntel-iommu-device-iotlb.x86_64-latest.args |  3 +-
 .../intel-iommu-eim.x86_64-latest.args        |  3 +-
 .../launch-security-s390-pv.s390x-latest.args |  3 +-
 ...v-missing-platform-info.x86_64-2.12.0.args |  3 +-
 .../launch-security-sev.x86_64-2.12.0.args    |  3 +-
 .../launch-security-sev.x86_64-6.0.0.args     |  3 +-
 ...memory-default-hugepage.x86_64-latest.args |  3 +-
 .../memfd-memory-numa.x86_64-latest.args      |  3 +-
 ...mory-hotplug-virtio-mem.x86_64-latest.args |  3 +-
 ...mory-hotplug-virtio-pmem.x86_64-5.2.0.args |  3 +-
 ...ory-hotplug-virtio-pmem.x86_64-latest.args |  3 +-
 .../os-firmware-bios.x86_64-latest.args       |  3 +-
 ...re-efi-no-enrolled-keys.x86_64-latest.args |  3 +-
 ...os-firmware-efi-secboot.x86_64-latest.args |  3 +-
 .../os-firmware-efi.x86_64-latest.args        |  3 +-
 .../parallel-unix-chardev.x86_64-latest.args  |  3 +-
 ...ault-cpu-kvm-pseries-2.7.ppc64-latest.args |  3 +-
 ...ault-cpu-kvm-pseries-3.1.ppc64-latest.args |  3 +-
 ...ault-cpu-kvm-pseries-4.2.ppc64-latest.args |  3 +-
 ...t-cpu-kvm-ccw-virtio-2.7.s390x-latest.args |  3 +-
 ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args |  3 +-
 ...rtcard-passthrough-unix.x86_64-latest.args |  3 +-
 .../usb-redir-unix.x86_64-latest.args         |  3 +-
 ...vhost-user-fs-fd-memory.x86_64-latest.args |  3 +-
 .../virtio-rng-builtin.x86_64-5.2.0.args      |  3 +-
 .../virtio-rng-builtin.x86_64-latest.args     |  3 +-
 .../virtio-rng-egd-unix.x86_64-5.2.0.args     |  3 +-
 .../virtio-rng-egd-unix.x86_64-latest.args    |  3 +-
 ...-default-cpu-kvm-pc-4.2.x86_64-latest.args |  3 +-
 ...default-cpu-kvm-q35-4.2.x86_64-latest.args |  3 +-
 111 files changed, 307 insertions(+), 72 deletions(-)

-- 
2.27.0


Re: [PATCH v6 0/4] Dirty Ring support (Libvirt)
Posted by Peter Krempa 2 years, 4 months ago
On Sat, Nov 20, 2021 at 03:20:44 -0500, huangy81@chinatelecom.cn wrote:
> From: "Hyman Huang(黄勇)" <huangy81@chinatelecom.cn>
> 
> Ping for this series.
> 
> I still keep thinking the dirty ring feature is something good to
> have for libvirt.
> 
> qemu-6.1 has supported dirty ring feature and followed up with the
> commit 0e21bf24 "support dirtyrate at the granualrity of vcpu",
> which is a typical usage scenario of dirty ring. another usage
> scenario may be the implementation of per-vcpu auto-converge during
> live migration which is already being reviewed. so we can make full
> use of dirty ring feature if libvirt supports. and any corrections
> and comments about this series would be very appreciated.
> 
> Please review, Thanks!
> 
> Hyman
> 
> v6
> - rebase on master
> 
> v5,v4: blank, just make v6 be the the latest version.
> 

Umm, what does this mean? I didn't find v4 or v5 posted on the list.

Re: [PATCH v6 0/4] Dirty Ring support (Libvirt)
Posted by Hyman 2 years, 4 months ago

在 2021/11/22 22:48, Peter Krempa 写道:
> On Sat, Nov 20, 2021 at 03:20:44 -0500, huangy81@chinatelecom.cn wrote:
>> From: "Hyman Huang(黄勇)" <huangy81@chinatelecom.cn>
>>
>> Ping for this series.
>>
>> I still keep thinking the dirty ring feature is something good to
>> have for libvirt.
>>
>> qemu-6.1 has supported dirty ring feature and followed up with the
>> commit 0e21bf24 "support dirtyrate at the granualrity of vcpu",
>> which is a typical usage scenario of dirty ring. another usage
>> scenario may be the implementation of per-vcpu auto-converge during
>> live migration which is already being reviewed. so we can make full
>> use of dirty ring feature if libvirt supports. and any corrections
>> and comments about this series would be very appreciated.
>>
>> Please review, Thanks!
>>
>> Hyman
>>
>> v6
>> - rebase on master
>>
>> v5,v4: blank, just make v6 be the the latest version.
>>
> 
> Umm, what does this mean? I didn't find v4 or v5 posted on the list.
About 10 month ago, i post same title patchset but add the RFC tag。That
patchset was deprecated.

https://patchew.org/Libvirt/20210113104244.1661-1-huangy81@chinatelecom.cn/
>