Ping2, I'm hoping for comments about the series. Thanks, Yong
On Sun, Aug 27, 2023 at 11:11 AM Yong Huang <yong.hu...@smartx.com> wrote: > Ping1 > > On Tue, Aug 15, 2023 at 9:48 AM Yong Huang <yong.hu...@smartx.com> wrote: > >> Ping. >> >> On Mon, Aug 7, 2023 at 11:56 PM ~hyman <hy...@git.sr.ht> wrote: >> >>> Hi, This is the latest version for the series, comparing with version >>> 1, there are some key modifications has made inspired and >>> suggested by Peter, see as follows: >>> 1. Introduce XML for dirty limit persistent configuration >>> 2. Merge the cancel API into the set API >>> 3. Extend the domstats/virDomainListGetStats API for dirty limit >>> information query >>> 4. Introduce the virDomainModificationImpact flags to control the >>> behavior of the API >>> 5. Enrich the comments and docs about the feature and API >>> >>> The patch set introduce the new API virDomainSetVcpuDirtyLimit to >>> allow upper Apps to set upper limits of dirty page rate for virtual >>> CPUs, >>> the corresponding virsh API as follows: >>> # limit-dirty-page-rate <domain> <rate> [--vcpu <number>] \ >>> [--config] [--live] [--current] >>> >>> We put the dirty limit persistent info with the "vcpus" element in >>> domain XML and >>> extend dirtylimit statistics for domGetStats: >>> <domain> >>> ... >>> <vcpu current='2'>3</vcpu> >>> <vcpus> >>> <vcpu id='0' hotpluggable='no' dirty_limit='10' order='1'.../> >>> <vcpu id='1' hotpluggable='yes' dirty_limit='10' order='2'.../> >>> </vcpus> >>> ... >>> >>> If --vcpu option is not passed in the virsh command, set all virtual >>> CPUs; >>> if rate is set to zero, cancel the upper limit. >>> >>> Examples: >>> To set the dirty page rate upper limit 10 MB/s for all virtual CPUs in >>> c81_node1, use: >>> [root@srv2 my_libvirt]# virsh limit-dirty-page-rate c81_node1 --rate 10 >>> --live >>> Set dirty page rate limit 10(MB/s) for all virtual CPUs successfully >>> >>> [root@srv2 my_libvirt]# virsh dumpxml c81_node1 | grep dirty_limit >>> <vcpu id='0' enabled='yes' hotpluggable='no' order='1' >>> dirty_limit='10'/> >>> <vcpu id='1' enabled='yes' hotpluggable='no' order='2' >>> dirty_limit='10'/> >>> <vcpu id='2' enabled='yes' hotpluggable='no' order='3' >>> dirty_limit='10'/> >>> <vcpu id='3' enabled='no' hotpluggable='yes' dirty_limit='10'/> >>> <vcpu id='4' enabled='no' hotpluggable='yes' dirty_limit='10'/> >>> ...... >>> >>> Query the dirty limit info dynamically: >>> [root@srv2 my_libvirt]# virsh domstats c81_node1 --dirtylimit >>> Domain: 'c81_node1' >>> dirtylimit.vcpu.0.limit=10 >>> dirtylimit.vcpu.0.current=0 >>> dirtylimit.vcpu.1.limit=10 >>> dirtylimit.vcpu.1.current=0 >>> dirtylimit.vcpu.2.limit=10 >>> dirtylimit.vcpu.2.current=0 >>> dirtylimit.vcpu.3.limit=10 >>> dirtylimit.vcpu.3.current=0 >>> dirtylimit.vcpu.4.limit=10 >>> dirtylimit.vcpu.4.current=0 >>> ...... >>> To cancel the upper limit, use: >>> [root@srv2 my_libvirt]# virsh limit-dirty-page-rate c81_node1 \ >>> --rate 0 --live >>> Cancel dirty page rate limit for all virtual CPUs successfully >>> >>> [root@srv2 my_libvirt]# virsh dumpxml c81_node1 | grep dirty_limit >>> [root@srv2 my_libvirt]# virsh domstats c81_node1 --dirtylimit >>> Domain: 'c81_node1' >>> >>> The dirty limit uses the QEMU dirty-limit feature introduced since >>> 7.1.0, this feature allows CPU to be throttled as needed to keep >>> their dirty page rate within the limit. It could, in some scenes, be >>> used to provide quality-of-service in the aspect of the memory >>> workload for virtual CPUs and QEMU itself use the feature to >>> implement the dirty-limit throttle algorithm and apply it on the >>> live migration, which improve responsiveness of large guests >>> during live migration and can result in more stable read >>> performance. The other application scenarios remain >>> unexplored, before that, Libvirt could provide the basic API. >>> >>> Please review, thanks >>> >>> Yong >>> >>> Hyman Huang(黄勇) (10): >>> qemu_capabilities: Introduce QEMU_CAPS_VCPU_DIRTY_LIMIT capability >>> conf: Introduce XML for dirty limit configuration >>> libvirt: Add virDomainSetVcpuDirtyLimit API >>> qemu_driver: Implement qemuDomainSetVcpuDirtyLimit >>> domain_validate: Export virDomainDefHasDirtyLimitStartupVcpus symbol >>> qemu_process: Setup dirty limit after launching VM >>> virsh: Introduce limit-dirty-page-rate api >>> qemu_monitor: Implement qemuMonitorQueryVcpuDirtyLimit >>> qemu_driver: Extend dirtlimit statistics for domGetStats >>> virsh: Introduce command 'virsh domstats --dirtylimit' >>> >>> docs/formatdomain.rst | 7 +- >>> docs/manpages/virsh.rst | 33 +++- >>> include/libvirt/libvirt-domain.h | 5 + >>> src/conf/domain_conf.c | 26 +++ >>> src/conf/domain_conf.h | 8 + >>> src/conf/domain_validate.c | 33 ++++ >>> src/conf/domain_validate.h | 2 + >>> src/conf/schemas/domaincommon.rng | 5 + >>> src/driver-hypervisor.h | 7 + >>> src/libvirt-domain.c | 68 +++++++ >>> src/libvirt_private.syms | 1 + >>> src/libvirt_public.syms | 5 + >>> src/qemu/qemu_capabilities.c | 2 + >>> src/qemu/qemu_capabilities.h | 1 + >>> src/qemu/qemu_driver.c | 181 ++++++++++++++++++ >>> src/qemu/qemu_monitor.c | 25 +++ >>> src/qemu/qemu_monitor.h | 22 +++ >>> src/qemu/qemu_monitor_json.c | 107 +++++++++++ >>> src/qemu/qemu_monitor_json.h | 9 + >>> src/qemu/qemu_process.c | 44 +++++ >>> src/remote/remote_driver.c | 1 + >>> src/remote/remote_protocol.x | 17 +- >>> src/remote_protocol-structs | 7 + >>> .../qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 1 + >>> .../caps_7.1.0_x86_64.xml | 1 + >>> tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 1 + >>> .../caps_7.2.0_x86_64+hvf.xml | 1 + >>> .../caps_7.2.0_x86_64.xml | 1 + >>> .../caps_8.0.0_riscv64.xml | 1 + >>> .../caps_8.0.0_x86_64.xml | 1 + >>> .../qemucapabilitiesdata/caps_8.1.0_s390x.xml | 1 + >>> .../caps_8.1.0_x86_64.xml | 1 + >>> tools/virsh-domain-monitor.c | 7 + >>> tools/virsh-domain.c | 109 +++++++++++ >>> 34 files changed, 737 insertions(+), 4 deletions(-) >>> >>> -- >>> 2.38.5 >>> >> >> >> -- >> Best regards >> > > > -- > Best regards > -- Best regards