Ping2, I'm hoping for comments about the series.
Thanks,
Yong
On Sun, Aug 27, 2023 at 11:11 AM Yong Huang <yong.huang(a)smartx.com> wrote:
Ping1
On Tue, Aug 15, 2023 at 9:48 AM Yong Huang <yong.huang(a)smartx.com> wrote:
> Ping.
>
> On Mon, Aug 7, 2023 at 11:56 PM ~hyman <hyman(a)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