From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40422) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YkBfS-0000ab-VX for qemu-devel@nongnu.org; Mon, 20 Apr 2015 09:23:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YkBfO-0005yB-07 for qemu-devel@nongnu.org; Mon, 20 Apr 2015 09:23:18 -0400 Received: from mail-wi0-x235.google.com ([2a00:1450:400c:c05::235]:33160) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YkBfN-0005y0-Kj for qemu-devel@nongnu.org; Mon, 20 Apr 2015 09:23:13 -0400 Received: by wiax7 with SMTP id x7so83447437wia.0 for ; Mon, 20 Apr 2015 06:23:12 -0700 (PDT) Date: Mon, 20 Apr 2015 14:23:10 +0100 From: Stefan Hajnoczi Message-ID: <20150420132310.GC21246@stefanha-thinkpad.redhat.com> References: <1427391520-29497-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="O3RTKUHj+75w1tg5" Content-Disposition: inline In-Reply-To: <1427391520-29497-1-git-send-email-pbonzini@redhat.com> Subject: Re: [Qemu-devel] [PATCH 00/22] Dirty bitmap atomic access and optimizations List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org --O3RTKUHj+75w1tg5 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable 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. >=20 > Patches 1-2 make acpi-build.h only use public memory APIs. >=20 > Patches 3-7 optimize access to the VGA dirty bitmap, by restricting > it to video RAM only. >=20 > 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). >=20 > Patches 16-21 are Stefan's patches to convert bitmap access to use > atomic primitives. >=20 > 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. >=20 > 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. >=20 > Paolo >=20 > 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 >=20 > 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 >=20 > 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 --O3RTKUHj+75w1tg5 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJVNP2+AAoJEJykq7OBq3PIFRUH/3Ibqym6o4LesP6j8xo4mMI5 26cyjvt37qsoyzWC671i5+2BrR1PbPJyyDnfoGezj3NrFVyyt51uOOh5g0Nh+TRW uWOx0E0z5KZVwxbTAghMmr+Q6dS7xU0K3Hnr4g+KVKULOS4VMYDQfRVTgHEgIGCL cr+V0SJnoLODC8ksTkc0mGiDI1WRGpqlMUkpQgjJtDjCEjCcxI3wkcfu/5/ZpVFr zuoqIOSCczmcxaYcsYbDQySNqXxc3pmXAk7ZiNiuigmTFJwOHXbQleHGEw9PNn7n ealT7qFucUmTc4yiR+mu8C3cDDk0AtVwW0c59biXRvBvNpn8y3G+RYPtsi7F9xQ= =h5Da -----END PGP SIGNATURE----- --O3RTKUHj+75w1tg5--