From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: famz@redhat.com, stefanha@redhat.com, mst@redhat.com
Subject: [Qemu-devel] [PATCH 12/29] kvm: remove special handling of DIRTY_MEMORY_MIGRATION in the dirty log mask
Date: Mon, 27 Apr 2015 18:28:20 +0200 [thread overview]
Message-ID: <1430152117-100558-13-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1430152117-100558-1-git-send-email-pbonzini@redhat.com>
One recent example is commit 4cc856f (kvm-all: Sync dirty-bitmap from
kvm before kvm destroy the corresponding dirty_bitmap, 2015-04-02).
Another performance problem is that KVM keeps tracking dirty pages
after a failed live migration, which causes bad performance due to
disallowing huge page mapping.
Thanks to the previous patch, KVM can now stop hooking into
log_global_start/stop. This simplifies the KVM code noticeably.
Reported-by: Wanpeng Li <wanpeng.li@linux.intel.com>
Reported-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
kvm-all.c | 56 ++------------------------------------------------------
1 file changed, 2 insertions(+), 54 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 616bf04..c43a4a1 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -83,7 +83,6 @@ struct KVMState
struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
bool coalesced_flush_in_progress;
int broken_set_mem_region;
- int migration_log;
int vcpu_events;
int robust_singlestep;
int debugregs;
@@ -234,9 +233,6 @@ static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
mem.guest_phys_addr = slot->start_addr;
mem.userspace_addr = (unsigned long)slot->ram;
mem.flags = slot->flags;
- if (s->migration_log) {
- mem.flags |= KVM_MEM_LOG_DIRTY_PAGES;
- }
if (slot->memory_size && mem.flags & KVM_MEM_READONLY) {
/* Set the slot size to 0 before setting the slot to the desired
@@ -317,10 +313,6 @@ static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty)
mem->flags = flags;
/* If nothing changed effectively, no need to issue ioctl */
- if (s->migration_log) {
- flags |= KVM_MEM_LOG_DIRTY_PAGES;
- }
-
if (flags == old_flags) {
return 0;
}
@@ -375,31 +367,6 @@ static void kvm_log_stop(MemoryListener *listener,
}
}
-static int kvm_set_migration_log(bool enable)
-{
- KVMState *s = kvm_state;
- KVMSlot *mem;
- int i, err;
-
- s->migration_log = enable;
-
- for (i = 0; i < s->nr_slots; i++) {
- mem = &s->slots[i];
-
- if (!mem->memory_size) {
- continue;
- }
- if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
- continue;
- }
- err = kvm_set_user_memory_region(s, mem);
- if (err) {
- return err;
- }
- }
- return 0;
-}
-
/* get kvm's dirty pages bitmap and update qemu's */
static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section,
unsigned long *bitmap)
@@ -671,8 +638,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
KVMSlot *mem, old;
int err;
MemoryRegion *mr = section->mr;
- bool log_dirty =
- memory_region_get_dirty_log_mask(mr) & ~(1 << DIRTY_MEMORY_MIGRATION);
+ bool log_dirty = memory_region_get_dirty_log_mask(mr) != 0;
bool writeable = !mr->readonly && !mr->rom_device;
bool readonly_flag = mr->readonly || memory_region_is_romd(mr);
hwaddr start_addr = section->offset_within_address_space;
@@ -724,7 +690,7 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
old = *mem;
- if ((mem->flags & KVM_MEM_LOG_DIRTY_PAGES) || s->migration_log) {
+ if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
kvm_physical_sync_dirty_bitmap(section);
}
@@ -853,22 +819,6 @@ static void kvm_log_sync(MemoryListener *listener,
}
}
-static void kvm_log_global_start(struct MemoryListener *listener)
-{
- int r;
-
- r = kvm_set_migration_log(1);
- assert(r >= 0);
-}
-
-static void kvm_log_global_stop(struct MemoryListener *listener)
-{
- int r;
-
- r = kvm_set_migration_log(0);
- assert(r >= 0);
-}
-
static void kvm_mem_ioeventfd_add(MemoryListener *listener,
MemoryRegionSection *section,
bool match_data, uint64_t data,
@@ -944,8 +894,6 @@ static MemoryListener kvm_memory_listener = {
.log_start = kvm_log_start,
.log_stop = kvm_log_stop,
.log_sync = kvm_log_sync,
- .log_global_start = kvm_log_global_start,
- .log_global_stop = kvm_log_global_stop,
.eventfd_add = kvm_mem_ioeventfd_add,
.eventfd_del = kvm_mem_ioeventfd_del,
.coalesced_mmio_add = kvm_coalesce_mmio_region,
--
1.8.3.1
next prev parent reply other threads:[~2015-04-27 16:30 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-27 16:28 [Qemu-devel] [PATCH v2 00/29] Dirty bitmap atomic access and optimizations Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 01/29] memory: the only dirty memory flag for users is DIRTY_MEMORY_VGA Paolo Bonzini
2015-05-26 7:00 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 02/29] g364fb: remove pointless call to memory_region_set_coalescing Paolo Bonzini
2015-05-26 12:53 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 03/29] display: enable DIRTY_MEMORY_VGA tracking explicitly Paolo Bonzini
2015-05-26 7:13 ` Fam Zheng
2015-05-26 8:14 ` Paolo Bonzini
2015-05-26 11:24 ` Paolo Bonzini
2015-05-26 11:52 ` Peter Maydell
2015-05-26 11:56 ` Paolo Bonzini
2015-05-26 12:08 ` Peter Maydell
2015-05-26 12:10 ` Paolo Bonzini
2015-05-26 12:16 ` Peter Maydell
2015-05-31 20:32 ` Mark Cave-Ayland
2015-04-27 16:28 ` [Qemu-devel] [PATCH 04/29] display: add memory_region_sync_dirty_bitmap calls Paolo Bonzini
2015-05-26 7:36 ` Fam Zheng
2015-05-26 8:14 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 05/29] memory: differentiate memory_region_is_logging and memory_region_get_dirty_log_mask Paolo Bonzini
2015-05-26 7:46 ` Fam Zheng
2015-05-26 11:35 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 06/29] memory: prepare for multiple bits in the dirty log mask Paolo Bonzini
2015-05-26 7:55 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 07/29] framebuffer: check memory_region_is_logging Paolo Bonzini
2015-05-26 8:02 ` Fam Zheng
2015-05-26 11:16 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 08/29] ui/console: remove dpy_gfx_update_dirty Paolo Bonzini
2015-05-26 8:03 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 09/29] memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask Paolo Bonzini
2015-05-26 8:06 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 10/29] kvm: accept non-mapped memory in kvm_dirty_pages_log_change Paolo Bonzini
2015-05-26 8:10 ` Fam Zheng
2015-05-26 8:16 ` Paolo Bonzini
2015-05-26 8:22 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 11/29] memory: include DIRTY_MEMORY_MIGRATION in the dirty log mask Paolo Bonzini
2015-05-26 8:40 ` Fam Zheng
2015-05-26 9:07 ` Paolo Bonzini
2015-05-26 9:22 ` Fam Zheng
2015-05-26 9:26 ` Paolo Bonzini
2015-05-26 9:48 ` Fam Zheng
2015-05-26 9:07 ` Paolo Bonzini
2015-04-27 16:28 ` Paolo Bonzini [this message]
2015-05-26 8:56 ` [Qemu-devel] [PATCH 12/29] kvm: remove special handling of " Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 13/29] ram_addr: tweaks to xen_modified_memory Paolo Bonzini
2015-05-26 12:52 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 14/29] exec: use memory_region_get_dirty_log_mask to optimize dirty tracking Paolo Bonzini
2015-05-26 10:42 ` Fam Zheng
2015-05-26 10:58 ` Paolo Bonzini
2015-05-26 11:12 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 15/29] exec: move functions to translate-all.h Paolo Bonzini
2015-05-26 10:50 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 16/29] translate-all: remove unnecessary argument to tb_invalidate_phys_range Paolo Bonzini
2015-05-26 10:51 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 17/29] cputlb: remove useless arguments to tlb_unprotect_code_phys, rename Paolo Bonzini
2015-05-26 10:53 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 18/29] translate-all: make less of tb_invalidate_phys_page_range depend on is_cpu_write_access Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 19/29] exec: pass client mask to cpu_physical_memory_set_dirty_range Paolo Bonzini
2015-05-26 11:08 ` Fam Zheng
2015-05-26 11:28 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 20/29] exec: invert return value of cpu_physical_memory_get_clean, rename Paolo Bonzini
2015-05-26 11:26 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 21/29] exec: only check relevant bitmaps for cleanliness Paolo Bonzini
2015-05-26 11:31 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 22/29] memory: do not touch code dirty bitmap unless TCG is enabled Paolo Bonzini
2015-05-26 11:33 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 23/29] bitmap: add atomic set functions Paolo Bonzini
2015-05-26 11:54 ` Fam Zheng
2015-05-26 11:58 ` Paolo Bonzini
2015-05-26 12:36 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 24/29] bitmap: add atomic test and clear Paolo Bonzini
2015-05-26 12:27 ` Fam Zheng
2015-05-26 12:32 ` Fam Zheng
2015-05-26 12:33 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 25/29] memory: use atomic ops for setting dirty memory bits Paolo Bonzini
2015-05-26 12:29 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 26/29] migration: move dirty bitmap sync to ram_addr.h Paolo Bonzini
2015-05-26 12:34 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 27/29] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear Paolo Bonzini
2015-05-26 12:42 ` Fam Zheng
2015-05-26 12:45 ` Paolo Bonzini
2015-04-27 16:28 ` [Qemu-devel] [PATCH 28/29] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic Paolo Bonzini
2015-05-26 12:45 ` Fam Zheng
2015-04-27 16:28 ` [Qemu-devel] [PATCH 29/29] memory: strengthen assertions on mr->terminates Paolo Bonzini
2015-05-26 12:49 ` Fam Zheng
2015-05-26 12:52 ` Paolo Bonzini
2015-05-26 12:56 ` Fam Zheng
2015-05-25 21:50 ` [Qemu-devel] [PATCH v2 00/29] Dirty bitmap atomic access and optimizations Paolo Bonzini
2015-05-26 12:58 ` Fam Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1430152117-100558-13-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=famz@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).