[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC 5/6] migration: Add dirtylimit data into migration info
From: |
huangy81 |
Subject: |
[RFC 5/6] migration: Add dirtylimit data into migration info |
Date: |
Tue, 17 May 2022 14:35:05 +0800 |
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Add dirtylimit throttle data into migration info, through
which we can observe the process of dirtylimit during
live migration.
Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
---
include/sysemu/dirtylimit.h | 2 ++
migration/migration.c | 10 ++++++++++
qapi/migration.json | 11 ++++++++++-
softmmu/dirtylimit.c | 22 ++++++++++++++++++++++
4 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/include/sysemu/dirtylimit.h b/include/sysemu/dirtylimit.h
index 8d2c1f3..0b8dd76 100644
--- a/include/sysemu/dirtylimit.h
+++ b/include/sysemu/dirtylimit.h
@@ -34,4 +34,6 @@ void dirtylimit_set_vcpu(int cpu_index,
void dirtylimit_set_all(uint64_t quota,
bool enable);
void dirtylimit_vcpu_execute(CPUState *cpu);
+int64_t dirtylimit_throttle_us_per_full(void);
+int64_t dirtylimit_us_per_full(void);
#endif
diff --git a/migration/migration.c b/migration/migration.c
index 4a659b6..935179e 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -61,6 +61,7 @@
#include "sysemu/cpus.h"
#include "yank_functions.h"
#include "sysemu/qtest.h"
+#include "sysemu/dirtylimit.h"
#define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttling
*/
@@ -1065,6 +1066,15 @@ static void populate_ram_info(MigrationInfo *info,
MigrationState *s)
info->ram->remaining = ram_bytes_remaining();
info->ram->dirty_pages_rate = ram_counters.dirty_pages_rate;
}
+
+ if (migrate_dirtylimit() && dirtylimit_in_service()) {
+ info->has_dirtylimit_throttle_us_per_full = true;
+ info->dirtylimit_throttle_us_per_full =
+ dirtylimit_throttle_us_per_full();
+
+ info->has_dirtylimit_us_per_full = true;
+ info->dirtylimit_us_per_full = dirtylimit_us_per_full();
+ }
}
static void populate_disk_info(MigrationInfo *info)
diff --git a/qapi/migration.json b/qapi/migration.json
index 30ad413..cac4c8d 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -239,6 +239,13 @@
# Present and non-empty when migration is blocked.
# (since 6.0)
#
+# @dirtylimit-throttle-us-per-full: Throttle time (us) during the period of
+# dirty ring full.
+# (since 7.0)
+#
+# @dirtylimit-us-per-full: Estimated the periodic time (us) of dirty ring full.
+# (since 7.0)
+#
# Since: 0.14
##
{ 'struct': 'MigrationInfo',
@@ -256,7 +263,9 @@
'*postcopy-blocktime' : 'uint32',
'*postcopy-vcpu-blocktime': ['uint32'],
'*compression': 'CompressionStats',
- '*socket-address': ['SocketAddress'] } }
+ '*socket-address': ['SocketAddress'],
+ '*dirtylimit-throttle-us-per-full': 'int64',
+ '*dirtylimit-us-per-full': 'int64'} }
##
# @query-migrate:
diff --git a/softmmu/dirtylimit.c b/softmmu/dirtylimit.c
index affe993..33440c0 100644
--- a/softmmu/dirtylimit.c
+++ b/softmmu/dirtylimit.c
@@ -546,6 +546,28 @@ static struct DirtyLimitInfo *dirtylimit_query_vcpu(int
cpu_index)
return info;
}
+/* Pick up first vcpu throttle time by default */
+int64_t dirtylimit_throttle_us_per_full(void)
+{
+ CPUState *cpu = first_cpu;
+ return cpu->throttle_us_per_full;
+}
+
+/*
+ * Estimate dirty ring full time under current dirty page rate.
+ * Return -1 if guest doesn't dirty memory.
+ */
+int64_t dirtylimit_us_per_full(void)
+{
+ uint64_t curr_rate = vcpu_dirty_rate_get(0);
+
+ if (!curr_rate) {
+ return -1;
+ }
+
+ return dirtylimit_dirty_ring_full_time(curr_rate);
+}
+
static struct DirtyLimitInfoList *dirtylimit_query_all(void)
{
int i, index;
--
1.8.3.1
- [RFC 0/6] migration: introduce dirtylimit capability, huangy81, 2022/05/17
- [RFC 4/6] migration: Introduce dirtylimit capability, huangy81, 2022/05/17
- [RFC 2/6] qapi/migration: Introduce vcpu-dirtylimit parameters, huangy81, 2022/05/17
- [RFC 1/6] qapi/migration: Introduce vcpu-dirtylimit-period parameters, huangy81, 2022/05/17
- [RFC 5/6] migration: Add dirtylimit data into migration info,
huangy81 <=
- [RFC 6/6] tests: Add migration dirtylimit capability test, huangy81, 2022/05/17
- [RFC 3/6] migration: Implement dirtylimit convergence algo, huangy81, 2022/05/17