qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 00/29] Dirty bitmap atomic access and optimiz


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2 00/29] Dirty bitmap atomic access and optimizations
Date: Mon, 25 May 2015 23:50:31 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0


On 27/04/2015 18:28, 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.
> 
> This patch series does the following optimizations and cleanups:
> 
> 1) it lets KVM code treat migration as "just another dirty bitmap
> client" instead of needing the special global_log_start/stop callbacks.
> These remain in use in Xen and vhost.  This removes code and avoids
> bugs such as the one fixed in commit 4cc856f (kvm-all: Sync dirty-bitmap
> from kvm before kvm destroy the corresponding dirty_bitmap, 2015-04-02).
> 
> 2) it avoids modifications to unused dirty bitmaps: code if TCG
> is disabled, migration if no migration is in progress, VGA for
> regions other than VRAM.
> 
> and on top of this makes dirty bitmap access atomic.  I'm not including
> the patch to make 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) but it is also enabled by these patches.
> 
> Patches 1-4 are cleanups to DIRTY_MEMORY_VGA users.
> 
> Patches 5-12 are the first cleanup (KVM treats migration as just
> another client).  Patches 13-14 are a simple optimization that is enabled
> by these patches.
> 
> Patches 15-18 are bonus cleanups to translate-all.c's dirty memory
> tracking for TCG.
> 
> Patches 19-22 are the second cleanup (avoid modifications to unused
> dirty bitmaps).
> 
> Patches 23-28 are Stefan's patches for atomic access to the dirty
> bitmap, which has no performance impact in the common case thanks to
> the previous work.
> 
> Patch 29 is an unrelated strengthening of assertions, that mst spotted
> while reviewing v1.
> 
> v1->v2: completed work on removing global_start/global_stop from KVM
>       listener
> 
>         extra spelunking of TCG history so that the exec.c code
>       makes more sense
> 
>         extra splitting of patches (Stefan)
> 
>         keep memory_region_is_logging and memory_region_get_dirty_log_mask
>       APIs separate (mst)
> 
> Paolo Bonzini (23):
>   memory: the only dirty memory flag for users is DIRTY_MEMORY_VGA
>   g364fb: remove pointless call to memory_region_set_coalescing
>   display: enable DIRTY_MEMORY_VGA tracking explicitly
>   display: add memory_region_sync_dirty_bitmap calls
>   memory: differentiate memory_region_is_logging and
>     memory_region_get_dirty_log_mask
>   memory: prepare for multiple bits in the dirty log mask
>   framebuffer: check memory_region_is_logging
>   ui/console: remove dpy_gfx_update_dirty
>   memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask
>   kvm: accept non-mapped memory in kvm_dirty_pages_log_change
>   memory: include DIRTY_MEMORY_MIGRATION in the dirty log mask
>   kvm: remove special handling of DIRTY_MEMORY_MIGRATION in the dirty
>     log mask
>   ram_addr: tweaks to xen_modified_memory
>   exec: use memory_region_get_dirty_log_mask to optimize dirty tracking
>   exec: move functions to translate-all.h
>   translate-all: remove unnecessary argument to tb_invalidate_phys_range
>   cputlb: remove useless arguments to tlb_unprotect_code_phys, rename
>   translate-all: make less of tb_invalidate_phys_page_range depend on
>     is_cpu_write_access
>   exec: pass client mask to cpu_physical_memory_set_dirty_range
>   exec: invert return value of cpu_physical_memory_get_clean, rename
>   exec: only check relevant bitmaps for cleanliness
>   memory: do not touch code dirty bitmap unless TCG is enabled
>   memory: strengthen assertions on mr->terminates
> 
> 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                  |  46 +--------------
>  cputlb.c                     |   7 +--
>  exec.c                       |  99 +++++++++++++++----------------
>  hw/display/cg3.c             |   2 +
>  hw/display/exynos4210_fimd.c |  20 ++++---
>  hw/display/framebuffer.c     |   4 ++
>  hw/display/g364fb.c          |   3 +-
>  hw/display/sm501.c           |   2 +
>  hw/display/tcx.c             |   2 +
>  hw/display/vmware_vga.c      |   2 +-
>  hw/virtio/dataplane/vring.c  |   2 +-
>  hw/virtio/vhost.c            |   9 ++-
>  include/exec/cputlb.h        |   3 +-
>  include/exec/exec-all.h      |   6 +-
>  include/exec/memory.h        |  25 ++++++--
>  include/exec/ram_addr.h      | 138 
> ++++++++++++++++++++++++++++---------------
>  include/qemu/bitmap.h        |   4 ++
>  include/qemu/bitops.h        |  14 +++++
>  include/ui/console.h         |   4 --
>  kvm-all.c                    |  77 ++++++------------------
>  linux-user/mmap.c            |   7 ++-
>  memory.c                     |  76 ++++++++++++++++--------
>  translate-all.c              |  20 +++----
>  translate-all.h              |   7 +++
>  ui/console.c                 |  61 -------------------
>  user-exec.c                  |   1 +
>  util/bitmap.c                |  81 +++++++++++++++++++++++++
>  xen-hvm.c                    |  22 ++++---
>  28 files changed, 401 insertions(+), 343 deletions(-)
> 

Ping?

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]