[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 01/10] migration/dirtyrate: Add get_dirtyrate_thread() functio
From: |
Chuan Zheng |
Subject: |
[PATCH v2 01/10] migration/dirtyrate: Add get_dirtyrate_thread() function |
Date: |
Sat, 15 Aug 2020 10:22:51 +0800 |
From: Zheng Chuan <zhengchuan@huawei.com>
Add get_dirtyrate_thread() functions
Signed-off-by: Zheng Chuan <zhengchuan@huawei.com>
Signed-off-by: YanYing Zhuang <ann.zhuangyanying@huawei.com>
---
migration/Makefile.objs | 1 +
migration/dirtyrate.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++
migration/dirtyrate.h | 44 ++++++++++++++++++++++++++++++++++
3 files changed, 109 insertions(+)
create mode 100644 migration/dirtyrate.c
create mode 100644 migration/dirtyrate.h
diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index 0fc619e..12ae98c 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -6,6 +6,7 @@ common-obj-y += qemu-file.o global_state.o
common-obj-y += qemu-file-channel.o
common-obj-y += xbzrle.o postcopy-ram.o
common-obj-y += qjson.o
+common-obj-y += dirtyrate.o
common-obj-y += block-dirty-bitmap.o
common-obj-y += multifd.o
common-obj-y += multifd-zlib.o
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c
new file mode 100644
index 0000000..bb0ebe9
--- /dev/null
+++ b/migration/dirtyrate.c
@@ -0,0 +1,64 @@
+/*
+ * Dirtyrate implement code
+ *
+ * Copyright (c) 2017-2020 HUAWEI TECHNOLOGIES CO.,LTD.
+ *
+ * Authors:
+ * Chuan Zheng <zhengchuan@huawei.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "crypto/hash.h"
+#include "crypto/random.h"
+#include "qemu/config-file.h"
+#include "exec/memory.h"
+#include "exec/ramblock.h"
+#include "exec/target_page.h"
+#include "qemu/rcu_queue.h"
+#include "qapi/qapi-commands-migration.h"
+#include "migration.h"
+#include "dirtyrate.h"
+
+CalculatingDirtyRateState CalculatingState = CAL_DIRTY_RATE_INIT;
+
+static int dirty_rate_set_state(int new_state)
+{
+ int old_state = CalculatingState;
+
+ if (new_state == old_state) {
+ return -1;
+ }
+
+ if (atomic_cmpxchg(&CalculatingState, old_state, new_state) != old_state) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void calculate_dirtyrate(struct DirtyRateConfig config)
+{
+ /* todo */
+ return;
+}
+
+void *get_dirtyrate_thread(void *arg)
+{
+ struct DirtyRateConfig config = *(struct DirtyRateConfig *)arg;
+ int ret;
+
+ ret = dirty_rate_set_state(CAL_DIRTY_RATE_ACTIVE);
+ if (ret == -1) {
+ return NULL;
+ }
+
+ calculate_dirtyrate(config);
+
+ ret = dirty_rate_set_state(CAL_DIRTY_RATE_END);
+
+ return NULL;
+}
diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h
new file mode 100644
index 0000000..914c363
--- /dev/null
+++ b/migration/dirtyrate.h
@@ -0,0 +1,44 @@
+/*
+ * Dirtyrate common functions
+ *
+ * Copyright (c) 2020 HUAWEI TECHNOLOGIES CO., LTD.
+ *
+ * Authors:
+ * Chuan Zheng <zhengchuan@huawei.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef QEMU_MIGRATION_DIRTYRATE_H
+#define QEMU_MIGRATION_DIRTYRATE_H
+
+/*
+ * Sample 256 pages per GB as default.
+ * TODO: Make it configurable.
+ */
+#define DIRTYRATE_DEFAULT_SAMPLE_PAGES 256
+
+/* Take 1s as default for calculation duration */
+#define DEFAULT_FETCH_DIRTYRATE_TIME_SEC 1
+
+struct DirtyRateConfig {
+ uint64_t sample_pages_per_gigabytes; /* sample pages per GB */
+ int64_t sample_period_seconds; /* time duration between two sampling */
+};
+
+/*
+ * To record calculate dirty_rate status:
+ * 0: initial status, calculating thread is not be created here.
+ * 1: calculating thread is created.
+ * 2: calculating thread is end, we can get result.
+ */
+typedef enum {
+ CAL_DIRTY_RATE_INIT = 0,
+ CAL_DIRTY_RATE_ACTIVE,
+ CAL_DIRTY_RATE_END,
+} CalculatingDirtyRateState;
+
+void *get_dirtyrate_thread(void *arg);
+#endif
+
--
1.8.3.1
- [PATCH v2 00/10] *** A Method for evaluating dirty page rate ***, (continued)
- [PATCH v2 00/10] *** A Method for evaluating dirty page rate ***, Chuan Zheng, 2020/08/15
- [PATCH v2 02/10] migration/dirtyrate: Add RamlockDirtyInfo to store sampled page info, Chuan Zheng, 2020/08/15
- [PATCH v2 10/10] migration/dirtyrate: Implement qmp_cal_dirty_rate()/qmp_get_dirty_rate() function, Chuan Zheng, 2020/08/15
- [PATCH v2 09/10] migration/dirtyrate: Implement calculate_dirtyrate() function, Chuan Zheng, 2020/08/15
- [PATCH v2 08/10] migration/dirtyrate: Implement get_sample_page_period() and block_sample_page_period(), Chuan Zheng, 2020/08/15
- [PATCH v2 05/10] migration/dirtyrate: Record hash results for each sampled page, Chuan Zheng, 2020/08/15
- [PATCH v2 03/10] migration/dirtyrate: Add dirtyrate statistics series functions, Chuan Zheng, 2020/08/15
- [PATCH v2 04/10] migration/dirtyrate: move RAMBLOCK_FOREACH_MIGRATABLE into ram.h, Chuan Zheng, 2020/08/15
- [PATCH v2 06/10] migration/dirtyrate: Compare page hash results for recorded sampled page, Chuan Zheng, 2020/08/15
- [PATCH v2 07/10] migration/dirtyrate: skip sampling ramblock with size below MIN_RAMBLOCK_SIZE, Chuan Zheng, 2020/08/15
- [PATCH v2 01/10] migration/dirtyrate: Add get_dirtyrate_thread() function,
Chuan Zheng <=
- Re: [PATCH v2 00/10] *** A Method for evaluating dirty page rate ***, no-reply, 2020/08/15
- Re: [PATCH v2 00/10] *** A Method for evaluating dirty page rate ***, no-reply, 2020/08/15
- Re: [PATCH v2 00/10] *** A Method for evaluating dirty page rate ***, no-reply, 2020/08/15