From: Stefan Hajnoczi <stefanha@gmail.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 00/22] Dirty bitmap atomic access and optimizations
Date: Mon, 20 Apr 2015 14:23:10 +0100 [thread overview]
Message-ID: <20150420132310.GC21246@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <1427391520-29497-1-git-send-email-pbonzini@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4115 bytes --]
On Thu, Mar 26, 2015 at 06:38:18PM +0100, Paolo Bonzini wrote:
> QEMU is currently accessing the dirty bitmaps very liberally,
> which is understandable since the accesses are cheap. This is
> however not good for squeezing maximum performance out of dataplane,
> and is also not good if the accesses become more expensive---as is
> the case when they use atomic primitives.
>
> Patches 1-2 make acpi-build.h only use public memory APIs.
>
> Patches 3-7 optimize access to the VGA dirty bitmap, by restricting
> it to video RAM only.
>
> Patches 8-15 optimize access to the code and migration bitmaps,
> by tracking them respectively if TCG is enabled and if migration
> is in progress. Note that the first iteration of migration already
> does not look at the migration bitmap (commit 70c8652, migration:
> do not search dirty pages in bulk stage, 2013-03-26).
>
> Patches 16-21 are Stefan's patches to convert bitmap access to use
> atomic primitives.
>
> While the main purpose of these patches is a working dirty bitmap
> for dataplane (and possibly multithreaded TCG), there's something
> that they are immediately useful for: patch 22 makes the migration
> thread synchronize the bitmap outside the big QEMU lock, thus
> removing the last source of jitter during the RAM copy phase of
> migration.
>
> Please review and test! (it's available as branch "atomic-dirty"
> on my github repository) In particular, I suspect that the
> postcopy patches might be good at finding bugs.
>
> Paolo
>
> Paolo Bonzini (16):
> memory: add memory_region_ram_resize
> acpi-build: remove dependency from ram_addr.h
> memory: the only dirty memory flag for users is DIRTY_MEMORY_VGA
> display: enable DIRTY_MEMORY_VGA tracking explicitly
> memory: return bitmap from memory_region_is_logging
> framebuffer: check memory_region_is_logging
> ui/console: check memory_region_is_logging
> memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask
> memory: return DIRTY_MEMORY_MIGRATION from memory_region_is_logging
> ram_addr: tweaks to xen_modified_memory
> exec: simplify notdirty_mem_write
> exec: use memory_region_is_logging to optimize dirty tracking
> exec: pass client mask to cpu_physical_memory_set_dirty_range
> exec: only check relevant bitmaps for cleanliness
> memory: do not touch code dirty bitmap unless TCG is enabled
> migration: run bitmap sync outside iothread lock
>
> Stefan Hajnoczi (6):
> bitmap: add atomic set functions
> bitmap: add atomic test and clear
> memory: use atomic ops for setting dirty memory bits
> migration: move dirty bitmap sync to ram_addr.h
> memory: replace cpu_physical_memory_reset_dirty() with test-and-clear
> memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic
>
> arch_init.c | 56 +++----------------
> cputlb.c | 4 +-
> exec.c | 103 ++++++++++++++++------------------
> hw/core/loader.c | 8 +--
> hw/display/cg3.c | 1 +
> hw/display/exynos4210_fimd.c | 7 ++-
> hw/display/framebuffer.c | 23 ++++++--
> hw/display/g364fb.c | 2 +-
> hw/display/sm501.c | 1 +
> hw/display/tcx.c | 1 +
> hw/display/vmware_vga.c | 2 +-
> hw/i386/acpi-build.c | 36 ++++++------
> hw/virtio/vhost.c | 3 +-
> include/exec/memory.h | 27 +++++++--
> include/exec/ram_addr.h | 128 ++++++++++++++++++++++++++++---------------
> include/hw/loader.h | 8 ++-
> include/qemu/bitmap.h | 4 ++
> include/qemu/bitops.h | 14 +++++
> kvm-all.c | 3 +-
> memory.c | 34 ++++++++----
> ui/console.c | 14 +++--
> util/bitmap.c | 78 ++++++++++++++++++++++++++
> xen-hvm.c | 3 +-
> 23 files changed, 356 insertions(+), 204 deletions(-)
Modulo the comments that have already been posted:
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --]
prev parent reply other threads:[~2015-04-20 13:23 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-26 17:38 [Qemu-devel] [PATCH 00/22] Dirty bitmap atomic access and optimizations Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 01/22] memory: add memory_region_ram_resize Paolo Bonzini
2015-03-28 18:58 ` Michael S. Tsirkin
2015-03-29 7:30 ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 02/22] acpi-build: remove dependency from ram_addr.h Paolo Bonzini
2015-03-28 18:58 ` Michael S. Tsirkin
2015-03-26 17:38 ` [Qemu-devel] [PATCH 03/22] memory: the only dirty memory flag for users is DIRTY_MEMORY_VGA Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 04/22] display: enable DIRTY_MEMORY_VGA tracking explicitly Paolo Bonzini
2015-04-20 13:11 ` Stefan Hajnoczi
2015-04-20 13:54 ` Paolo Bonzini
2015-04-22 9:12 ` Stefan Hajnoczi
2015-03-26 17:38 ` [Qemu-devel] [PATCH 05/22] memory: return bitmap from memory_region_is_logging Paolo Bonzini
2015-03-27 5:44 ` Fam Zheng
2015-03-27 6:01 ` Paolo Bonzini
2015-03-28 18:54 ` Michael S. Tsirkin
2015-03-29 7:33 ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 06/22] framebuffer: check memory_region_is_logging Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 07/22] ui/console: " Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 08/22] memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 09/22] memory: return DIRTY_MEMORY_MIGRATION from memory_region_is_logging Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 10/22] ram_addr: tweaks to xen_modified_memory Paolo Bonzini
2015-03-28 19:04 ` Stefano Stabellini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 11/22] exec: simplify notdirty_mem_write Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 12/22] exec: use memory_region_is_logging to optimize dirty tracking Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 13/22] exec: pass client mask to cpu_physical_memory_set_dirty_range Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 14/22] exec: only check relevant bitmaps for cleanliness Paolo Bonzini
2015-03-27 6:10 ` Fam Zheng
2015-03-27 9:19 ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 15/22] memory: do not touch code dirty bitmap unless TCG is enabled Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 16/22] bitmap: add atomic set functions Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 17/22] bitmap: add atomic test and clear Paolo Bonzini
2015-03-27 6:37 ` Fam Zheng
2015-03-27 9:21 ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 18/22] memory: use atomic ops for setting dirty memory bits Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 19/22] migration: move dirty bitmap sync to ram_addr.h Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 20/22] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 21/22] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 22/22] migration: run bitmap sync outside iothread lock Paolo Bonzini
2015-04-20 13:23 ` Stefan Hajnoczi [this message]
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=20150420132310.GC21246@stefanha-thinkpad.redhat.com \
--to=stefanha@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).