[PATCH Libvirt v3 00/10] Support dirty page rate upper limit

~hyman posted 10 patches 7 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/169397083100.4628.15196043252714532301-0@git.sr.ht
docs/formatdomain.rst                         |   7 +-
docs/manpages/virsh.rst                       |  38 +++-
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                       |   1 +
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                  |  18 +-
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, 739 insertions(+), 4 deletions(-)
[PATCH Libvirt v3 00/10] Support dirty page rate upper limit
Posted by ~hyman 7 months, 3 weeks ago
Hi, This is the latest version for the series, please review.
Thanks,
Yong

v3:
- rebase on master and fix conflicts
- refactor the comments and update the version tag
v2:
The patch set introduce a 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>
    ...
</domain>
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:
# virsh limit-dirty-page-rate c81_node1 --rate 10 --live
Set dirty page rate limit 10(MB/s) for all virtual CPUs successfully
# 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:
# 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:
# virsh limit-dirty-page-rate c81_node1 --rate 0 --live
Cancel dirty page rate limit for all virtual CPUs successfully
# virsh dumpxml c81_node1 | grep dirty_limit
# 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.

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                       |  38 +++-
 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                       |   1 +
 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                  |  18 +-
 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, 739 insertions(+), 4 deletions(-)

-- 
2.38.5
Re: [PATCH Libvirt v3 00/10] Support dirty page rate upper limit
Posted by Martin Kletzander 7 months, 3 weeks ago
On Wed, Sep 06, 2023 at 03:27:10AM +0000, ~hyman wrote:
>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'
>

I'm not sure how you do this, but it seems like the e-mail timestamps
(when they are being sent) are weird.  Like they were set to the time
when the commit was authored or something.  Just letting you know that
there might be something off somewhere.
Re: [PATCH Libvirt v3 00/10] Support dirty page rate upper limit
Posted by Yong Huang 7 months, 3 weeks ago
On Wed, Sep 6, 2023 at 9:16 PM Martin Kletzander <mkletzan@redhat.com>
wrote:

> On Wed, Sep 06, 2023 at 03:27:10AM +0000, ~hyman wrote:
> >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'
> >
>
> I'm not sure how you do this, but it seems like the e-mail timestamps
> (when they are being sent) are weird.  Like they were set to the time
> when the commit was authored or something.  Just letting you know that
> there might be something off somewhere.
>

I'm using the sourcehut(refer to https://sr.ht) to send the email that QEMU
recommends as sending properly formatted patch emails is not convenient for
me, maybe that's the reason. I'll send the series directly next time.

Thanks,
Yong

-- 
Best regards