@@ -383,7 +383,10 @@ void *get_dirtyrate_thread(void *arg)
return NULL;
}
-void qmp_calc_dirty_rate(int64_t calc_time, Error **errp)
+void qmp_calc_dirty_rate(int64_t calc_time,
+ bool has_vcpu,
+ bool vcpu,
+ Error **errp)
{
static struct DirtyRateConfig config;
QemuThread thread;
@@ -38,6 +38,7 @@
struct DirtyRateConfig {
uint64_t sample_pages_per_gigabytes; /* sample pages per GB */
int64_t sample_period_seconds; /* time duration between two sampling */
+ bool vcpu; /* calculate dirtyrate for each vcpu using dirty ring */
};
/*
@@ -1708,6 +1708,21 @@
{ 'event': 'UNPLUG_PRIMARY',
'data': { 'device-id': 'str' } }
+##
+# @DirtyRateVcpu:
+#
+# Dirty rate of vcpu.
+#
+# @id: vcpu index.
+#
+# @dirty-rate: dirty rate.
+#
+# Since: 6.1
+#
+##
+{ 'struct': 'DirtyRateVcpu',
+ 'data': { 'id': 'int', 'dirty-rate': 'int64' } }
+
##
# @DirtyRateStatus:
#
@@ -1740,6 +1755,10 @@
#
# @calc-time: time in units of second for sample dirty pages
#
+# @vcpu: calculate dirtyrate for each vcpu (Since 6.1)
+#
+# @vcpu-dirty-rate: dirtyrate for each vcpu (Since 6.1)
+#
# Since: 5.2
#
##
@@ -1747,7 +1766,9 @@
'data': {'*dirty-rate': 'int64',
'status': 'DirtyRateStatus',
'start-time': 'int64',
- 'calc-time': 'int64'} }
+ 'calc-time': 'int64',
+ '*vcpu': 'bool',
+ '*vcpu-dirty-rate': [ 'DirtyRateVcpu' ] } }
##
# @calc-dirty-rate:
@@ -1756,13 +1777,16 @@
#
# @calc-time: time in units of second for sample dirty pages
#
+# @vcpu: calculate vcpu dirty rate if true, the default value is
+# false (since 6.1)
+#
# Since: 5.2
#
# Example:
# {"command": "calc-dirty-rate", "data": {"calc-time": 1} }
#
##
-{ 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64'} }
+{ 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64', '*vcpu': 'bool'} }
##
# @query-dirty-rate: