[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/19] memory: Don't set migration bitmap when withou
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 10/19] memory: Don't set migration bitmap when without migration |
Date: |
Thu, 11 Jul 2019 12:44:03 +0200 |
From: Peter Xu <address@hidden>
Similar to 9460dee4b2 ("memory: do not touch code dirty bitmap unless
TCG is enabled", 2015-06-05) but for the migration bitmap - we can
skip the MIGRATION bitmap update if migration not enabled.
Reviewed-by: Paolo Bonzini <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>
---
include/exec/memory.h | 2 ++
include/exec/ram_addr.h | 12 +++++++++++-
memory.c | 2 +-
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 2c5cdffa31..70d6f7e451 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -46,6 +46,8 @@
OBJECT_GET_CLASS(IOMMUMemoryRegionClass, (obj), \
TYPE_IOMMU_MEMORY_REGION)
+extern bool global_dirty_log;
+
typedef struct MemoryRegionOps MemoryRegionOps;
typedef struct MemoryRegionMmio MemoryRegionMmio;
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index 44dcc98de6..0a532c3963 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -349,8 +349,13 @@ static inline void
cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
if (bitmap[k]) {
unsigned long temp = leul_to_cpu(bitmap[k]);
- atomic_or(&blocks[DIRTY_MEMORY_MIGRATION][idx][offset], temp);
atomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp);
+
+ if (global_dirty_log) {
+ atomic_or(&blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
+ temp);
+ }
+
if (tcg_enabled()) {
atomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset], temp);
}
@@ -367,6 +372,11 @@ static inline void
cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
xen_hvm_modified_memory(start, pages << TARGET_PAGE_BITS);
} else {
uint8_t clients = tcg_enabled() ? DIRTY_CLIENTS_ALL :
DIRTY_CLIENTS_NOCODE;
+
+ if (!global_dirty_log) {
+ clients &= ~(1 << DIRTY_MEMORY_MIGRATION);
+ }
+
/*
* bitmap-traveling is faster than memory-traveling (for addr...)
* especially when most of the memory is not dirty.
diff --git a/memory.c b/memory.c
index 480f3d989b..93486a71d7 100644
--- a/memory.c
+++ b/memory.c
@@ -38,7 +38,7 @@
static unsigned memory_region_transaction_depth;
static bool memory_region_update_pending;
static bool ioeventfd_update_pending;
-static bool global_dirty_log = false;
+bool global_dirty_log;
static QTAILQ_HEAD(, MemoryListener) memory_listeners
= QTAILQ_HEAD_INITIALIZER(memory_listeners);
--
2.21.0
- [Qemu-devel] [PULL 00/19] Migration patches, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 10/19] memory: Don't set migration bitmap when without migration,
Juan Quintela <=
- [Qemu-devel] [PULL 01/19] migration: fix multifd_recv event typo, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 06/19] cutils: remove one unnecessary pointer operation, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 13/19] memory: Introduce memory listener hook log_clear(), Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 07/19] migration/multifd: sync packet_num after all thread are done, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 02/19] migration-test: rename parameter to parameter_int, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 14/19] kvm: Update comments for sync_dirty_bitmap, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 19/19] migration: allow private destination ram with x-ignore-shared, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 08/19] migratioin/ram.c: reset complete_round when we gets a queued page, Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 11/19] bitmap: Add bitmap_copy_with_{src|dst}_offset(), Juan Quintela, 2019/07/11
- [Qemu-devel] [PULL 05/19] migration/xbzrle: update cache and current_data in one place, Juan Quintela, 2019/07/11