qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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 --]

      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).