QEMU introduced the dirty page rate limit feature in 7.1.0, see the
details in the following link:
https://lore.kernel.org/qemu-
devel/cover.1656177590.git.huangy81(a)chinatelecom.cn/
So maybe it's the right time to enable this feature in libvirt and the
upper user can play with it, expecting the upper app can use this
feature to do a virtual CPU Qos or whatever else.
Introduce the virsh API as follows:
# virsh limit-dirty-page-rate <domain> [--rate <number>] [--vcpu
<number>] [--cancel]
Examples:
To set the dirty page rate upper limit 60MB/s for all virtual CPUs in
c81_node1, use:
# virsh limit-dirty-page-rate c81_node1 --rate 60
Set dirty page rate limit 60(MB/s) on all virtual CPUs successfully
To set the dirty page rate upper limit 35MB/s for virtual CPU 1 in
c81_node1, use:
# virsh limit-dirty-page-rate c81_node1 --rate 35 --vcpu 1
Set vcpu[1] dirty page rate upper limit 35(MB/s) successfully
Specify the 'cancel' option to do the reverse, the optional option
'vcpu' is used to specify the CPU index to be set.
To query the dirty page rate upper limit, use:
# virsh vcpuinfo c81_node1
VCPU: 0
CPU: 14
State: running
CPU time: 27.1s
CPU Affinity: yyyyyyyyyyyyyyyy
DirtyRate limit: 60
DirtyRate current: 0
VCPU: 1
CPU: 1
State: running
CPU time: 25.1s
CPU Affinity: yyyyyyyyyyyyyyyy
DirtyRate limit: 35
DirtyRate current: 0
VCPU: 2
CPU: 7
State: running
CPU time: 6.0s
CPU Affinity: yyyyyyyyyyyyyyyy
DirtyRate limit: 60
DirtyRate current: 0
VCPU: 3
CPU: 8
State: running
CPU time: 3.5s
CPU Affinity: yyyyyyyyyyyyyyyy
DirtyRate limit: 60
DirtyRate current: 0
The patch set adds two new APIs to implement a dirty page rate limit:
1. virDomainSetVcpuDirtyLimit, which set virtual CPU dirty page rate
limit. virsh command 'limit-dirty-page-rate' correspondingly.
2. virDomainCancelVcpuDirtyLimit, which cancel virtual CPU dirty page
rate
limit. 'cancel' option was introduced to 'limit-dirty-page-rate' to
cancel
the limit correspondingly.
In addition, function 'qemuMonitorQueryVcpuDirtyLimit' was implemented
to query the dirty page rate upper limit, the virsh command 'vcpuinfo'
was extended. So that the user can query dirty page rate limit info via
'vcpuinfo'.
This series makes the main modifications as follows:
- introduce QEMU_CAPS_VCPU_DIRTY_LIMIT capability so that libvirt
can probe before using dirty page rate upper limit feature.
- implement virsh command 'limit-dirty-page-rate' to set/cancel dirty
page rate upper limit.
- extend 'vcpuinfo' API so that it can display dirty page rate upper
limit.
- document dirty page rate limit feature.
Please review, and hoping the comments, thanks !
Yong
Hyman Huang(黄勇) (11):
qemu_capabilities: Introduce QEMU_CAPS_VCPU_DIRTY_LIMIT capability
libvirt: Add virDomainSetVcpuDirtyLimit API
qemu_driver: Implement qemuDomainSetVcpuDirtyLimit
virsh: Introduce limit-dirty-page-rate api
qemu_monitor: Implement qemuMonitorQueryVcpuDirtyLimit
qemu_driver: Extend qemuDomainGetVcpus
virsh: Extend vcpuinfo api
libvirt: Add virDomainCancelVcpuDirtyLimit API
qemu_driver: Implement qemuDomainCancelVcpuDirtyLimit
virsh: Add cancel option of limit-dirty-page-rate api
NEWS: Document limit dirty page rate APIs
NEWS.rst | 16 ++
include/libvirt/libvirt-domain.h | 22 +++
src/driver-hypervisor.h | 13 ++
src/libvirt-domain.c | 106 ++++++++++++
src/libvirt_public.syms | 6 +
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_driver.c | 154 ++++++++++++++++++
src/qemu/qemu_monitor.c | 36 ++++
src/qemu/qemu_monitor.h | 26 +++
src/qemu/qemu_monitor_json.c | 150 +++++++++++++++++
src/qemu/qemu_monitor_json.h | 13 ++
src/remote/remote_daemon_dispatch.c | 2 +
src/remote/remote_driver.c | 4 +
src/remote/remote_protocol.x | 28 +++-
src/remote_protocol-structs | 13 ++
.../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.c | 123 ++++++++++++++
26 files changed, 723 insertions(+), 1 deletion(-)
--
2.38.5