migration/dirtyrate: Compare page hash results for recorded sampled page
Compare page hash results for recorded sampled page. Signed-off-by: Chuan Zheng <zhengchuan@huawei.com> Signed-off-by: YanYing Zhuang <ann.zhuangyanying@huawei.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Li Qiang <liq3ea@gmail.com> Message-Id: <1600237327-33618-8-git-send-email-zhengchuan@huawei.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
61ee08060d
commit
2d38ffe832
95
migration-dirtyrate-Compare-page-hash-results-for-re.patch
Normal file
95
migration-dirtyrate-Compare-page-hash-results-for-re.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
From 949612c5bbc5414970aed7d7ec9390a058ee2246 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chuan Zheng <zhengchuan@huawei.com>
|
||||||
|
Date: Wed, 16 Sep 2020 14:22:02 +0800
|
||||||
|
Subject: [PATCH] migration/dirtyrate: Compare page hash results for recorded
|
||||||
|
sampled page
|
||||||
|
|
||||||
|
Compare page hash results for recorded sampled page.
|
||||||
|
|
||||||
|
Signed-off-by: Chuan Zheng <zhengchuan@huawei.com>
|
||||||
|
Signed-off-by: YanYing Zhuang <ann.zhuangyanying@huawei.com>
|
||||||
|
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
||||||
|
Reviewed-by: Li Qiang <liq3ea@gmail.com>
|
||||||
|
Message-Id: <1600237327-33618-8-git-send-email-zhengchuan@huawei.com>
|
||||||
|
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
||||||
|
---
|
||||||
|
migration/dirtyrate.c | 63 +++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 63 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c
|
||||||
|
index f93601f8ab..0412f825dc 100644
|
||||||
|
--- a/migration/dirtyrate.c
|
||||||
|
+++ b/migration/dirtyrate.c
|
||||||
|
@@ -177,6 +177,69 @@ out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void calc_page_dirty_rate(struct RamblockDirtyInfo *info)
|
||||||
|
+{
|
||||||
|
+ uint32_t crc;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < info->sample_pages_count; i++) {
|
||||||
|
+ crc = get_ramblock_vfn_hash(info, info->sample_page_vfn[i]);
|
||||||
|
+ if (crc != info->hash_result[i]) {
|
||||||
|
+ info->sample_dirty_count++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static struct RamblockDirtyInfo *
|
||||||
|
+find_block_matched(RAMBlock *block, int count,
|
||||||
|
+ struct RamblockDirtyInfo *infos)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ struct RamblockDirtyInfo *matched;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < count; i++) {
|
||||||
|
+ if (!strcmp(infos[i].idstr, qemu_ram_get_idstr(block))) {
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (i == count) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (infos[i].ramblock_addr != qemu_ram_get_host_addr(block) ||
|
||||||
|
+ infos[i].ramblock_pages !=
|
||||||
|
+ (qemu_ram_get_used_length(block) >> TARGET_PAGE_BITS)) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ matched = &infos[i];
|
||||||
|
+
|
||||||
|
+ return matched;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static bool compare_page_hash_info(struct RamblockDirtyInfo *info,
|
||||||
|
+ int block_count)
|
||||||
|
+{
|
||||||
|
+ struct RamblockDirtyInfo *block_dinfo = NULL;
|
||||||
|
+ RAMBlock *block = NULL;
|
||||||
|
+
|
||||||
|
+ RAMBLOCK_FOREACH_MIGRATABLE(block) {
|
||||||
|
+ block_dinfo = find_block_matched(block, block_count, info);
|
||||||
|
+ if (block_dinfo == NULL) {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ calc_page_dirty_rate(block_dinfo);
|
||||||
|
+ update_dirtyrate_stat(block_dinfo);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (DirtyStat.total_sample_count == 0) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void calculate_dirtyrate(struct DirtyRateConfig config)
|
||||||
|
{
|
||||||
|
/* todo */
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user